Wiederherstellen einer Datenbank zu einer Datenbank-MomentaufnahmeRevert a Database to a Database Snapshot

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.If data in an online database becomes damaged, in some cases, reverting the database to a database snapshot that predates the damage might be an appropriate alternative to restoring the database from a backup. 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.For example, reverting a database might be useful for reverse a recent serious user error, such as a dropped table. Alle nach Erstellung der Momentaufnahme vorgenommenen Änderungen gehen jedoch verloren.However, all changes made after the snapshot was created are lost.

Vorbereitungen Before You Begin

Einschränkungen Limitations and Restrictions

Die Wiederherstellung wird unter folgenden Bedingungen nicht unterstützt:Reverting is unsupported under the following conditions:

  • Die Datenbank darf derzeit nur über eine Datenbank-Momentaufnahme verfügen, mit der die Wiederherstellung ausgeführt werden soll.The database must currently have only one database snapshot, to which you plan to revert.

  • Die Datenbank enthält schreibgeschützte oder komprimierte Dateigruppen.Any read-only or compressed filegroups exist in the database.

  • Alle Dateien sind nun offline, waren jedoch beim Erstellen der Momentaufnahme online.Any files are now offline but were online when the snapshot was created.

    Beachten Sie folgende Einschränkungen, bevor Sie eine Wiederherstellung aus einer Datenbank-Momentaufnahme ausführen:Before reverting a database, consider the following limitations:

  • Die Wiederherstellung bezieht sich nicht auf die Wiederherstellung von Medien.Reverting is not intended for media recovery. .. 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.A database snapshot is an incomplete copy of the database files, so if either the database or the database snapshot is corrupted, reverting from a snapshot is likely to be impossible. 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.Furthermore, even when it is possible, reverting in the event of corruption is unlikely to correct the problem. Regelmäßige Sicherungen und Tests des Wiederherstellungsplans sind deshalb für den Schutz einer Datenbank unverzichtbar.Therefore, taking regular backups and testing your restore plan are essential to protect a database. Weitere Informationen finden Sie unter Back Up and Restore of SQL Server Databases.For more information, see Back Up and Restore of SQL Server Databases.

    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.If you need to be able to restore the source database to the point in time at which you created a database snapshot, use the full recovery model and implement a backup policy that enables you to do that.

  • Die ursprüngliche Quelldatenbank wird von der wiederhergestellten Datenbank überschrieben, sodass sämtliche Aktualisierungen der Datenbank seit der Erstellung der Momentaufnahme verloren gehen.The original source database is overwritten by the reverted database, so any updates to the database since the snapshot's creation are lost.

  • Die bisherige Protokolldatei wird bei der Wiederherstellung ebenfalls überschrieben, und das Protokoll wird neu erstellt.The revert operation also overwrites the old log file and rebuilds the log. Daher ist kein Rollforward der wiederhergestellten Datenbank bis zum Zeitpunkt des Benutzerfehlers möglich.Consequently, you cannot roll the reverted database forward to the point of user error. Es empfiehlt sich somit, dass Sie das Protokoll vor dem Wiederherstellen einer Datenbank sichern.Therefore, we recommend that you back up the log before reverting a database.

    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.Although you cannot restore the original log to roll forward the database, the information in the original log file can be useful for reconstructing lost data.

  • Durch Zurückkehren wird die Protokollsicherungskette unterbrochen.Reverting breaks the log backup chain. Bevor Sie also eine Protokollsicherung der Datenbank anfertigen können, muss daher eine vollständige Datenbank- oder Dateisicherung erfolgen.Therefore, before you can take log backups of the reverted database, you must first take a full database backup or file backup. Wir empfehlen eine vollständige Datenbanksicherung.We recommend a full database backup.

  • Während des Zurückkehrens sind sowohl die Momentaufnahme als auch die Quelldatenbank nicht verfügbar.During a revert operation, both the snapshot and the source database are unavailable. Die Quelldatenbank und die Momentaufnahme sind jeweils gekennzeichnet, dass derzeit eine Wiederherstellung ausgeführt wird.The source database and snapshot are both marked "In restore." Tritt ein Fehler beim Zurückkehren auf, wird beim Neustart der Datenbank versucht, das Zurückkehren abzuschließen.If an error occurs during the revert operation, when the database starts up again, the revert operation will try to finish reverting.

  • Die Metadaten einer Datenbank nach dem Zurückkehren entsprechen den Metadaten zum Zeitpunkt der Momentaufnahme.The metadata of a reverted database is the same as the metadata at the time of the snapshot.

  • Durch das Wiederherstellen werden alle Volltextkataloge gelöscht.Reverting drops all the full-text catalogs.

