Wiederherstellen einer Datenbank zu einer Datenbank-Momentaufnahme

Gilt für: SQL Server

Wenn Daten in einer Onlinedatenbank beschädigt werden, empfiehlt es sich gelegentlich, die Datenbank aus einer Datenbank-Momentaufnahme eines Zeitpunkts vor der Beschädigung wiederherzustellen, anstatt die Datenbank aus einer Sicherungskopie wiederherzustellen. Durch das Wiederherstellen einer Datenbank kann beispielsweise ein kürzlich zurückliegender, schwerwiegender Benutzerfehler (z. B. eine gelöschte Tabelle) rückgängig gemacht werden. Alle nach Erstellung der Momentaufnahme vorgenommenen Änderungen gehen jedoch verloren.

Vorbereitungen

Einschränkungen

Die Wiederherstellung wird unter folgenden Bedingungen nicht unterstützt:

  • Für die Datenbank sind mehrere Momentaufnahmen vorhanden. Für die Wiederherstellung darf nur eine Momentaufnahme für die Datenbank vorhanden sein, auf der Sie die Wiederherstellung durchführen möchten.

  • Die Datenbank enthält schreibgeschützte oder komprimierte Dateigruppen.

  • Alle Dateien sind nun offline, waren jedoch beim Erstellen der Momentaufnahme online.

Beachten Sie folgende Einschränkungen, bevor Sie eine Wiederherstellung aus einer Datenbank-Momentaufnahme ausführen:

  • Die Wiederherstellung bezieht sich nicht auf die Wiederherstellung von Medien. Eine Datenbank-Momentaufnahme ist eine unvollständige Kopie der Datenbankdateien. Wenn also die Datenbank oder die Datenbank-Momentaufnahme beschädigt wurde, ist die Wiederherstellung aus einer Momentaufnahme wahrscheinlich unmöglich. Zudem ist es eher unwahrscheinlich, dass das Problem durch eine Wiederherstellung im Falle einer Beschädigung behoben wird, selbst wenn eine Wiederherstellung möglich ist. Regelmäßige Sicherungen und Tests des Wiederherstellungsplans sind deshalb für den Schutz einer Datenbank unverzichtbar. Weitere Informationen finden Sie unter Sichern und Wiederherstellen von SQL Server-Datenbanken.

    Hinweis

    Wenn Sie die Quelldatenbank zu dem Zeitpunkt wiederherstellen müssen, an dem Sie eine Datenbank-Momentaufnahme erstellt haben, nutzen Sie das Modell der vollständigen Wiederherstellung, und implementieren Sie eine Sicherungsrichtlinie, die Ihnen dies ermöglicht.

  • Die ursprüngliche Quelldatenbank wird von der wiederhergestellten Datenbank überschrieben, sodass sämtliche Aktualisierungen der Datenbank seit der Erstellung der Momentaufnahme verloren gehen.

  • Die bisherige Protokolldatei wird bei der Wiederherstellung ebenfalls überschrieben, und das Protokoll wird neu erstellt. Daher ist kein Rollforward der wiederhergestellten Datenbank bis zum Zeitpunkt des Benutzerfehlers möglich. Es empfiehlt sich somit, dass Sie das Protokoll vor dem Wiederherstellen einer Datenbank sichern.

    Hinweis

    Es ist zwar nicht möglich, das ursprüngliche Protokoll wiederherzustellen und damit ein Rollforward der Datenbank auszuführen. Die Angaben in der ursprünglichen Protokolldatei können jedoch beim Rekonstruieren verlorener Daten helfen.

  • Durch Zurückkehren wird die Protokollsicherungskette unterbrochen. Bevor Sie also eine Protokollsicherung der Datenbank anfertigen können, muss daher eine vollständige Datenbank- oder Dateisicherung erfolgen. Wir empfehlen eine vollständige Datenbanksicherung.

  • Während des Zurückkehrens sind sowohl die Momentaufnahme als auch die Quelldatenbank nicht verfügbar. Die Quelldatenbank und die Momentaufnahme sind beide mit “In Wiederherstellung“ markiert. Tritt ein Fehler beim Zurückkehren auf, wird beim Neustart der Datenbank versucht, das Zurückkehren abzuschließen.

  • Die Metadaten einer Datenbank nach dem Zurückkehren entsprechen den Metadaten zum Zeitpunkt der Momentaufnahme.

  • Durch das Wiederherstellen werden alle Volltextkataloge gelöscht.

Voraussetzungen

Stellen Sie sicher, dass die Quelldatenbank und die Datenbank-Momentaufnahme die folgenden Voraussetzungen erfüllen:

Sicherheit

Berechtigungen

Alle Benutzer, die über RESTORE DATABASE-Berechtigungen für die Quelldatenbank verfügen, können diese in dem Zustand zum Zeitpunkt der Erstellung der Datenbank-Momentaufnahme wiederherstellen.

So stellen Sie eine Datenbank aus einer Datenbank-Momentaufnahme wieder her (Transact-SQL)

So stellen Sie eine Datenbank aus zu einer Datenbank-Momentaufnahme wieder her

Hinweis

