Grundlegendes zur Funktionsweise der Wiederherstellung von Sicherungen in SQL Server

 Dieses Thema ist für alle SQL Server-Datenbanken relevant.

Dateiwiederherstellung ist der Vorgang des Kopierens von Daten aus einer Sicherung und des Anwendens protokollierter Transaktionen auf die Daten, um ein Rollforward zum Zielwiederherstellungspunkt auszuführen. Eine Datensicherung oder eine differenzielle Sicherung enthält genügend Transaktionsprotokoll-Datensätze, um ein Rollforward der aktiven Transaktionen im Rahmen der Wiederherstellung jeder Sicherung ermöglichen. Jede Sicherung enthält außerdem genügend Protokolldaten, um ein Rollback für Transaktionen auszuführen, für die noch kein Commit ausgeführt wurde, und so die Datenbank in einen bezüglich der Transaktionen konsistenten, verwendbaren Status zu bringen. Der Prozess, bei dem ggf. für Transaktionen, für die kein Commit ausgeführt wurde, ein Rollforward ausgeführt wird und die Datenbank online geschaltet wird, wird als Wiederherstellung bezeichnet.

Rollforwardgruppe

Der Vorgang, bei dem protokollierte Änderungen auf Daten in einer Datenbank angewendet und die Daten bezüglich des Zeitpunkts aktualisiert werden, wird als Rollforward bezeichnet. Die Gruppe aller wiederhergestellten Daten wird als Rollforwardgruppe bezeichnet. Eine Rollforwardgruppe wird definiert durch das Wiederherstellen einer oder mehrerer Datensicherungen (Datenbanksicherung, Teilsicherung oder eine Reihe von Dateisicherungen). Wenn eine RESTORE-Anweisung Dateigruppen, Dateien oder Seiten angibt, werden nur diese Elemente in die Rollforwardgruppe aufgenommen. Andernfalls werden alle Dateien in der wiederhergestellten Sicherung in die Rollforwardgruppe aufgenommen. Wenn die vollständige Sicherung Protokolldatensätze enthält, wird für die wiederhergestellten Daten mithilfe dieses Protokolls ein Rollforward ausgeführt.

HinweisHinweis

Wenn Sie während der Wiederherstellung eine Dateigruppe angeben, umfasst die Wiederherstellung die gesamte Dateigruppe, wie sie zurzeit vorhanden ist, einschließlich aller Dateien, die der Dateigruppe seit der letzten Sicherung hinzugefügt wurden. Weitere Informationen finden Sie unter Steuern des Erstellens von hinzugefügten Dateien während eines Rollforwards.

Bei der Wiederherstellung einer differenziellen Sicherung kann es zum Überschreiben von Seiten in der Rollforwardgruppe mit Daten aus der differenziellen Sicherung kommen, wenn der Datenbank seit der differenziellen Basis Dateien hinzugefügt wurden. Weitere Informationen finden Sie unter Verwenden von differenziellen Sicherungen.

Beim Wiederherstellen einer differenziellen Sicherung wird eine Seite nur dann aktualisiert, wenn sich die Seite in der Rollforwardgruppe befindet, die Seite in der Sicherung enthalten ist und die RESTORE-Anweisung entweder die Seite bzw. ihre Datei oder gar keine Dateien oder Seiten auflistet.

Unter dem vollständigen und dem massenprotokollierten Wiederherstellungsmodell muss das Protokoll separat gesichert werden. Nach dem Wiederherstellen von Datensicherungen und (optional) differenziellen Sicherungen stellen Sie normalerweise die nachfolgenden Protokollsicherungen wieder her, um den Status der Datenbank unmittelbar vor dem Ausfall wiederherzustellen. Beim Wiederherstellen einer Protokollsicherung wird ein Rollforward für alle Seiten in der Rollforwardgruppe ausgeführt. Weitere Informationen zu Protokollsicherungen finden Sie unter Verwenden von Transaktionsprotokollsicherungen.

Wiederherstellungssequenzen

Jedes Wiederherstellungsszenario wird mithilfe eines Wiederherstellungsvorgangs bzw. mehrerer Wiederherstellungsvorgänge, einer sogenannten Wiederherstellungssequenz, implementiert. Jeder Wiederherstellungsvorgang entspricht einer bestimmten Transact-SQL-RESTORE-Anweisung. In einer Wiederherstellungssequenz durchlaufen betroffene Daten eine oder mehrere der Phasen der Wiederherstellung.

Weitere Informationen zu Transact-SQL-Wiederherstellungssequenzen und zu deren Erstellung finden Sie unter Verwenden von Wiederherstellungssequenzen für SQL Server-Datenbanken.

Phasen der Wiederherstellung

