Wiederherstellungspfade

Sie müssen das Konzept des Wiederherstellungspfads verstehen, wenn Sie differenzielle Sicherungen oder Protokollsicherungen verwenden und eine Datenbank mithilfe einer der folgenden Methoden bis zu einem früheren Zeitpunkt wiederherstellen:

  • Ausführen einer Wiederherstellung bis zu einem bestimmten Zeitpunkt

  • Ausführen einer Wiederherstellung, ohne vorher alle Protokollsicherungen oder die aktuellsten differenziellen Sicherungen wiederherzustellen.

Wenn Sie eine Datenbank zu einem früheren Wiederherstellungspunkt wiederherstellen und die Datenbank ab diesem Punkt verwenden, wird ein neuer Wiederherstellungspfad erstellt. Der Wiederherstellungspfad ist die Abfolge von Daten und Protokollsicherungen, mit der eine Datenbank zu einem bestimmten Zeitpunkt wiederhergestellt wurde, entweder durch normale Datenbankverwendung oder durch die Wiederherstellung bestimmter Daten und Protokolle. Ein Wiederherstellungspfad besteht aus einer eindeutigen Menge bestimmter Transformationen, auf deren Grundlage die Datenbank über einen bestimmten Zeitraum entwickelt und gleichzeitig die Konsistenz der Datenbank sichergestellt wurde. In der folgenden Abbildung wird die Beziehung zwischen einem Wiederherstellungspunkt und den resultierenden Wiederherstellungspfaden veranschaulicht.

Wiederherstellungspunkt und resultierende Wiederherstellungspfade

In den folgenden Situationen wird ein neuer Wiederherstellungspfad erstellt, da die Datenbank nicht bis zum "Endzeitpunkt" wiederhergestellt wurde. Anschließend sind Sicherungen vorhanden, mit denen die Datenbank in zwei oder mehr Wiederherstellungspfaden ausgeführt werden kann, die alle denselben LSN-Bereich verwenden.

  • Wiederherstellen einer vollständigen Datenbanksicherung und Wiederherstellen der Datenbank ohne eine andere Art der Sicherung.

  • Wiederherstellen der Datenbank am Ende einer anderen als der letzten differenziellen Sicherung.

  • Wiederherstellen einer vollständigen sowie einer differenziellen Datenbanksicherung und Wiederherstellen der Datenbank ohne Anwenden vorhandener Transaktionsprotokollsicherungen.

  • Wiederherstellen der Datenbank am Ende einer anderen als der letzten Transaktionsprotokollsicherung.

  • Wiederherstellen der Datenbank zu einem bestimmten Zeitpunkt oder zu einer markierten Transaktion innerhalb einer Transaktionsprotokollsicherung.

Im Allgemeinen wird mit einem Wiederherstellungspunkt ein neuer Wiederherstellungspfad gestartet, wenn aufgrund des Wiederherstellungspunkts ein Rollback für Transaktionen ausgeführt werden muss. Die Protokollfolgenummern (Log Sequence Number, LSN) von bereits vorhandenen Sicherungen sind gegebenenfalls größer als die LSN des Wiederherstellungspunkts. Die LSNs dieser Sicherungen sind in einer Wiederherstellungsverzweigung enthalten, die nicht mit der vom aktuellen Wiederherstellungsvorgang erstellten Verzweigung übereinstimmt.

Bewährte Methode Sie sollten nach dem Wiederherstellen der Datenbank schnellstmöglich eine vollständige Datensicherung ausführen, um die Erstellung eines neuen Wiederherstellungspfads mit mehreren Wiederherstellungsverzweigungen zu vermeiden. Mit dieser Vorgehensweise können Sie sicherstellen, dass alle Sicherungen in einer einzelnen Wiederherstellungsverzweigung ausgeführt werden. Dies können Sie in der last_recovery_fork_guid-Spalte der backupset-Tabelle oder im RESTORE HEADERONLY-Resultset überprüfen, nachdem Sie die Daten gesichert haben.

Beispiel für einen Wiederherstellungspfad

Wie in der folgenden Abbildung gezeigt, bilden alle Sicherungen einer Datenbank anfangs einen einzelnen Wiederherstellungspfad. In dieser Abbildung enthält der Wiederherstellungspfad eine Datenbanksicherung, die zum Zeitpunkt t1 erstellt wurde, sowie drei Protokollsicherungen, die zum Zeitpunkt t2, t3 und t4 erstellt wurden.

