Laden...

SQL-Server Backup

Erstellt von Sclot vor 14 Jahren Letzter Beitrag vor 14 Jahren 775 Views
S
Sclot Themenstarter:in
324 Beiträge seit 2007
vor 14 Jahren
SQL-Server Backup

verwendetes Datenbanksystem: SQL-Server 2008 Express

Ich versuch grad zu verstehen was der SQL-Server macht, wenn man ein Backup macht.

Ein Normales Backup funktioniert ja damit:

BACKUP DATABASE sven TO DISK='c:\data\sven.bak';

Gelesen habe ich nun, dass der SQL-Server Teilweise Tabellen beim Backup sperrt.

Wenn ich jetzt also einfach ein Programm habe, das dauernd stumpsinnige INSERT´s in die DB tut - und damit ja schreibend auf eine TABELLE zugreift - und ich lasse jetzt ein Backup laufen und das Backup sichert jetzt genau die Tabelle weg, auf die ich gerade schreibend zugreife....

Ist dies richtig, das die Anfragen in der Zeit, die das Backup braucht in das Log gehen und wenn der Backup-Prozess die Tabelle wieder frei gibt zurück in die Tabelle geschrieben wird?

Wenn ja - ist das nicht ein wenig inkonsistent bei Daten, die sich auf mehreren Tabellen aufteilen?
Wäre es nicht Sicherer die ganze Datenbank solange zu Sperren, wie das Backup läuft?

Kann mir da mal bitte jemand einen Gedanken-Stoß geben?

Danke 😃

1.696 Beiträge seit 2006
vor 14 Jahren

Hallo,

dafür ist der TransactionLog da, d.h. Backup + TransactionLog ergibt die vollständige Datenbank bis zum Zeitpunk der TransactionLog-Sicherung. Deshalb musst du den letzten TransactionLog bei einem Crash immer versuchen zu bekommen und als letztes beim Restore einspielen, somit hast du den geringsten Datenverlust.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

1.564 Beiträge seit 2007
vor 14 Jahren

Hallo

Ein Datenbank-Backup ist immer integer. Der Lock auf die Tabelle(n) passiert nur kurz weil SQL Server einen Check-Point erzeugt bevor das eigentliche Backup beginnt. So ist sichergestellt das keine Fragmente zusammenhängender Daten gesichert werden.

Das TLog-Backup kann man in kürzeren Abständen laufen lassen und damit zum einen kleinere Backup-Files erzeugen und zum anderen das TLog-File wieder freizugeben.

Theoretisches Szenario:
* Nachts um 02:00 Datenbank-Backup
* TLog-Backup um 10:00, um 14:00 und um 20:00 Uhr
So muss nicht immer die gesamte Datenbank gesichert werden, man kann aber mit dem Full-Backup das nachts gelaufen ist und den danach gelaufenen TLog-Backups einen aktuelleren Datenstand wiederherstellen wenn's nötig ist.

Zusätzlich können die TLog-Backups noch verwendet werden um über Log-Shipping eine Replika zu befüllen oder über TLog-Reader, wie von Red-Gate, diese zu analysieren und ggf. für Auditing zu verwenden.

Grüße
Flo

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.