Eine Wiederherstellung ist ein aus mehreren Phasen bestehender Prozess. Zu den möglichen Phasen einer Wiederherstellung gehören die Datenkopierphase, die Rollforwardphase (Wiederholen) und die Rollbackphase (Rückgängigmachen).

  • Die Datenkopierphase umfasst das Kopieren aller Daten-, Protokoll- und Indexseiten aus den Sicherungsmedien einer Datenbank in die Datenbankdateien.

  • In der Rollforwardphase werden die protokollierten Transaktionen auf die aus der Sicherung kopierten Daten angewendet, um ein Rollforward für diese Daten zum Wiederherstellungspunkt auszuführen. An diesem Punkt weist eine Datenbank normalerweise Transaktionen auf, für die kein Commit ausgeführt wurde, und befindet sich in einem nicht verwendbaren Status. In diesem Fall ist eine Rollbackphase als Teil der Wiederherstellung der Datenbank erforderlich.

  • Die Rollbackphase (der erste Teil der Wiederherstellung) führt ein Rollback für alle Transaktionen aus, für die kein Commit ausgeführt wurde, und macht die Datenbank für Benutzer verfügbar. Nach der Rollbackphase können keine nachfolgenden Sicherungen wiederhergestellt werden.

Im restlichen Teil dieses Abschnitts wird näher auf diese Phasen eingegangen.

Datenkopierphase

Die erste Phase in jedem Wiederherstellungsvorgang ist die Datenkopierphase. Die Datenkopierphase initialisiert den Inhalt der wiederhergestellten Datenbank, Dateien oder Seiten. Diese Phase wird durch Datenbankwiederherstellungs-, Dateiwiederherstellungs- und Seitenwiederherstellungsvorgänge mithilfe vollständiger oder differenzieller Sicherungen ausgeführt.

Die Datenkopierphase umfasst das Kopieren aller Daten aus einer oder mehreren vollständigen Sicherungen und optional aus differenziellen Sicherungen und anschließend das Zurücksetzen der Inhalte der betroffenen Datenbank, Dateien oder Seiten auf den Zeitpunkt, zu dem sie durch diese Sicherungen erfasst wurden.

Die älteste Datei oder Seite in der Rollforwardgruppe bestimmt den Ausgangspunkt für die nächste Phase: Wiederholen (Rollforward)

Rollforwardphase

Rollforward (Wiederholung) ist der Prozess des Wiederholens protokollierter Änderungen an den Daten in der Rollforwardgruppe, um die Daten zu aktualisieren. Zum Ausführen eines Rollforwards verarbeitet das SQL Server Database Engine (Datenbankmodul) Protokollsicherungen, wie sie wiederhergestellt werden, beginnend mit dem in Datensicherungen enthaltenen Protokoll.

Die Wiederherstellung vermeidet unnötige Rollforwards. Wenn Daten beim Sichern schreibgeschützt waren und der Schreibschutz erhalten geblieben ist, ist ein Rollforward im Allgemeinen nicht erforderlich und wird ausgelassen.

Wiederherstellungspunkt

Das Ziel des Rollforwards ist das Wiederherstellen des ursprünglichen Zustands der Daten am Wiederherstellungspunkt. Der Wiederherstellungspunkt ist der vom Benutzer angegebene Punkt, bis zu dem die Daten wiederhergestellt werden sollen. Unter dem vollständigen Wiederherstellungsmodell können Sie den Wiederherstellungspunkt als bestimmten Zeitpunkt, als markierte Transaktion oder als Protokollfolgenummer angeben. Unter dem massenprotokollierten Wiederherstellungsmodell können Sie einen bestimmten Zeitpunkt nur wiederherstellen, wenn keine Massenvorgänge seit der vorherigen Protokollsicherung ausgeführt wurden.

Rollforwardkonsistenz

In der Rollforwardphase wird für die Daten immer ein Rollforward bis zu einem Punkt ausgeführt, der konsistent mit dem Status der Datenbank am Wiederherstellungspunkt ist (Rollforwardkonsistenz). Für alle Daten wird ein Rollforward bis zu einem Punkt ausgeführt, an dem der Vorgang rückgängig gemacht werden kann.

Der Status der Datenbank wird wie folgt durch die primäre Datei definiert:

  • Wenn die primäre Datei wiederhergestellt wird, bestimmt der Wiederherstellungspunkt den Status der gesamten Datenbank. Wenn eine Datenbank z. B. bis zu einem Zeitpunkt, kurz bevor eine Tabelle versehentlich gelöscht wurde, wiederhergestellt wird, muss die gesamte Datenbank bis zu demselben Zeitpunkt wiederhergestellt werden.

  • Wenn die primäre Datei nicht wiederhergestellt wird, ist der Datenbankstatus bekannt, und für die wiederhergestellten Daten wird ein Rollforward zu einem mit der Datenbank transaktionell konsistenten Wiederherstellungspunkt ausgeführt. Dies wird von SQL Server erzwungen.

Die Datenbank kann jedoch Änderungen enthalten, die von Transaktionen vorgenommen wurden, für die am Wiederherstellungspunkt noch kein Commit ausgeführt wurde. Für die Onlinewiederherstellung werden Daten bis zu einem Zeitpunkt wiederhergestellt, der mit dem aktuellen Status des Onlineteils der Datenbank konsistent ist.

Eine differenzielle Sicherung springt vorwärts zu dem Zeitpunkt, zu dem die differenzielle Sicherung erstellt wurde. Seiten in der Rollforwardgruppe werden mit aktuelleren Seiten aus der differenziellen Sicherung überschrieben.

