it-swarm.com.de

Werden während einer Protokollsicherung die Daten bis zum Beginn oder Ende des Vorgangs gesichert?

Angenommen, ich führe eine Protokollsicherung durch, und diese Protokollsicherung dauert 10 Minuten. Während dieses 10-Minuten-Fensters werden weitere Transaktionen ausgeführt. Welche Transaktionen enthält die Protokollsicherung im folgenden Beispiel tatsächlich?

  1. Transaktion A wird festgeschrieben
  2. Transaktion B wird geöffnet
  3. Die Protokollsicherung beginnt
  4. Transaktion C wird geöffnet
  5. Transaktion B wird festgeschrieben
  6. Die Protokollsicherung ist abgeschlossen
  7. Transaktion C wird festgeschrieben
12
George.Palacios

Die Protokollsicherungsdatei muss alle Transaktionen (einschließlich der noch nicht festgeschriebenen) bis zum Ende der Sicherung enthalten. Sie können dies wie folgt überprüfen:

CREATE DATABASE MyDB;
ALTER DATABASE MyDB SET RECOVERY FULL;

USE MyDB;
CREATE TABLE LogTest (numbers int);

Nachdem Sie die Datenbank und die Tabelle erstellt haben, die für den Test verwendet werden sollen, erstellen Sie die erste vollständige Sicherung, damit später eine Protokollsicherung durchgeführt werden kann.

BACKUP DATABASE MyDB 
TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL14.SQL2017\MSSQL\Backup\MyDB_FULL.bak';

Nachdem eine vollständige Sicherung durchgeführt wurde, fügen wir einige Daten in die Tabelle ein:

USE MyDB;

INSERT INTO LogTest(numbers) VALUES (1);

BEGIN TRAN
INSERT INTO LogTest(numbers) VALUES (2);

Beachten Sie, dass sich die zweite Einfügung unter einem BEGIN TRAN Befindet, der noch nicht festgeschrieben wurde. Als Nächstes verwenden wir die Funktion [fn_dblog, um den Inhalt der Protokolldatei zu überprüfen, bevor eine Protokollsicherung durchgeführt wird.

SELECT [Current LSN], [Operation], [SPID], [Transaction Name], [Begin Time], [End Time] FROM fn_dblog(NULL, NULL);

Auf dem Bild sehen wir LSNs, die sich auf das erste und zweite INSERT beziehen

(First Query result

BACKUP LOG MyDB 
TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL14.SQL2017\MSSQL\Backup\MyDB_LOG.trn';

Es wurde eine Protokollsicherung durchgeführt, deren Inhalt mit der Funktion fn_dump_dblog mithilfe der folgenden Abfrage gelesen werden kann:

SELECT [Current LSN], [Transaction ID], [Transaction Name], [Operation], [Begin Time] 
FROM fn_dump_dblog (NULL, NULL, N'DISK', 1, N'C:\Program Files\Microsoft SQL Server\MSSQL14.SQL2017\MSSQL\Backup\MyDB_LOG.trn',
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT);

(Second Query result

Wie wir sehen können, befinden sich die LSNs, die sich auf die nicht abgeschlossene Transaktion beziehen , tatsächlich in der Transaktionsprotokollsicherung, obwohl sie nicht festgeschrieben wurden. Der Haken ist, dass als Microsoft sagt

Das Transaktionsprotokoll ist eine wichtige Komponente der Datenbank. Wenn ein Systemfehler auftritt, benötigen Sie dieses Protokoll, um Ihre Datenbank wieder in einen konsistenten Zustand zu versetzen.

Daher werden nach einer Wiederherstellung dieser Protokollsicherung die Daten für diese nicht abgeschlossenen Transaktionen zurückgesetzt, um die Datenbank in einem konsistenten Zustand zu halten. Sie können alle Transaktionen, die festgeschrieben wurden, als sicher betrachten (wiederhergestellt werden können). Sie kann überprüft werden, indem Sie die Datenbank MyDB löschen und die Sicherungen wiederherstellen, die mit den obigen Schritten erstellt wurden.

12
Ronaldo

Das Transaktionsprotokoll enthält alle Transaktionen, die zum Zeitpunkt des Abschlusses des Transaktionsprotokolls vollständig festgeschrieben waren.

Um das obige Beispiel zu verwenden, enthält das Transaktionsprotokoll A und B. Dies ähnelt der vollständigen Sicherung, die eine Endprotokollsicherung aller Transaktionen enthält, die nach Abschluss der Sicherung festgeschrieben wurden.

Diese Seite ist eine ausgezeichnete weitere Lektüre. https://sqlbak.com/academy/transaction-log-backup

6
Jonathan Fite