Erforderliche Komponenten Prerequisites

Stellen Sie sicher, dass die Quelldatenbank und die Datenbank-Momentaufnahme die folgenden Voraussetzungen erfüllen:Ensure that the source database and database snapshot meet the following prerequisites:

Sicherheit Security

Berechtigungen Permissions

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.Any user who has RESTORE DATABASE permissions on the source database can revert it to its state when a database snapshot was created.

So stellen Sie eine Datenbank aus einer Datenbank-Momentaufnahme wieder her (Transact-SQL) How to Revert a Database to a Database Snapshot (Using Transact-SQL)

So stellen Sie eine Datenbank aus zu einer Datenbank-Momentaufnahme wieder herTo revert a database to a database snapshot

Hinweis

Ein Beispiel für diese Prozedur finden Sie in Beispiele (Transact-SQL)an späterer Stelle in diesem Abschnitt.For an example of this procedure, see Examples (Transact-SQL), later in this section.

  1. Ermitteln Sie die Datenbank-Momentaufnahme, aus der Sie die Datenbank wiederherstellen möchten.Identify the database snapshot to which you want to revert the database. Sie können die Momentaufnahmen für eine Datenbank in SQL Server Management StudioSQL Server Management Studio anzeigen (weitere Informationen finden Sie unter Anzeigen einer Datenbankmomentaufnahme (SQL Server)).You can view the snapshots on a database in SQL Server Management StudioSQL Server Management Studio (see View a Database Snapshot (SQL Server)). Zudem können Sie die Quelldatenbank einer Sicht anhand der source_database_id -Spalte der sys.databases (Transact-SQL) -Katalogsicht identifizieren.Also, you can identify the source database of a view from the source_database_id column of the sys.databases (Transact-SQL) catalog view.

  2. Löschen Sie alle anderen Datenbankmomentaufnahmen.Drop any other database snapshots.

    Informationen zum Löschen von Momentaufnahmen finden Sie unter Löschen einer Datenbankmomentaufnahme (Transact-SQL).For information on dropping snapshots, see Drop a Database Snapshot (Transact-SQL). Verwendet die Datenbank das vollständige Wiederherstellungsmodell sollten Sie das Protokoll vor dem Wiederherstellen sichern.If the database uses the full recovery model, before reverting, you should back up the log. Weitere Informationen finden Sie unter Sichern eines Transaktionsprotokolls (SQL Server) oder Sichern des Transaktionsprotokolls bei beschädigter Datenbank (SQL Server).For more information, see Back Up a Transaction Log (SQL Server) or Back Up the Transaction Log When the Database Is Damaged (SQL Server).

  3. Führen Sie den Wiederherstellungsvorgang aus.Perform the revert operation.

    Für einen Wiederherstellungsvorgang sind RESTORE DATABASE-Berechtigungen für die Quelldatenbank erforderlich.A revert operation requires RESTORE DATABASE permissions on the source database. Verwenden Sie zum Wiederherstellen der Datenbank die folgende Transact-SQL-Anweisung:To revert the database, use the following Transact-SQL statement:

    RESTORE DATABASE database_name FROM DATABASE_SNAPSHOT =database_snapshot_nameRESTORE 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.Where database_name is the source database and database_snapshot_name is the name of the snapshot to which you want to revert the database. Beachten Sie, dass Sie in dieser Anweisung einen Momentaufnahmenamen statt eines Sicherungsmediums angeben müssen.Notice that in this statement, you must specify a snapshot name rather than a backup device.

    Weitere Informationen finden Sie unter RESTORE (Transact-SQL).For more information, see RESTORE (Transact-SQL).

    Hinweis

    Während des Wiederherstellungsvorgangs stehen weder die Momentaufnahme noch die Quelldatenbank zur Verfügung.During the revert operation, both the snapshot and the source database are unavailable. Die Quelldatenbank und die Momentaufnahme sind als von einem Wiederherstellungsvorgang betroffen gekennzeichnet.The source database and snapshot are both marked as "In restore." Falls während der Wiederherstellung ein Fehler auftritt, wird beim nächsten Start der Datenbank versucht, die Wiederherstellung abzuschließen.If an error occurs during the revert operation, it will try to finish reverting when the database starts up again.

  4. Hat sich seit der Erstellung der Datenbankmomentaufnahme der Datenbankbesitzer geändert, ist es möglicherweise sinnvoll, den Datenbankbesitzer der wiederhergestellten Datenbank zu aktualisieren.If the database owner changed since creation of the database snapshot, you may want to update the database owner of the reverted database.

    Hinweis

    In der wiederhergestellten Datenbank bleiben die Berechtigungen und die Konfiguration (wie z. B. Datenbankbesitzer und Wiederherstellungsmodell) der Datenbankmomentaufnahme erhalten.The reverted database retains the permissions and configuration (such as database owner and recovery model) of the database snapshot.

  5. Starten Sie die Datenbank.Start the database.

  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.Optionally, back up the reverted database, especially if it uses the full (or bulk-logged) recovery model. Weitere Informationen zum Sichern einer Datenbank finden Sie unter Erstellen einer vollständigen Datenbanksicherung (SQL Server).To back up a database, see Create a Full Database Backup (SQL Server).