Ursprünglicher Wiederherstellungspfad

Die folgende Abbildung zeigt eine Wiederherstellungsverzweigung, die aus der Wiederherstellung einer älteren Version der Datenbank (d. h. der Datenbank eines früheren Zeitpunkts) resultiert. Durch ein Problem mit der Sicherung t4 muss der Datenbankadministrator die Datenbank am Ende der Protokollsicherung t3 wiederherstellen. Diese Wiederherstellung verursacht einen Wiederherstellungs-Verzweigungspunkt. Zum Zeitpunkt t5 erstellt eine neue Protokollsicherung eine neue Wiederherstellungsverzweigung, Wiederherstellungsverzweigung 2.

Erstellung einer zweiten Wiederherstellungsverzweigung

HinweisHinweis

Die Protokollsicherung t5 enthält Metadaten der Wiederherstellungsverzweigung, die diese Sicherung mit der Protokollsicherung t3 bei Wiederherstellungsverzweigung 1 verbindet. Informationen zu den Metadaten der Wiederherstellungsverzweigung finden Sie unter "Verwalten von Wiederherstellungsverzweigungen" weiter unten in diesem Thema.

Das in der vorhergehenden Abbildung gezeigte Beispiel erstellt einen neuen Wiederherstellungspfad, der in der folgenden Abbildung dargestellt ist. Der neue Wiederherstellungspfad enthält einige der Sicherungen von Wiederherstellungsverzweigung 1 (t1 bis t3) sowie alle Protokollsicherungen von Wiederherstellungsverzweigung 2 (t5 bis t9). Aus der Perspektive dieses Wiederherstellungspfads ist Protokollsicherung t4 veraltet.

Neuer Wiederherstellungspfad

Nach einer Zeitpunktwiederherstellung führt die nächste Sicherung immer zu einer Wiederherstellungsverzweigung. In der folgenden Illustration wird durch die t4-Protokollsicherung zwischendurch eine Zeitpunktwiederherstellung ausgeführt. Eine Wiederherstellung der Datenbank zu diesem Zeitpunkt hat eine Wiederherstellungsverzweigung zur Folge. Anschließend wird eine Protokollsicherung für die wiederhergestellte Datenbank zum Zeitpunkt t5 erstellt. Dabei werden die Wiederherstellungsverzweigung 2 und ein neuer Wiederherstellungspfad erzeugt. In der ersten Protokollsicherung auf der neuen Verzweigung t5 ist dieselbe erste LSN enthalten wie in der Protokollsicherung t3. Protokollsicherung t3 wird ersetzt. Deshalb sind die Sicherungen t3 und t4 auf dem neuen Wiederherstellungspfad veraltet.

Neuer Wiederherstellungspfad nach einer Zeitpunktwiederherstellung

Die Wiederherstellungssequenz zum Wiederherstellen von Sicherungen auf diesem neuen Wiederherstellungspfad ist: t1, t2 und t5. Da künftige Sicherungen auf Wiederherstellungsverzweigung 2 erfolgen, werden diese in den neuen Wiederherstellungspfad aufgenommen.

So stellen Sie einen alten Pfad wieder her und führen auf dem Pfad einen Rollforward aus

Wenn mehrere Wiederherstellungspfade vorhanden sind, wird der neueste Pfad bevorzugt zur Wiederherstellung der Datenbank verwendet. Es wird empfohlen, die Verwendung eines alten Wiederherstellungspfads zu vermeiden. Bei Bedarf können Sie jedoch einen Rollforward auf einem alten Wiederherstellungspfad ausführen. Dazu müssen Sie die Sequenz der Sicherungen zurückverfolgen, die vor dem Erstellen des aktuellen Wiederherstellungspfads ausgeführt wurden. So können Sie auf spätere Zeitpunkte des alten Pfads zugreifen, indem Sie Sicherungen verwenden, die vor einer Wiederherstellung zu einem bestimmten Zeitpunkt ausgeführt wurden.

Ausgehend von den in der vorherigen Abbildung erstellten Sicherungen ist beispielsweise nach der Erstellung der Protokollsicherung t5 immer noch eine Wiederherstellung von der vollständigen Datenbanksicherung, die zum Zeitpunkt t1 erstellt wurde, bis zum Ende der Protokollsicherung t4 möglich. Diese Protokollsicherung befindet sich auf dem alten Wiederherstellungspfad.