Ein Beispiel für diese Prozedur finden Sie in Beispiele (Transact-SQL)an späterer Stelle in diesem Abschnitt.

  1. Ermitteln Sie die Datenbank-Momentaufnahme, aus der Sie die Datenbank wiederherstellen möchten. Sie können die Momentaufnahmen für eine Datenbank in SQL Server Management Studio anzeigen (weitere Informationen finden Sie unter Anzeigen einer Datenbankmomentaufnahme (SQL Server)). Zudem können Sie die Quelldatenbank einer Sicht anhand der source_database_id-Spalte der sys.databases (Transact-SQL)-Katalogsicht identifizieren.

  2. Löschen Sie alle anderen Datenbankmomentaufnahmen.

    Informationen zum Löschen von Momentaufnahmen finden Sie unter Löschen einer Datenbankmomentaufnahme (Transact-SQL). Verwendet die Datenbank das vollständige Wiederherstellungsmodell sollten Sie das Protokoll vor dem Wiederherstellen sichern. Weitere Informationen finden Sie unter Sichern eines Transaktionsprotokolls (SQL Server) oder Sichern des Transaktionsprotokolls bei beschädigter Datenbank (SQL Server).

  3. Führen Sie den Wiederherstellungsvorgang aus.

    Für einen Wiederherstellungsvorgang sind RESTORE DATABASE-Berechtigungen für die Quelldatenbank erforderlich. Verwenden Sie zum Wiederherstellen der Datenbank die folgende Transact-SQL-Anweisung:

    RESTORE DATABASE database_name FROM DATABASE_SNAPSHOT =database_snapshot_name

    Dabei ist database_name die Quelldatenbank und database_snapshot_name der Name der Momentaufnahmen, aus dem die Datenbank wiederhergestellt werden soll. Beachten Sie, dass Sie in dieser Anweisung einen Momentaufnahmenamen statt eines Sicherungsmediums angeben müssen.

    Weitere Informationen finden Sie unter RESTORE (Transact-SQL).

    Hinweis

    Während des Wiederherstellungsvorgangs stehen weder die Momentaufnahme noch die Quelldatenbank zur Verfügung. Die Quelldatenbank und die Momentaufnahme sind beide mit “In Wiederherstellung“ markiert. Falls während der Wiederherstellung ein Fehler auftritt, wird beim nächsten Start der Datenbank versucht, die Wiederherstellung abzuschließen.

  4. Hat sich seit der Erstellung der Datenbankmomentaufnahme der Datenbankbesitzer geändert, ist es möglicherweise sinnvoll, den Datenbankbesitzer der wiederhergestellten Datenbank zu aktualisieren.

    Hinweis

    In der wiederhergestellten Datenbank bleiben die Berechtigungen und die Konfiguration (wie z. B. Datenbankbesitzer und Wiederherstellungsmodell) der Datenbankmomentaufnahme erhalten.

  5. Starten Sie die Datenbank.

  6. Sie haben die Option, die wiederhergestellte Datenbank zu sichern; dies empfiehlt sich besonders, wenn das vollständige (oder das massenprotokollierte) Wiederherstellungsmodell für die Datenbank verwendet wird. Weitere Informationen zum Sichern einer Datenbank finden Sie unter Erstellen einer vollständigen Datenbanksicherung (SQL Server).

Beispiele (Transact-SQL)

Dieser Abschnitt enthält die folgenden Beispiele für das Wiederherstellen einer Datenbank aus einer Datenbank-Momentaufnahme:

A. Wiederherstellen einer Momentaufnahme für die AdventureWorks-Datenbank

In diesem Beispiel wird davon ausgegangen, dass derzeit in der AdventureWorks2022 -Datenbank nur eine Momentaufnahme vorhanden ist. Das Beispiel, mit dem die Momentaufnahme erstellt wird, zu dem die Datenbank hier wiederhergestellt wird, finden Sie unter Erstellen einer Datenbankmomentaufnahme (Transact-SQL).

USE master;  
-- Reverting AdventureWorks to AdventureWorks_dbss1800  
RESTORE DATABASE AdventureWorks from   
DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';  
GO  

B. Wiederherstellen einer Momentaufnahme für die Sales-Datenbank

In diesem Beispiel wird davon ausgegangen, dass derzeit zwei Momentaufnahmen für die Sales -Datenbank vorhanden sind: sales_snapshot0600 und sales_snapshot1200. Durch dieses Beispiel wird die ältere Momentaufnahme gelöscht und die Datenbank mithilfe der aktuelleren Momentaufnahme wiederhergestellt.

Den Code zum Erstellen der Beispieldatenbank und der Momentaufnahmen, für die dieses Beispiel gilt, finden Sie wie folgt:

--Test to see if sales_snapshot0600 exists and if it   
-- does, delete it.  
IF EXISTS (SELECT database_id FROM sys.databases  
    WHERE NAME='sales_snapshot0600')  
    DROP DATABASE SalesSnapshot0600;  
GO  
-- Reverting Sales to sales_snapshot1200  
USE master;  
RESTORE DATABASE Sales FROM DATABASE_SNAPSHOT = 'sales_snapshot1200';  
GO  

Related Tasks

Weitere Informationen

Datenbank-Momentaufnahmen (SQL Server)
RESTORE (Transact-SQL)
sys.databases (Transact-SQL)
Datenbankspiegelung und Datenbankmomentaufnahmen (SQL Server)