Ich hatte eine Situation, in der die nativen Sicherungen auf einem Server erstellt wurden.
Ich habe zufällig gesehen, msdb
dass es ein Backup-Tool eines Drittanbieters ( AppAssure
) gab, das auch VSS (Art) verwendete backup to virtual device
.
In einem bestimmten Intervall führte die AppAssure (Sicherung wurde durchgeführt VIRTUAL DEVICE
) eine COPY_ONLY backup
und in einem anderen Intervall eine FULL backup
Unterbrechung der Protokollkette durch.
Gibt es eine Möglichkeit ( T-SQL query
) zu wissen, wann eine Sicherungsprotokollkette unterbrochen ist?
sql-server
backup
Santhoshkumar KB
quelle
quelle
Antworten:
Referenzlesung / Ähnliche Fragen und Antworten
Vielleicht möchten Sie meine Antwort überprüfen, die ich als Antwort auf die Frage gepostet habe: Werden VSS-Backups die Logchain brechen? (dba.stackexchange.com)
Die Erklärung in meiner Antwort verweist auch auf die Frage Wie kann ich eine SQL Server-Datenbank mit Windows Server Backup sichern? (serverfault.com), die auch von mir beantwortet wurde.
Transaktionsprotokollkette
Wenn eine TLOG-Sicherung (Transaction Log) durchgeführt wird, werden die Sicherungsinformationen in verschiedenen Tabellen in der msdb- Datenbank gespeichert . Die gespeicherten Informationen enthalten Informationen wie
backup_type
,logical_device_name
,physical_device_name
,is_copy_only
,is_snapshot
, und verschiedene..._lsn
Spalten (LSN = Protokollfolgenummer).Mit dem folgenden Skript können Sie die Informationen zur Transaktionsprotokoll-Sicherungskette von Ihrer SQL Server-Instanz über die msdb-Datenbank abrufen:
Achtung: Die where-Klausel wählt derzeit die AdventureWorks2012-Datenbank aus
Unterbrochene Transaktionsprotokollkette
Die (Transaktions-) Protokollkette wird niemals unterbrochen, es sei denn, eine der folgenden Bedingungen ist erfüllt:
TRUNCATE_ONLY
COPY_ONLY
Option erstellt und dann von der Festplatte gelöscht, da die Entwickler nur eine schnelle Sicherung benötigten, um eine Situation in der Datenbank und IhrerFULL
Sicherung zu analysieren, bevor diese durch (a) Sicherungsverfahren gelöscht wurde.Deine Situation
In dem von Ihnen bereitgestellten Screenshot haben Sie eine
FULL
Sicherung der Datenbank, die sich befindet,is_copy_only
und kurz nach einerFULL
Sicherung, die es nicht istis_copy_only
. Was Sie jetzt nicht wissen:Ist das zweite
FULL
Nicht-is_copy_only
Backup ein Schnappschuss oder nicht?Wenn Sie mein Skript von oben verwenden und die
WHERE
Klausel so ändern , dass sie mit Ihrem Datenbanknamen übereinstimmt, stellen Sie möglicherweise fest, dass es sich bei dieserFULL
Sicherungis_copy_only
möglicherweise nicht nur um eine Sicherung handeltis_snapshot
.Und das könnte eine neue Frage aufwerfen:
Wird der
FULL
,is_snapshot
Datenbank - Backup meiner Datenbank die Protokollsicherungskette brechen?Aber...
.... egal in welche Richtung dies geht, solange Sie über eine ununterbrochene Kette von
FULL
undTLOG
Sicherungen verfügen , auf die Sie zugreifen können, können Sie Ihre Datenbank zu jedem Zeitpunkt wiederherstellen, selbst wenn Sie eine andereFULL
Sicherung dazwischen haben.Sie können dies anhand der Ausgabe meines Skripts für Ihre Datenbank überprüfen, indem Sie sich die
first_lsn
undlast_lsn
-Nummern ansehen. Sie sollten übereinstimmen, auch wenn einFULL
Backup umgangen wird .Sei lieber sicher als traurig
Ich habe eine
AdminDB2
Datenbank für eine meiner Instanzen. Ich habe einTLOG
Backup erstellt, Daten geändert, einFULL
Backup durchgeführt, Daten geändert, einTLOG
Backup durchgeführt, ....Werfen wir einen Blick auf meine Sicherungshistorie von
AdminDB2
:Die Reihenfolge ist absteigend
Sie können die letzte
TLOG
Sicherung oben, die vorherigeFULL
(Zwischen-) Sicherung um2018-04-25 17:28:48.000
, die vorherigeTLOG
Sicherung um2018-04-25 17:28:23.000
usw. sehen.Um die
AdminDB2
Datenbank auf den aktuellen Zeitpunkt zurückzusetzen, müsste ich die ersteFULL
Sicherung von2018-04-25 17:27:32.000
(da ich die Zwischensicherung gelöscht habeFULL
) zusammen mit allenTLOG
Sicherungen verwenden.Probieren wir es aus.
FULL
SicherungsdateiAdminDB2_FULL_20180425_172848.bak
auf meiner Festplatte (oder benennen Sie sie um), nur weil es die dazwischen liegende ist.FULL
BackupAdminDB2_FULL_20180425_172732.bak
TLOG
SicherungsdateienOverwrite the existing database (WITH REPLACE)
Skript
Ausgabe
... und die Datenbank ist wieder ONLINE.
Zusammenfassung
Die Sicherungskette wird nur unterbrochen, wenn Sie die TLOG-Sicherungen dazwischen verlieren. Ansonsten können Sie eine Datenbank aus einer
FULL
Sicherung vor langer Zeit wiederherstellen und einfach alleTLOG
Sicherungen hinzufügen .Jedoch...
... es ist schneller ein neueres zu haben
FULL
,DIFF
undTLOG
Sicherungen praktisch.Zusätzliche Informationen als Antwort auf einen Kommentar: Die Transaktionsprotokollsicherung wurde mit der Option TRUNCATE_ONLY durchgeführt. Wenn dies geschieht, gibt es eine Möglichkeit, dies durch eine T-SQL-Abfrage zu erkennen
Sichern des Transaktionsprotokolls nur mit Truncate_only
In früheren Versionen von SQL Server vor SQL Server 2008 konnten Sie die folgende Anweisung verwenden:
Dies ist veraltet und wird nicht mehr unterstützt. Sie erhalten eine Fehlermeldung wie die folgende:
Die neue Methode ist das Sichern auf der Festplatte
NUL
und wird mit dem folgenden Befehl ausgeführt:Dies gibt die folgenden Informationen zurück:
Referenz: BACKUP (Transact-SQL) (Microsoft Docs)
In Ihrem Sicherungsverlauf wird Folgendes angezeigt:
Die Informationen für
logical_device_name
(ldev
) undphysical_device_name
(pdev
) enthalten beide den WertNULL
. Dies ist ein Zeichen dafür, dass aBACKUP LOG ...
mit aTRUNCATE_ONLY
(new :) ausgeführt wurdeTO DISK='NUL'
. Sie haben die Möglichkeit verloren, über diesen Punkt hinaus mithilfe von Transaktionsprotokollsicherungen wiederherzustellen.Zusätzliche Informationen als Antwort auf den Kommentar: Ja - dies war ein is_snapshot = 1 [Backup]
is_snapshot
Bitte lesen Sie den Abschnitt is_snapshot in meiner Antwort auf die Frage Verwendung der VSS-Sicherung eines Drittanbieters plus native SQL-Sicherung
Aus meiner ursprünglichen Antwort:
Ich hoffe diese Information ist ausreichend.
quelle
Transaction Log backup was performed with the option TRUNCATE_ONLY
- Gibt es in diesem Fall eine Möglichkeit, dies durch eine T-SQL-Abfrage zu erkennen?If you use my script from above and change the WHERE clause to match your database name, you might find out that that FULL backup that is not is_copy_only might just be a is_snapshot.
Ja - das war einis_snapshot = 1
Gemäß MSDN-Dokumentation TRANSACTION LOG BACKUP und RESTORE SEQUENCE: Myths & Truths Eine fortlaufende Folge von
T-Log
Backups ist durch a verbundenLog Chain
, das mit einer vollständigen Sicherung beginnt. Sofern wir nicht explizit etwas ausführen, das die Protokollkette unterbricht (z. B. das BACKUP-Protokoll TRUNCATE_ONLY * ausführen oder zum SIMPLE-Wiederherstellungsmodell wechseln), bleibt die vorhandene Kette intakt. Wenn die Protokollkette intakt ist, können Sie Ihre Datenbank aus jeder vollständigen Datenbanksicherung im Mediensatz wiederherstellen, gefolgt von allen nachfolgendenT-Log
Sicherungen bis zum Fehlerpunkt.Und als
MSSQLTIPS
Dokumente hier Beim Wiederherstellen einer Datenbank muss die anfängliche Datenbank- RESTORE- Sequenz von einer vollständigen Datenbanksicherung ausgehen. Eine Datenbank-RESTORE-Sequenz kann nicht mit einer differenziellen Dateisicherung oder einer Transaktionsprotokollsicherung beginnen. Bei der Wiederherstellung von Datenbanken gibt es vier wichtige LSNs:FirstLSN
,LastLSN
,CheckpointLSN
undDatabaseBackupLSN
. Diese Werte können mit dem Befehl RESTORE HEADERONLY aus einer SQL Server-Sicherungsdatei abgerufen werden .Zum Beispiel
Im obigen Screenshot möchte ich Ihnen den Header "Full Backup" und den Header "Transaction Log Backup" anzeigen. Wenn der Sicherungstyp 1 ist , bedeutet dies, dass es sich um einen Header-Teil der vollständigen Sicherung handelt. Und wenn es 2 gibt , bedeutet das, dass es sich um einen Transaktionsprotokoll-Sicherungsheader handelt.
In diesem Screenshot möchte ich Ihnen zuerst zeigen
Restore Headeronly
.. für die vollständige Sicherung, dann für die Transaktionsprotokollsicherung und erneut für die vollständige Sicherung derselben Datenbank.Hinweis: Hier habe ich aus Sicherheitsgründen einen Teil des Screenshots hervorgehoben.
Für Ihren weiteren Hinweis hier und hier
quelle
you can restore your database from any FULL database backup in the media set, followed by all subsequent T-Log backups to the point of failure
.AppAssure
tatsächlich das TRUNCATE-LOG erstellt, als ein Backup ohne COPY_ONLY erstellt wurde !!Nachdem ich Ihre Frage gelesen habe, bin ich nicht davon überzeugt, dass Ihre "Protokollkette" aufgrund dieser
Appsure
Sicherung unterbrochen ist . Angenommen , können Sie die WiederherstellungFULL
Sicherung durch genommenAPPSURE
an der Linie 5WITH NORECOVERY
, sollten Sie in der Lage sein , Ihre wiederherstellenDIFFERENTIAL
Backup in Zeile 6 ohne Probleme genommen.Ich glaube, Ihre eigentliche Frage lautet:
Es könnte sein , anspruchsvollere Möglichkeiten , dies zu bestimmen, aber vielleicht eine einfache Abfrage für nicht-copyonly Backups zu überprüfen auf einem Ort gespeichert werden Sie nicht erwartet haben würde genügen.
Aus Ihrem Screenshot geht hervor, dass Ihre normalen Backups unter gespeichert werden
E:\SQLBackups
. Es kann ausreichend sein, eine einfache Abfrage auszuführen, um zu überprüfen, obFULL
nicht kopierfähige Sicherungen an einem anderen Ort gespeichert sind.quelle
AppAssure
Backups bis zu einem bestimmten Ort und das Treffen mit dem IT-Team verliefen wie folgtthey can provide us only the mdf and ldf files which is attachable
: Daher können wir es nicht im NORECOVERY-Modus für weitere LOG-Wiederherstellungen verwenden. Vielen Dank für die Idee im Skript, dies zu überprüfen und mich zu benachrichtigen, wenn dies passiert.