So führen Sie eine Wiederherstellung und einen Rollforward von einem alten auf einen neuen Pfad aus

Mit SQL Server Database Engine (Datenbankmodul) wird verhindert, dass in einer Wiederherstellungssequenz Sicherungen verwendet werden, die nicht zusammenpassen, also einen Rollforward auf verschiedenen Wiederherstellungspfaden ausführen. Durch diese Einschränkung wird die Konsistenz der Datenbank auch nach dem Wiederherstellen sichergestellt.

Um eine Wiederherstellung und einen Rollforward für einen neuen Wiederherstellungspfad auszuführen, müssen Sie für die Sicherungen vor dem Wiederherstellungspunkt und für die Sicherungen nach dem Wiederherstellungspunkt unterschiedliche Wiederherstellungssequenzen erstellen.

  1. Stellen Sie die Sicherungen wieder her, die vor der Wiederherstellung und der Erstellung des neuen Wiederherstellungspfads ausgeführt wurden. Schließen Sie die Sicherung mit dem Wiederherstellungspunkt aus.

  2. Führen Sie auf dem neuen Wiederherstellungspfad einen Rollforward aus, indem Sie die seit Erstellen des Wiederherstellungspfads ausgeführten Sicherungen wiederherstellen.

Verwalten von Wiederherstellungsverzweigungen

Eine Wiederherstellungsverzweigung umfasst einen Bereich von LSNs, die gemeinsam dieselbe GUID nutzen. Ein Wiederherstellungspfad stellt einen Bereich von LSNs dar, der von einem Startpunkt (LSN,GUID) zu einem Endpunkt (LSN,GUID) führt. Der Bereich von LSNs in einem Wiederherstellungspfad kann eine oder mehrere Wiederherstellungsverzweigungen von Anfang bis zum Ende durchsuchen. Eine neue Wiederherstellungsverzweigung entsteht immer dann, wenn eine Datenbank erstellt wird und mit RESTORE WITH RECOVERY eine Wiederherstellungsverzweigung generiert wird.

An einem Wiederherstellungs-Verzweigungspunkt (LSN,GUID) wird beim Ausführen von RESTORE WITH RECOVERY eine neue Wiederherstellungsverzweigung erstellt. Jeder Wiederherstellungs-Verzweigungspunkt legt für seine Wiederherstellungsverzweigungen eine Parent-Child-Beziehung fest.

Beim Wiederherstellen der Datenbank wird der Status der gesamten Datenbank, einschließlich der nächsten LSN, auf den Wiederherstellungspunkt festgelegt. LSNs werden dann beginnend ab fork_point_lsn wiederverwendet. Daher müssen Sicherungen beim Erstellen einer Wiederherstellungssequenz sowohl durch eine Wiederherstellungsverzweigung als auch durch die LSN verknüpft werden, weil dieselbe LSN auch in mehreren Verzweigungen vorkommen kann. In der folgenden Abbildung wird die Wiederverwendung von LSNs veranschaulicht. Dabei wird die Wiederverwendung von LSNs in verschiedenen Wiederherstellungsverzweigungen veranschaulicht. Die grünen Felder in der Abbildung stehen für zwei Sicherungen, die die gleiche LSN verwenden.

Wiederverwendung von LSNs in verschiedenen Wiederherstellungs-Verzweigungspunkten

Wenn eine Wiederherstellungssequenz Sicherungen zum Durchsuchen einer Wiederherstellungsverzweigung enthält, muss beim Erstellen der Wiederherstellungssequenz sichergestellt werden, dass die verwendeten Sicherungen dem richtigen Wiederherstellungspfad bis zum Wiederherstellungspunkt folgen. Zu diesem Zweck enthalten Sicherungen einen ersten GUID für die Wiederherstellungsverzweigung und einen letzten GUID für die Wiederherstellungsverzweigung.

Diese GUIDs werden zusammen mit anderen Metadaten, die für die Nachverfolgung von Wiederherstellungspfaden wichtig sind, in der backupset-Verlaufstabelle gespeichert. Sie werden auch von der RESTORE HEADERONLY-Anweisung zurückgegeben. In der folgenden Tabelle sind die Metadatenwerte zusammengefasst, die für die Erstellung von Wiederherstellungssequenzen relevant sind, die eine Wiederherstellungsverzweigung passieren. Beachten Sie, dass sich die Spaltennamen für diese Werte von denen für die Verlaufstabelle und das Resultset der RESTORE HEADERONLY-Anweisung unterscheiden:

