Wiederherstellen bis zu einer markierten Transaktion

Dieses Thema ist nur für Datenbanken relevant, die markierte Transaktionen enthalten und von denen das vollständige oder massenprotokollierte Wiederherstellungsmodell verwendet wird.

Informationen zu den Anforderungen für das Wiederherstellen zu einem bestimmten Wiederherstellungspunkt finden Sie unter Wiederherstellen einer Datenbank bis zu einem Punkt in einer Sicherung.

In SQL Server wird das Einfügen benannter Markierungen in das Transaktionsprotokoll unterstützt, um die Wiederherstellung bis zu einer bestimmten Markierung zu ermöglichen. Protokollmarkierungen sind transaktionsspezifisch und werden nur eingefügt, wenn für die zugehörige Transaktion ein Commit ausgeführt wird. Demzufolge können Sie Markierungen mit bestimmten Daten verknüpfen und die Wiederherstellung bis zu einem bestimmten Punkt vornehmen, der diese Daten ein- oder ausschließt.

Beachten Sie Folgendes, bevor Sie benannte Markierungen in das Transaktionsprotokoll einfügen:

  • Transaktionsmarkierungen belegen Protokollspeicherplatz und sollten deshalb nur für Transaktionen verwendet werden, die eine wichtige Rolle bei der Wiederherstellungsstrategie für die Datenbank spielen.

  • Nachdem für eine markierte Transaktion ein Commit ausgeführt wurde, wird in die logmarkhistory-Tabelle in msdb eine Zeile eingefügt.

  • Wenn sich eine markierte Transaktion über mehrere Datenbanken auf demselben Datenbankserver oder auf verschiedenen Servern erstreckt, müssen die Markierungen in den Protokollen aller betroffenen Datenbanken aufgezeichnet werden. Weitere Informationen finden Sie unter Verwenden markierter Transaktionen (vollständiges Wiederherstellungsmodell).

HinweisHinweis

Weitere Informationen zum Markieren von Transaktionen finden Sie unter Verwenden markierter Transaktionen (vollständiges Wiederherstellungsmodell).

Transact-SQL-Syntax für das Einfügen benannter Markierungen in ein Transaktionsprotokoll

Verwenden Sie die BEGIN TRANSACTION-Anweisung und die WITH MARK [description]-Klausel, um Markierungen in die Transaktionsprotokolle einzufügen. Die Markierung erhält denselben Namen wie die Transaktion. Der optionale description-Parameter stellt eine Textbeschreibung der Markierung dar und nicht den Namen der Markierung. Beispielsweise lautet der Name der Transaktion und der Markierung, die in der folgenden BEGIN TRANSACTION-Anweisung erstellt werden, jeweils Tx1:

BEGIN TRANSACTION Tx1 WITH MARK 'not the mark name, just a description'  

Mit dem Transaktionsprotokoll werden der Markierungsname (Transaktionsname), die Beschreibung, die Datenbank, der Benutzer, datetime-Informationen und die Protokollfolgenummer (LSN, Log Sequence Number) aufgezeichnet. Die datetime-Informationen werden zusammen mit dem Markierungsnamen für die eindeutige Identifizierung der Markierung verwendet.

Informationen zum Einfügen einer Markierung in eine Transaktion, die mehrere Datenbanken umfasst, finden Sie unter Verwenden markierter Transaktionen (vollständiges Wiederherstellungsmodell).

Transact-SQL-Syntax für das Wiederherstellen bis zu einer Markierung

Wenn Sie das Ziel einer markierten Transaktion mithilfe einer RESTORE LOG-Anweisung festlegen, können Sie eine der folgenden Klauseln verwenden, um ein Anhalten bei oder unmittelbar vor der Markierung zu bewirken:

  • Verwenden Sie die WITH STOPATMARK = '<mark_name>'-Klausel, um anzugeben, dass die markierte Transaktion den Wiederherstellungspunkt darstellt.

    STOPATMARK führt ein Rollforward bis zur Markierung aus und schließt die markierte Transaktion in das Rollforward ein.

  • Verwenden Sie die WITH STOPBEFOREMARK = '<mark_name>'-Klausel, um anzugeben, dass der Protokolldatensatz unmittelbar vor der Markierung den Wiederherstellungspunkt darstellt.

    STOPBEFOREMARK führt ein Rollforward bis zur Markierung aus und schließt die markierte Transaktion aus dem Rollforward aus.

Die Optionen STOPATMARK und STOPBEFOREMARK unterstützen beide eine optionale AFTER datetime-Klausel. Wenn datetime verwendet wird, müssen die Markierungsnamen nicht eindeutig sein.

Wenn AFTER datetime nicht angegeben ist, wird der Rollforward bei der ersten Markierung mit dem angegebenen Namen beendet. Wenn AFTER datetime angegeben ist, wird der Rollforward bei der ersten Markierung beendet, die den angegebenen Namen genau um oder nach datetime aufweist.

HinweisHinweis

Wie bei jedem Wiederherstellungsvorgang bis zu einem bestimmten Zeitpunkt ist das Wiederherstellen bis zu einer Markierung nicht zulässig in Zeiten, in denen für die Datenbank massenprotokollierte Vorgänge ausgeführt werden.

So führen Sie eine Wiederherstellung bis zu einer markierten Transaktion aus

Vorgehensweise: Wiederherstellen einer Datenbank bis zu einer markierten Transaktion (SQL Server Management Studio)

RESTORE (Transact-SQL)

Vorbereiten der Protokollsicherungen

Die folgende Sicherungsstrategie für diese verbundenen Datenbanken wäre in diesem Beispiel angemessen:

  1. Verwenden Sie für beide Datenbanken das vollständige Wiederherstellungsmodell.

  2. Erstellen Sie eine vollständige Sicherung jeder einzelnen Datenbank.

    Die Datenbanken können nacheinander oder gleichzeitig gesichert werden.

  3. Markieren Sie vor dem Sichern des Transaktionsprotokolls eine Transaktion, die in allen Datenbanken ausgeführt wird. Weitere Informationen zum Erstellen markierter Transaktionen finden Sie unter Verwenden markierter Transaktionen (vollständiges Wiederherstellungsmodell).

  4. Sichern Sie das Transaktionsprotokoll für jede Datenbank.

Wiederherstellen der Datenbank bis zu einer markierten Transaktion

So stellen Sie die Sicherung wieder her

  1. Erstellen Sie nach Möglichkeit Sicherungen des Protokollfragments der unbeschädigten Datenbanken.

  2. Stellen Sie die letzte vollständige Datenbanksicherung jeder Datenbank wieder her.

  3. Identifizieren Sie die letzte verfügbare markierte Transaktion in allen Transaktionsprotokollsicherungen. Diese Informationen werden in der logmarkhistory-Tabelle in der msdb-Datenbank auf dem entsprechenden Server gespeichert.

  4. Identifizieren Sie die Protokollsicherungen für alle verbundenen Datenbanken, die diese Markierung enthalten.

  5. Stellen Sie jede Protokollsicherung bis zur markierten Transaktion wieder her.

  6. Stellen Sie jede Datenbank wieder her.