Beispiele (Transact-SQL) Examples (Transact-SQL)

Dieser Abschnitt enthält die folgenden Beispiele für das Wiederherstellen einer Datenbank aus einer Datenbank-Momentaufnahme:This section contains the following examples of reverting a database to a database snapshot:

A. A. Wiederherstellen einer Momentaufnahme für die AdventureWorks-DatenbankReverting a snapshot on the AdventureWorks database

In diesem Beispiel wird davon ausgegangen, dass derzeit in der AdventureWorks2012AdventureWorks2012 -Datenbank nur eine Momentaufnahme vorhanden ist.This example assumes that only one snapshot currently exists on the AdventureWorks2012AdventureWorks2012 database. Das Beispiel, mit dem die Momentaufnahme erstellt wird, zu dem die Datenbank hier wiederhergestellt wird, finden Sie unter Erstellen einer Datenbankmomentaufnahme (Transact-SQL).For the example that creates the snapshot to which the database is reverted here, see Create a Database Snapshot (Transact-SQL).

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

B. B. Wiederherstellen einer Momentaufnahme für die Sales-DatenbankReverting a snapshot on the Sales database

In diesem Beispiel wird davon ausgegangen, dass derzeit zwei Momentaufnahmen für die Sales -Datenbank vorhanden sind: sales_snapshot0600 und sales_snapshot1200.This example assumes that two snapshots currently exist on the Sales database: sales_snapshot0600 and sales_snapshot1200. Durch dieses Beispiel wird die ältere Momentaufnahme gelöscht und die Datenbank mithilfe der aktuelleren Momentaufnahme wiederhergestellt.The example deletes the older of the snapshots and reverts the database to the more recent snapshot.

Den Code zum Erstellen der Beispieldatenbank und der Momentaufnahmen, für die dieses Beispiel gilt, finden Sie wie folgt:For the code for creating the sample database and snapshots on which this example depends, see:

--Test to see if sales_snapshot0600 exists and if it   
-- does, delete it.  
IF EXISTS (SELECT dbid 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  

Siehe auchSee Also

Datenbankmomentaufnahmen (SQL Server) Database Snapshots (SQL Server)
RESTORE (Transact-SQL) RESTORE (Transact-SQL)
sys.databases (Transact-SQL) sys.databases (Transact-SQL)
Datenbankspiegelung und Datenbankmomentaufnahmen (SQL Server) Database Mirroring and Database Snapshots (SQL Server)