LSN

Beschreibung

Name der Sicherungssatzspalte

RESTORE HEADERONLY-Spaltenname

GUID für die erste Wiederherstellungsverzweigung

ID für den ersten Wiederherstellungs-Verzweigungspunkt.

first_recovery_fork_guid

FirstRecoveryForkID

GUID für die letzte Wiederherstellungsverzweigung

ID für den letzten Wiederherstellungs-Verzweigungspunkt.

last_recovery_fork_guid

RecoveryForkID

Erste LSN

Protokollfolgenummer des ersten oder ältesten Protokolldatensatzes im Sicherungssatz.

first_lsn

FirstLSN

Erste LSN

Protokollfolgenummer des nächsten Protokolldatensatzes nach dem Sicherungssatz.

last_lsn

LastLSN

LSN für den Verzweigungspunkt

Die Sequenznummer eines Verzweigungspunkts wird protokolliert, wenn der GUID für den ersten Wiederherstellungspunkt ungleich (≠) dem GUID für den letzten Wiederherstellungspunkt ist. Andernfalls gibt es keinen Wiederherstellungs-Verzweigungspunkt in der Sicherung, und die LSN für den Verzweigungspunkt ist NULL.

fork_point_lsn

ForkPointLSN

GUID auf differenzieller Basis

Bei einer differenziellen Sicherung auf der Basis einer einzelnen Basissicherung entspricht dieser Wert dem eindeutigen Bezeichner der differenziellen Basis.

Bei einer differenziellen Sicherung auf der Basis mehrerer Basissicherungen ist der Wert NULL, und die Basis für die differenzielle Sicherung muss auf Dateiebene bestimmt werden. Weitere Informationen hierzu finden Sie unter backupfile (Transact-SQL).

Bei nicht differenzielle Sicherungstypen ist der Wert NULL.

differential_base_guid

DifferentialBaseGUID

Bei den restlichen Erläuterungen werden nur die Namen der Werte in der backupset-Verlaufstabelle verwendet.

  • Der GUID für die letzte Wiederherstellungsverzweigung und der GUID für die erste Wiederherstellungsverzweigung werden zum Verknüpfen der Sicherungen verwendet. So wird sichergestellt, dass die Sequenz der richtigen Verzweigung folgt. Bei jeder wiederherzustellenden Protokollsicherung der Sequenz muss die first_recovery_fork_guid mit der last_recovery_fork_guid der davorliegenden Sicherung in der Sequenz übereinstimmen.

    first_recovery_fork_guid = last_recovery_fork_guid

  • Daten und differenzielle Sicherungen müssen ebenfalls verknüpft sein.

    Wenn die Protokollsicherung neben der letzten LSN einer vollständigen oder einer differenziellen Datenbanksicherung auch einen Verzweigungspunkt enthält, ist der Verknüpfungstest von der Position der letzten LSN relativ zum Verzweigungspunkt abhängig.

    Zu den Verknüpfungstests gehören folgende Parameter (bei Verwendung der Werte von backupset):

    • Wenn last_lsn kleiner oder gleich fork_point_lsn ist, stimmt die last_recovery_fork_guid der Daten oder der differenziellen Sicherung mit der first_recovery_fork_guid der Protokollsicherung überein. In der folgenden Abbildung wird der Fall veranschaulicht, dass last_lsn kleiner ist als fork_point_lsn.

      last_lsn ist kleiner als fork_point_lsn

    • Wenn last_lsn größer als fork_point_lsn ist, stimmt die last_recovery_fork_guid der Daten oder der differenziellen Sicherung mit der last_recovery_fork_guid der Protokollsicherung überein. In der folgenden Abbildung wird der Fall veranschaulicht, bei dem last_lsn größer ist als fork_point_lsn.

      last_lsn ist größer als fork_point_lsn

  • Bei einer differenziellen Sicherung müssen Sie die differenzielle Basis mithilfe von backupset.differential_base_guid suchen.

    Wenn die differenzielle Sicherung mehrere Basen enthält, ist backupset.differential_base_guid gleich NULL. In diesem Fall müssen Sie mithilfe von backupfile.differential_base_guid nacheinander für alle differenziellen Basen die entsprechende Datei bestimmen.