Bewährte Methoden zum Wiederherstellen einer Datenbank bis zu einem bestimmten Wiederherstellungspunkt
Dieses Thema ist nur für Datenbanken relevant, die das vollständige oder massenprotokollierte Wiederherstellungsmodell verwenden.
Dieses Thema stellt einige bewährte Methoden zum Wiederherstellen von Datenbanken bis zu einem bestimmten Wiederherstellungspunkt vor.
Verwenden von STANDBY zum Finden eines unbekannten Zeitpunktes
Es kann vorkommen, dass Sie eine Datenbank bis zu einem bestimmten Wiederherstellungspunkt wiederherstellen möchten, aber Sie kennen weder die Zielzeit, die Protokollfolgenummer (LSN, Log Sequence Number) noch, falls vorhanden, die markierte Transaktion. Eine der Lösungen besteht darin, für die primäre Datendatei und optional auch für weitere Datendateien inkrementelle Rollforwards auszuführen, indem Sie WITH STANDBY **=**standby_file_name anstatt WITH RECOVERY angeben. Mit der Option STANDBY wird die Datenbank für den schreibgeschützten Zugriff wiederhergestellt. Dies ermöglicht, die Datenbank zu lesen und nach der gewünschten Zeitpunktinformation für die Wiederherstellung zu suchen. Die Standbydatei ermöglicht, die Auswirkungen des Wiederherstellungsprozesses wieder rückgängig zu machen, falls das Rollforward über den Zielzeitpunkt hinausgeht. Falls die Datenbank den gewünschten Zielzeitpunkt noch nicht erreicht hat, können Sie unter Verwendung von WITH STANDBY nachfolgende Protokollsicherungen wiederherstellen und dabei in jeder Wiederherstellungsanweisung dieselbe Standbydatei angeben.
Wenn Sie den Zielwiederherstellungspunkt identifiziert haben, können Sie erneut ein Rollforward bis zu diesem Zeitpunkt ausführen. Stellen Sie beim Erreichen des Zielzeitpunktes die Teildatenbank mithilfe der Option RECOVERY wieder her. Verbleibende Dateien können dann gegebenenfalls wiederhergestellt werden, um Konsistenz mit der Datenbank sicherzustellen. Nach Abschluss der Wiederherstellung der letzten vollständigen Protokollwiederherstellung stellen Sie die erste Protokollsicherung wieder her, die zeitlich nach dem Zielwiederherstellungspunkt liegt.
Weitere Informationen zu der Option STANDBY finden Sie unter RESTORE-Argumente (Transact-SQL).
Frühes Angeben des Zeitpunktes in einer Wiederherstellungssequenz
Eine Wiederherstellungssequenz besteht aus mindestens einem Wiederherstellungsvorgang, mit dessen Hilfe Daten mindestens eine Wiederherstellungsphase durchlaufen. Je mehr Informationen Sie über den Zweck der Sequenz bereitstellen, desto unwahrscheinlicher sind Fehler, die eine Wiederholung des Prozesses erfordern. Für die Zeitpunktwiederherstellung verwendet das SQL Server-Datenbankmodul zu Beginn (und während) einer Wiederherstellungssequenz angegebene Informationen, um das Zeitpunktziel der Wiederherstellung zu identifizieren. Wenn Sie in der Sequenz zu lange warten, erzeugt die Sequenz einen Fehler. Sie müssen die Information, wo die Wiederherstellung enden soll, früh genug in der Wiederherstellungssequenz angeben, um sicherzustellen, dass die Wiederherstellung nicht über das Zeitpunktziel hinausgeht.
Wenn Sie beabsichtigen, die Wiederherstellung an einem bestimmten Wiederherstellungspunkt zu beenden, sollten Sie dies in jeder RESTORE LOG-Anweisung (mithilfe von STOPAT, STOPBEFOREMARK oder STOPATMARK) zusammen mit der RECOVERY-Option angeben. Wenn die Optionen RECOVERY und STOPAT zusammen verwendet werden und die Transaktionsprotokollsicherung den angeforderten Zeitpunkt nicht enthält (z. B. wenn der angegebene Zeitpunkt nach dem Zeitpunkt liegt, bis zu dem das Transaktionsprotokoll reicht), wird eine Warnung generiert, und die Datenbank wird nicht wiederhergestellt. Wenn der Wiederherstellungspunkt erreicht wird, wird die Datenbank wiederhergestellt, und Versuche, weitere Protokollsicherungen wiederherzustellen, schlagen fehl. Durch die gemeinsame Verwendung der Optionen RECOVERY und STOPAT beim Wiederherstellen einer Protokollsicherung wird sichergestellt, dass die Wiederherstellung nicht über den angegebenen Zeitpunkt hinausgeht.
Beispiel: Zeitpunktwiederherstellung
Im folgenden Beispiel beginnt die Wiederherstellungssequenz mit der Deklaration der Absicht, die Wiederherstellung zu einem bestimmten Zeitpunkt während der Anwendung der ersten Protokollsicherung zu beenden. In diesem Beispiel tritt der Beendigungszeitpunkt in der ersten Protokollsicherung nach der differenziellen Sicherung auf.
RESTORE DATABASE database_name FROM full_backup
WITH NORECOVERY;
RESTORE DATABASE database_name FROM full_differential_backup
WITH NORECOVERY;
RESTORE LOG database_name FROM log_backup
WITH STOPAT = time, RECOVERY;
RESTORE LOG database_name FROM log_backup
WITH STOPAT = time, RECOVERY;
Ob eine angegebene Protokollwiederherstellung erfolgreich ist, hängt davon ab, ob sich time in dem von der Protokollsicherung erfassten Intervall befindet, wie in der folgenden Tabelle beschrieben.
Beziehung zwischen time und dem von der Protokollsicherung erfassten Intervall: | Wirkung |
---|---|
time liegt vor dem Intervall. |
Die Wiederherstellung erzeugt einen Fehler, und es wird kein Rollforward ausgeführt. |
time liegt in dem Intervall. |
Die letzte Wiederherstellung ist erfolgreich, und die Datenbank wird wiederhergestellt. |
time liegt nach dem Intervall. |
Das Rollforward ist erfolgreich, aber die Datenbank wird nicht wiederhergestellt, da time noch nicht erreicht wurde. |
Deklarieren des Beendigungszeitpunktes in jeder nachfolgenden RESTORE-Anweisung
Ein Beendigungszeitpunkt bezieht sich auf die spezifische Anweisung, die die STOPAT-, STOPBEFOREMARK- oder STOPATMARK-Option angibt. Wenn Sie diese Option nicht in der RESTORE-Anweisung angeben, wird die gesamte Sicherung wiederhergestellt.
Während einer Zeitpunkt-Wiederherstellungssequenz können Sie den Wiederherstellungspunkt ändern, indem Sie einen neuen Wert für time angeben, vorausgesetzt, die Datenbank hat den neuen Wert für time noch nicht überschritten.
Hinweis: |
---|
Die Optionen STOPBEFOREMARK und STOPATMARK weisen zwei Parameter auf – mark_name und lsn_number. Der mark_name-Parameter, mit dem eine Transaktionskennzeichnung in einer Protokollsicherung identifiziert wird, wird nur in RESTORE LOG-Anweisungen unterstützt. Der lsn_number-Parameter, mit dem eine Protokollfolgenummer identifiziert wird, wird in RESTORE DATABASE-Anweisungen und in RESTORE LOG-Anweisungen unterstützt. |
Siehe auch
Konzepte
Anwenden von Transaktionsprotokollsicherungen
Wiederherstellen zu einer Protokollfolgenummer (LSN)
Wiederherstellen bis zu einer markierten Transaktion
Andere Ressourcen
RESTORE (Transact-SQL)
Wiederherstellen einer Datenbank bis zu einem Punkt in einer Sicherung