Was passiert während einer Live-SQL Server-Sicherung?

18

Einige meiner Kollegen waren überrascht, als ich ihnen sagte, dass ich eine SQL Server-Datenbank sichern kann, während sie noch ausgeführt wird, und fragten sich, wie dies möglich ist. Ich weiß, dass SQL Server in der Lage ist, eine Datenbank zu sichern, solange diese noch online ist, aber ich weiß nicht genau, warum dies möglich ist. Meine Frage ist, welche Auswirkung dies auf die Datenbank hat.

Wenn Daten geändert werden (durch Einfügen, Aktualisieren oder Löschen), während die Sicherung ausgeführt wird, enthält die Sicherung diese Änderungen oder wird sie anschließend zur Datenbank hinzugefügt?

Ich gehe davon aus, dass die Protokolldatei hier eine wichtige Rolle spielt, bin mir aber nicht ganz sicher, wie.

Bearbeiten: In meinem Fall geht es lediglich um das Sichern der Datenbanken mithilfe des SQL Server-Agenten und die Auswirkungen von Datenbankänderungen während dieses Vorgangs.

Sean Howat
quelle

Antworten:

24

Die vollständige Sicherung enthält sowohl die Daten als auch das Protokoll. Bei Daten wird einfach jede Seite der Datenbank in das Backup kopiert, so wie es zum Zeitpunkt des Lesens der Seite ist. Anschließend wird das gesamte 'relevante' Protokoll an das Sicherungsmedium angehängt. Dies umfasst zumindest das gesamte Protokoll zwischen der LSN zu Beginn des Sicherungsvorgangs und der LSN am Ende des Sicherungsvorgangs. In der Realität ist in der Regel mehr Protokoll vorhanden, da alle aktiven Transaktionen zu Beginn der Sicherung und das für die Replikation erforderliche Protokoll einbezogen werden müssen. Siehe Debunking einiger Mythen über vollständige Datenbanksicherungen .

Wenn die Datenbank wiederhergestellt wird, werden alle Datenseiten in die Datenbankdateien kopiert, und alle Protokollseiten werden in die Protokolldatei (en) kopiert. Die Datenbank ist zu diesem Zeitpunkt inkonsistent, da sie Datenseitenbilder enthält, die möglicherweise nicht miteinander synchronisiert sind. Jetzt wird aber eine normale Wiederherstellung durchgeführt. Da das Protokoll das gesamte Protokoll während der Sicherung enthält, ist die Datenbank am Ende der Wiederherstellung konsistent.

Remus Rusanu
quelle
1
Ein großartiger Beitrag und der Link halfen, ein gutes Beispiel zu liefern. Vielen Dank.
Sean Howat
Sehr prägnant. Gut gemacht!
Allen1
2

Während der Sicherung wird ein Snapshot für die Datenbank erstellt und die Daten werden für die Sicherung aus diesem Snapshot gelesen. Die tatsächlichen Live-DB-Vorgänge wirken sich nicht auf den Sicherungsvorgang aus.

Aravind
quelle
1

Sie können es nicht einfach kopieren, da es während der Kopie Änderungen an der Datenbank geben kann, auf die Sie in der Frage hingewiesen haben.

Dies muss mit Agenten geschehen, die die Datenbankfunktionalität kennen und dann einen "Schnappschuss" über Betriebssystemfunktionen erstellen oder ein Dienstprogramm verwenden, um die Datenbank in einem sicheren Zustand zu sichern (wie mysqldump, wenn mysql verwendet wird).

Andernfalls erhalten Sie ein Backup, das möglicherweise beschädigt ist, und Sie werden es erst kennen, wenn Sie es wiederherstellen. Ich glaube, Joel und Jeff haben kürzlich in einem StackOverflow-Podcast ein wenig darüber gesprochen.

Und Sie haben Recht, dass die Protokolldatei wichtig ist. Wenn die Journal- / Protokolldatei nicht mit den tatsächlichen Daten synchron ist, führt die Wiederherstellung der Dateien zu Beschädigungen.

Es läuft auf ein Backup hinaus, das mit einem sicheren Status der Datenbank erstellt wurde, entweder über einen datenbankfähigen Agenten oder eine Snapshot-Anwendung oder eine Anwendung, die weiß, wie die Datenbank ordnungsgemäß in das Löschen von Daten eingebunden wird, ohne dass Aktualisierungen während des Daten-Dumps und des Backups beeinträchtigt werden die resultierende Datei.

Bart Silverstrim
quelle
Dies ist eine allgemeinere Antwort, aber ich habe vergessen, anzugeben, dass ich zuerst mit dem SQL Server-Agenten gearbeitet habe. Trotz der Methode gab es noch einige gute Details darüber, was während dieses Prozesses passieren könnte, so dass es trotzdem geholfen hat! Vielen Dank.
Sean Howat
0

Es gibt so viele Möglichkeiten (im Allgemeinen keine Ahnung, wie MSSQL dies normalerweise tut), wie einfach die Datenbank in eine Datei zu sichern, während Änderungen an eine Protokolldatei angehängt werden, die nach Abschluss der Sicherung festgeschrieben wird - um einen dateisystemspezifischen Snapshot zu verwenden Funktionen wie VSS unter Windows.

Oskar Duveborn
quelle
Auch Datenbanken, die von Grund auf MVCC-basiert sind (wie PostGres), können diese Verhalten verwenden, um einen Snapshot zu verwalten, von dem die Sicherung kopiert wird, während sie weiterhin Aktualisierungen der Datendateien durch Transaktionen zulassen, die während der Sicherungsausführung gestartet werden. Wie Sie sagen, gibt es mehrere Methoden. Die verwendete hängt vom Kerndesign der Datenspeicher-Engine und den Transaktionsverarbeitungsfunktionen ab.
David Spillett
-1

Sie können so etwas wie ein Nur-Kopie-Backup erstellen. Wirkt sich nicht auf die Datenbank aus, solange diese online ist

darotweiler
quelle
Was ist eine Nur-Kopie-Sicherung? Wie wird es durchgeführt? Gibt es irgendwelche Einschränkungen zu beachten? Gibt es Links zu Beispielen für eine solche Bestie? Wenn Sie eine Antwort einreichen möchten, stellen Sie sich vor, was hilfreich sein könnte, um herauszufinden, ob jemand diese Frage in 2-3 Jahren hatte.
RNXRX