Der Hauptunterschied zwischen vollständigen und Nur-Kopie-Sicherungen besteht darin, ob die LSN (Log Sequence Number) und insbesondere die LSN DatabaseBackupLSN
aktualisiert werden.
Wenn Sie eine vollständige Sicherung erstellen, DatabaseBackupLSN
wird die aktualisiert. Wenn Sie nach der vollständigen Sicherung eine differenzielle Sicherung erstellen, hat diese Sicherung eine, DatabaseBackupLSN
die der vollständigen Sicherung entspricht, und daher kann SQL die beiden miteinander verknüpfen (z. B. weiß es von diesen LSNs, dass der Diff der vollständigen Sicherung gefolgt ist).
Das Problem tritt auf, wenn geplante Sicherungen ausgeführt werden, sodass Sie zunächst eine vollständige Sicherung und dann eine Folge von Differentials ausführen. Wenn Sie manuell eine vollständige Sicherung erstellen, wird die LSN aktualisiert, und ab diesem Zeitpunkt verweist jede differenzielle Sicherung, die Sie über eine geplante Sicherung erstellen, auf die neue LSN, die nicht die ursprüngliche ist. Wenn eine Wiederherstellung erforderlich ist, können Sie Ihre geplante vollständige Sicherung wiederherstellen. Wenn Sie jedoch nach dem manuellen Auftrag versuchen, eine der differenziellen Sicherungen wiederherzustellen, schlägt dies fehl, da die LSNs nicht mehr übereinstimmen.
Bei einer Nur-Kopie-Sicherung wird die nicht berührt DatabaseBackupLSN
, und als solche wird diese Sicherungskette nicht unterbrochen.
Es gibt eine gute Beschreibung des Problems und warum so viele Leute es in Breaking the Backup Chain - REDUX (oder Eating Crow) von Michael K. Campbell missverstehen , das gute visuelle Anleitungen wie diese enthält:
Eine gute Erklärung der vier verschiedenen LSNs und ihrer Verwendung finden Sie unter Grundlegendes zu SQL Server-Protokollfolgenummern für Sicherungen von Simon Liew.
Sie können das Problem vermeiden, indem Sie nicht mehr als eine Aufgabe für Standardsicherungen einer Datenbank ausführen. Alle Ad-hoc- oder sekundären Sicherungen sollten mit der Option Nur-Kopie durchgeführt werden. Ausführliche Informationen finden Sie unter Nur-Kopie-Sicherungen (SQL Server). Grundsätzlich verwenden Sie jedoch die Option "Nur-Kopie-Sicherung" in SSMS über T-SQL, das WITH COPY_ONLY
im Befehl angegeben ist Oder verwenden Sie mit PowerShell den -CopyOnly
Parameter.
Angenommen, wir haben eine Datenbank mit geplanten Sicherungen. Die vollständige Sicherung wird alle 24 Stunden um 00:00 Uhr einmal ausgeführt. Außerdem gibt es differenzielle Sicherungen, die alle 6 Stunden ausgeführt werden, und Transaktionsprotokollsicherungen, die stündlich ausgeführt werden. Was ist, wenn wir mitten am Tag ein zusätzliches vollständiges Backup erstellen müssen, um einen anderen Server wiederherzustellen? Was sollen wir in diesem Fall tun? Natürlich können wir ein vollständiges Backup erstellen.
BACKUP DATABASE Test TO DISK = 'C:/Test.bak'
Wenn Sie jedoch eine Datenbank sichern, wirken sich einige Änderungen darauf aus, wie die folgenden Sicherungen wiederhergestellt werden (differenzielle Sicherungen und Transaktionsprotokollsicherungen wirken sich beide auf den Wiederherstellungsvorgang aus). In diesem Fall sind alle folgenden differenziellen Sicherungen von der letzten vollständigen Sicherung abhängig. Wenn die letzte vollständige Sicherung verloren geht, kann die Datenbank nicht wiederhergestellt werden.
Aber wie können wir eine Sicherung erstellen, die die folgenden Sicherungs- oder Wiederherstellungsprozesse für diese Datenbank nicht beeinflusst? Hier kommen Nur-Kopie-Backups zum Einsatz.
BACKUP DATABASE Test TO DISK = 'C:\Test.bak' WITH COPY_ONLY
quelle
Bei einer vollständigen Sicherung und einer Reihe von Protokolldateisicherungen wird eine Protokollkette unter Verwendung der LSN (Log Sequence Number) verwaltet. Wenn Sie eine Sicherung durchführen möchten, ohne die Protokollkette zu unterbrechen, führen Sie eine Nur-Kopie-Sicherung durch.
Wenn Sie keine Nur-Kopie-Sicherung durchführen, ist die Protokollkette unterbrochen und die von Ihnen erstellte Sicherung ist die letzte vollständige Sicherung. Dies bedeutet, dass die vorherigen Protokollsicherungen nicht auf die neu erstellten vollständigen Sicherungen angewendet werden können. Die Protokollkette wird hauptsächlich für Zeitpunktwiederherstellungen oder Protokollversandszenarien verwaltet.
Beispiel: Angenommen, Sie haben ein Sicherungsszenario, bei dem alle 6 Stunden (Mitternacht, 6 Uhr, Mittag, 18 Uhr) vollständige Sicherungen durchgeführt und alle 15 Minuten Sicherungen protokolliert werden. Um 9.00 Uhr geht die Anfrage ein, dass eine Kopie Ihrer Datenbank auf einem Testserver abgelegt werden soll. Sie möchten die Sicherung durchführen, ohne die Protokollkette zu unterbrechen oder Ihre Sicherungsjobs zu unterbrechen. In diesem Fall wird eine Nur-Kopie-Sicherung erstellt. Durch die Sicherung nur mit Kopie werden Ihre regulären Sicherungssätze nicht gestört.
quelle
Eine vollständige Sicherung und eine Sicherung nur durch Kopieren unterbrechen die Protokollkette nicht. Nur wenn Sie eine tlog-Sicherung durchführen, liegt eine LSN-Abweichung vor.
quelle