Freigeben über


Bewährte Methoden zum Wiederherstellen einer Datenbank bis zu einem bestimmten Wiederherstellungspunkt

 Dieses Thema ist nur für SQL Server-Datenbanken relevant, die das vollständige oder massenprotokollierte Wiederherstellungsmodell verwenden. Es werden einige Best Practices zum Wiederherstellen einer Datenbank zu einem bestimmten Wiederherstellungspunkt (einem Zeitpunkt, einer markierten Transaktion oder einer Protokollfolgenummer (LSN)) aufgezeigt.

Verwenden von STANDBY zum Finden eines unbekannten Zeitpunkts

Gelegentlich möchten Sie eine Datenbank zu einem bestimmten Zeitpunkt wiederherstellen, wissen aber nicht genau, welcher Zeitpunkt Ihrem Wiederherstellungsziel (d. h. dem optimalen Wiederherstellungspunkt) am besten entspricht. Um diesen Wiederherstellungspunkt zu ermitteln, können Sie RESTORE … WITH STANDBY **=**standby_file_name zusammen mit einer STOPAT-Klausel verwenden, deren Zielzeit vor dem gesuchten Wiederherstellungspunkt liegt. Ein STANDBY-Wiederherstellungsvorgang stellt die Datenbank schreibgeschützt wieder her. Sie können in der Datenbank nach dem optimalen Wiederherstellungspunkt suchen.

Mit einer Reihe von STANDBY-Wiederherstellungsvorgängen können Sie für die primäre Datendatei (und optional weitere Datendateien) einen inkrementellen Rollforward durchführen, bis Sie den optimalen Wiederherstellungspunkt gefunden haben. Nachdem Sie den optimalen Wiederherstellungspunkt identifiziert haben, können Sie einen weiteren Rollforward durchführen und hierbei WITH STOPAT angeben, um den optimalen Wiederherstellungspunkt als Zielzeitpunkt festzulegen. Stellen Sie beim Erreichen des Zielzeitpunkts die Teildatenbank mithilfe der Option WITH 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 Zeitpunkts 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 Database Engine (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.

Wichtiger HinweisWichtig

Wenn in einer Teilwiederherstellungssequenz eine FILESTREAM-Dateigruppe ausgeschlossen wird, wird die Wiederherstellung bis zu einem bestimmten Zeitpunkt nicht unterstützt. Sie können das Fortsetzen der Wiederherstellungssequenz erzwingen. Die FILESTREAM-Dateigruppen, die nicht in die RESTORE-Anweisung eingeschlossen werden, können jedoch zu keinem Zeitpunkt wiederhergestellt werden. Wenn Sie eine Wiederherstellung bis zu einem bestimmten Zeitpunkt erzwingen möchten, geben Sie die CONTINUE_AFTER_ERROR-Option zusammen mit der Option STOPAT, STOPATMARK oder STOPBEFOREMARK an. Diese müssen Sie auch in den folgenden RESTORE LOG-Anweisungen angeben. Wenn Sie CONTINUE_AFTER_ERROR angeben, ist die Teilwiederherstellungssequenz erfolgreich, und die FILESTREAM-Dateigruppe wird nicht wiederherstellbar.

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 Beendigungszeitpunkts 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.

HinweisHinweis

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.

Änderungsverlauf

Aktualisierter Inhalt

Korrigierter Abschnitt "Verwenden von STANDBY zum Finden eines unbekannten Zeitpunkts", um darzulegen, dass Sie mit WITH STANDBY lediglich die Auswirkungen des Wiederherstellungsvorgangs rückgängig machen können.