Rollbackphase und Wiederherstellung

Wenn die Rollforwardphase das Rollforward der Protokolltransaktionen abschließt, enthält die Datenbank normalerweise Änderungen, die von Transaktionen vorgenommen wurden, für die am Wiederherstellungspunkt kein Commit ausgeführt wurde. Dadurch werden die Daten, für die das Rollback ausgeführt wurde, in Bezug auf Transaktionen inkonsistent. Der Wiederherstellungsprozess öffnet dann das Transaktionsprotokoll, um Transaktionen zu identifizieren, für die kein Commit ausgeführt wurde. Transaktionen, für die kein Commit ausgeführt wurde, werden rückgängig gemacht, indem ein Rollback ausgeführt wird, es sei denn, sie weisen Sperren auf, die verhindern, dass andere Transaktionen die transaktionell inkonsistenten Daten sehen können. Dieser Schritt wird als Rollbackphase bezeichnet. Wenn die Daten zu Beginn des Wiederherstellungsprozesses in Bezug auf Transaktionen bereits konsistent sind, wird die Rollbackphase ausgelassen. Sobald die Datenbank transaktionell konsistent ist, wird sie vom Wiederherstellungsprozess online geschaltet.

Wenn eine oder mehrere Sicherungen wiederhergestellt worden sind, umfasst die Wiederherstellung normalerweise sowohl die Rollforward- als auch die Rollbackphase. Jede vollständige und differenzielle Sicherung enthält genügend Transaktionsprotokoll-Datensätze, um die Daten der entsprechenden Sicherung in einem in sich konsistenten Status wiederherstellen zu können.

HinweisHinweis

Während der Wiederherstellung nach einem Systemabsturz oder nach einem Datenbankspiegelungs-Failover haben Benutzer in SQL Server 2005 Enterprise Edition und höheren Versionen während der Rollbackphase Zugriff auf die Datenbank. Dies wird als schnelle Wiederherstellung bezeichnet. Dies ist möglich, weil die Transaktionen, für die zum Zeitpunkt des Systemabsturzes noch kein Commit ausgeführt wurde, alle Sperren erneut abrufen, die sie vor dem Systemabsturz aufrechterhalten haben. Während für diese Transaktionen Rollbacks ausgeführt werden, schützen ihre Sperren sie vor Störungen durch Benutzer.

Beziehung zwischen den Optionen RECOVERY und NORECOVERY und den Wiederherstellungsphasen

Eine spezifische RESTORE-Anweisung endet entweder nach der Rollforwardphase oder wird während der Rollbackphase fortgesetzt, abhängig davon, ob die Anweisung WITH NORECOVERY enthält:

  • WITH RECOVERY schließt die Rollforward- und Rollbackphasen ein und stellt die Datenbank wieder her. Zusätzliche Sicherungen können nicht wiederhergestellt werden. Dies ist die Standardeinstellung.

    Falls für die Rollforwardgruppe das Rollforward nicht weit genug ausgeführt wurde, damit die Daten mit der Datenbank konsistent sind, kann die Rollbackphase nicht ausgeführt werden. Database Engine (Datenbankmodul) zeigt eine Fehlermeldung an, und die Wiederherstellung wird beendet.

    Falls die gesamte Rollforwardgruppe mit der Datenbank konsistent ist, wird die Wiederherstellung ausgeführt, und die Datenbank kann online geschaltet werden.

  • Mit WITH NORECOVERY wird die Rollbackphase ausgelassen, damit Transaktionen, für die kein Commit ausgeführt wurde, erhalten bleiben. Das Auslassen der Rollbackphase ermöglicht, weitere Sicherungen wiederherzustellen, um das Rollforward der Datenbank bis zu einem späteren Zeitpunkt fortzusetzen. Gelegentlich wird mit RESTORE WITH NORECOVERY ein Rollforward für Daten bis zu einem Punkt ausgeführt, an dem sie mit der Datenbank konsistent sind. In diesen Fällen gibt das Database Engine (Datenbankmodul) eine Informationsmeldung aus, dass die Rollforwardgruppe nun mithilfe der Option RECOVERY wiederhergestellt werden kann.

    Informationen zu Rollforwardgruppen finden Sie unter Grundlegendes zur Funktionsweise der Wiederherstellung von Sicherungen in SQL Server.

HinweisHinweis

Eine dritte Alternative, WITH STANDBY, geht über den Rahmen dieses Themas hinaus.

Eine ausführliche Beschreibung dieser Optionen von RESTORE finden Sie unter RESTORE (Transact-SQL).

Wiederherstellungspfade

Ein Wiederherstellungspfad ist ein eindeutiger Satz von Transformationen, die die Datenbank im Verlauf der Zeit weiterentwickelt haben, ohne ihre Konsistenz zu beeinträchtigen. Informationen zu Wiederherstellungspfaden und dem damit verbundenen Konzept der Wiederherstellungsverzweigungen finden Sie unter Wiederherstellungspfade.