Wiederherstellen eines Transaktionsprotokoll-Backups (SQL Server)

Gilt für:SQL Server

Sie können ein Transaktionsprotokoll-Backup in SQL Server wiederherstellen, indem Sie SQL Server Management Studio, Transact-SQL oder PowerShell verwenden.

Voraussetzungen

Du musst Backups in der Reihenfolge wiederherstellen, in der du sie erstellt hast. Bevor Sie ein bestimmtes Transaktionsprotokoll-Backup wiederherstellen, stellen Sie die folgenden früheren Backups wieder her, ohne nicht festgeschriebene Transaktionen zurückzurollen, indem Sie WITH NORECOVERY verwenden:

  • Das vollständige Datenbank-Backup und optional das letzte differenzielle Backup, das vor diesem Transaktionsprotokoll-Backup gemacht wurde. Die Datenbank muss das vollständige oder bulk-loggte Wiederherstellungsmodell verwendet haben, bevor das letzte vollständige oder differenzielle Datenbank-Backup erstellt wurde.

  • Alle Transaktionsprotokoll-Backups, die nach dem vollständigen Datenbank-Backup oder dem differenziellen Backup (falls du eines wiederherstellst) und vor diesem Transaktionsprotokoll-Backup erstellt wurden. Du musst Log-Backups in der Reihenfolge anwenden, in der du sie erstellt hast, ohne Lücken in der Log-Kette.

Weitere Informationen zu Transaktionsprotokoll-Backups finden Sie unter Transaktionsprotokoll-Backups und Transaktionsprotokoll-Backups anwenden.

Berechtigungen

Für eine bestehende Datenbank werden RESTORE die Berechtigungen standardmäßig für Mitglieder der festen Serverrollen sysadmin und dbcreator sowie den Eigentümer (dbo) der Datenbank festgelegt.

RESTORE Berechtigungen werden Rollen zugewiesen, deren Mitgliedschaft der Server immer überprüfen kann. Der Server kann die Mitgliedschaft in festen Datenbankrollen nur überprüfen, wenn die Datenbank zugänglich und unbeschädigt ist, was nicht immer der Fall ist, wenn RESTORE ausgeführt wird. Aus diesem Grund haben Mitglieder der festen Datenbankrolle RESTORE nicht die Berechtigungen.

Remarks

Für eine Spiegeldatenbank oder eine sekundäre Datenbank einer Verfügbarkeitsgruppe, die Sie nicht mit der Verfügbarkeitsgruppe verknüpft haben, stellen Sie die letzte Protokollsicherung mit der Option NORECOVERY wieder her (-NoRecovery in PowerShell). Die Datenbank muss im Wiederherstellungszustand bleiben.

Für eine sekundäre Log-Shipping-Datenbank stellen Sie das letzte Log-Backup mit der NORECOVERY Option oder der STANDBY Option (-StandbyFile in PowerShell) wieder her. Die STANDBY Option gewährt zwischen den Wiederherstellungen einen Nur-Lese-Zugriff auf die Datenbank.

Verwenden Sie SQL Server Management Studio

Warnung

Bei einer typischen Wiederherstellung wählt man die Log-Backups zusammen mit den Daten und den differenziellen Backups im Dialogfeld Restore Database aus.

  1. Verbinden Sie sich mit der entsprechenden Instanz der SQL Server-Datenbank-Engine. Im Objekt-Explorer wählen Sie den Servernamen, um den Serverbaum zu erweitern.

  2. Erweitern Sie Datenbanken. Wählen Sie eine Benutzerdatenbank aus oder erweitern Sie Systemdatenbanken und wählen Sie eine Systemdatenbank aus.

  3. Rechtsklicke auf die Datenbank, zeige auf Aufgaben, zeige auf Wiederherstellen und wähle dann Transaktionsprotokoll aus. Das Dialogfeld "Wiederherstellen des Transaktionsprotokolls" öffnet sich.

    Hinweis

    Wenn das Transaktionsprotokoll nicht verfügbar ist, müssen Sie möglicherweise zuerst ein vollständiges oder differenziertes Backup wiederherstellen. Verwenden Sie das Dialogfeld „Datenbank wiederherstellen“.

  4. Auf der Allgemeinen-Seite wählen Sie im Datenbank-Listenfeld die Datenbank aus. Die Liste zeigt nur Datenbanken im Wiederherstellungszustand.

  5. Um die Quelle und den Speicherort der zu wiederherstellenden Backup-Sets anzugeben, wählen Sie eine der folgenden Optionen:

    • Von vorherigen Sicherungen der Datenbank

      Wählen Sie die wiederherzustellende Datenbank aus der Dropdown-Liste aus. Die Liste enthält nur Datenbanken mit Backups, die im msdb-Sicherungsverlauf erfasst sind.

    • Aus Datei oder von Band

      Klicken Sie auf die Schaltfläche „Durchsuchen“ (...), um das Dialogfeld Sicherungsmedien auswählen zu öffnen. Im Feld Medientyp der Sicherung wählen Sie einen Gerätetyp aus. Um ein oder mehrere Geräte zum Feld „Sicherungsmedien“ hinzuzufügen, wählen Sie Hinzufügen.

      Nachdem du die gewünschten Geräte hinzugefügt hast, wähle OK , um zur Allgemein-Seite zurückzukehren.

  6. Wählen Sie im Raster Wählen Sie die wiederherzustellenden Transaktionsprotokollsicherungen aus die wiederherzustellenden Sicherungen aus. Das Raster listet die verfügbaren Transaktionsprotokoll-Backups für die ausgewählte Datenbank auf. Die Tabelle listet Log-Backups in der Reihenfolge der Log-Sequenznummern (LSNs) auf, die sie enthalten, und Sie müssen sie in dieser Reihenfolge wiederherstellen.

    In der folgenden Tabelle werden die Spaltenheader des Rasters aufgelistet und deren Werte beschrieben.

    Kopfzeile Wert
    Wiederherstellen Ausgewählte Kontrollkästchen zeigen die zu wiederherstellenden Backup-Sets an.
    Name Name des Backup-Satzes.
    Komponente Gesicherte Komponente: Datenbank, Datei oder <leer> (bei Transaktionsprotokollen).
    Datenbank Name der an dem Sicherungsvorgang beteiligten Datenbank.
    Startdatum Datum und Uhrzeit des Sicherungsbeginns, entsprechend den Ländereinstellungen des Clients.
    Beendigungsdatum Datum und Uhrzeit des Sicherungsabschlusses, entsprechend den Ländereinstellungen des Clients.
    Erste LSN Protokollsequenznummer der ersten Transaktion im Sicherungssatz. Leer für Dateisicherungen.
    Letzte LSN Protokollsequenznummer der letzten Transaktion im Sicherungssatz. Leer für Dateisicherungen.
    Prüfpunkt-LSN Protokollsequenznummer des letzten Prüfpunkts zum Zeitpunkt der Erstellung der Sicherung.
    Vollständige LSN Protokollsequenznummer der neuesten vollständigen Datenbanksicherung.
    Server Name der Instanz der Datenbank-Engine, durch die der Sicherungsvorgang ausgeführt wurde.
    Benutzername Name des Benutzers, der den Sicherungsvorgang ausgeführt hat.
    Größe Größe des Sicherungssatzes in Byte.
    Position Position des Sicherungssatzes auf dem Volume.
    Ablaufdatum Datum und Uhrzeit des Zeitpunkts, zu dem die Gültigkeit des Sicherungssatzes endet.
  7. Wählen Sie eine der folgenden Optionen aus:

    • Zeitpunkt

      Behalten Sie die Standardeinstellung (Neuester möglicher) bei oder wählen Sie den Durchsuchen-Button, um das Point in Time Restore-Dialogfeld zu öffnen und ein bestimmtes Datum und eine bestimmte Uhrzeit auszuwählen.

    • Markierte Transaktion

      Stellen Sie für die Datenbank den Zustand zum Zeitpunkt einer zuvor markierten Transaktion wieder her. Diese Option öffnet das Dialogfeld „Markierte Transaktion auswählen“. Das Raster in diesem Dialogfeld listet die markierten Transaktionen in den ausgewählten Transaktionsprotokoll-Backups auf.

      Standardmäßig geht die Wiederherstellungsoperation bis zur markierten Transaktion hoch, schließt sie aber aus. Um die markierte Transaktion in die Wiederherstellung einzubeziehen, wählen Sie Markierte Transaktion einbeziehen.

      In der folgenden Tabelle werden die Spaltenheader des Rasters aufgelistet und deren Werte beschrieben.

      Kopfzeile Wert
      <Blank> Zeigt ein Kontrollkästchen zur Auswahl der Markierung an.
      Transaktionsmarkierung Name der markierten Transaktion, der vom Benutzer beim Commit der Transaktion angegeben wurde.
      Datum Datum und Uhrzeit, zu der die Transaktion committet wurde. Transaktionsdatum und -zeit werden wie in der logmarkhistory-Tabelle in msdb gespeichert angezeigt, nicht nach Datum und Uhrzeit des Client-Computers.
      Beschreibung Beschreibung der markierten Transaktion, falls vorhanden, die vom Benutzer beim Bestätigen der Transaktion angegeben wurde.
      LSN Protokollfolgenummer der markierten Transaktion.
      Datenbank Name der Datenbank, in der die markierte Transaktion festgeschrieben wurde.
      Benutzername Der Name des Datenbankbenutzers, der für die markierte Transaktion ein Commit ausgeführt hat.
  8. Zum Anzeigen oder Auswählen der erweiterten Optionen wählen Sie Optionen im Bereich Seite auswählen aus.

  9. Im Abschnitt Wiederherstellungsoptionen wählen Sie aus den folgenden Optionen:

    • Replikationseinstellungen beibehalten (WITH KEEP_REPLICATION)

      Die Replikationseinstellungen bleiben erhalten, wenn man eine veröffentlichte Datenbank auf einen anderen Server wiederherstellt als den, auf dem die Datenbank erstellt wurde.

      Diese Option ist nur mit der Option „Datenbank durch Zurücksetzen nicht übertragener Transaktionen betriebsbereit lassen …“ verfügbar (später beschrieben), was dem Wiederherstellen eines Backups mit der Option RECOVERY entspricht.

      Die Auswahl dieser Option entspricht der Verwendung der KEEP_REPLICATION-Option in einer Transact-SQL-Anweisung RESTORE .

    • Bestätigung vor Wiederherstellen jeder einzelnen Sicherung

      Vor jedem Backup-Set nach dem ersten öffnet diese Option das Dialogfeld "Mit Wiederherstellen fortsetzen", das fragt, ob Sie die Wiederherstellungssequenz fortsetzen möchten. Das Dialogfeld zeigt den Namen des nächsten Mediensets (falls verfügbar), den Namen des Backup-Sets und die Beschreibung des Backup-Sets.

      Diese Option ist besonders nützlich, wenn man Bänder gegen verschiedene Mediensets tauschen muss, zum Beispiel wenn der Server nur ein Bandgerät hat. Wählen Sie OK nur aus, wenn Sie bereit sind, weiterzufahren.

      Wenn du Nein wählst, bleibt die Datenbank im Wiederherstellungszustand. Du kannst die Wiederherstellungssequenz später ab der zuletzt abgeschlossenen Wiederherstellung fortsetzen. Verwenden Sie den Task Datenbank wiederherstellen erneut, wenn die nächste Sicherung eine Datensicherung oder differenzielle Sicherung ist. Wenn die nächste Sicherung eine Protokollsicherung ist, verwenden Sie den Task Transaktionsprotokoll wiederherstellen .

    • Zugriff auf die wiederhergestellte Datenbank einschränken (WITH RESTRICTED_USER)

      Macht die wiederhergestellte Datenbank nur Mitgliedern von db_owner, dbcreator oder sysadminverfügbar.

      Die Auswahl dieser Option entspricht der Verwendung der RESTRICTED_USER-Option in einer Transact-SQL-Anweisung RESTORE .

  10. Unter Wiederherstellungszustand geben Sie den Zustand der Datenbank nach der Wiederherstellungsoperation an.

    • Lassen Sie die Datenbank einsatzbereit, indem nicht übernommene Transaktionen zurückgerollt werden. Zusätzliche Transaktionsprotokolle können nicht wiederhergestellt werden. (RESTORE MIT WIEDERHERSTELLUNG)

      Stellt die Datenbank wieder her. Diese Option entspricht der RECOVERY-Option in einer Transact-SQL-Anweisung RESTORE.

      Wähle diese Option nur, wenn du keine weiteren Log-Backups zum Wiederherstellen hast.

    • Lass die Datenbank außer Betrieb und rolle keine nicht festgeschriebenen Transaktionen zurück. Zusätzliche Transaktionsprotokolle können wiederhergestellt werden. (RESTORE MIT NORECOVERY)

      Belässt die Datenbank im nicht wiederhergestellten Status RESTORING . Diese Option entspricht der Verwendung der NORECOVERY-Option in einer Transact-SQL-Anweisung RESTORE .

      Wenn Sie diese Option wählen, ist die Option „Replikationseinstellungen beibehalten“ nicht verfügbar.

    • Datenbank im schreibgeschützten Modus belassen. Transaktionen ohne Commit werden rückgängig gemacht, die rückgängig gemachten Aktionen werden jedoch in einer Datei gespeichert, sodass die Auswirkungen der Wiederherstellung umgekehrt werden können. (RESTORE MIT STANDBY)

      Belässt die Datenbank in einem Standbystatus. Diese Option entspricht der Verwendung der STANDBY-Option in einer Transact-SQL-Anweisung RESTORE .

      Diese Option erfordert eine Standby-Datei.

  11. Wenn Sie die Datenbank im Nur-Lese-Modus belassen, geben Sie im Textfeld Standby-Datei einen Standby-Dateinamen an. Du kannst nach der Standby-Datei suchen oder ihren Pfad im Textfeld eingeben.

Verwenden von Transact-SQL

Wichtig

Um Mehrdeutigkeiten zu vermeiden, sollte in jeder WITH RECOVERY-Anweisung, insbesondere in Skripten, explizit entweder RESTORE oder WITH NORECOVERY angegeben werden.

  1. Für jede Sicherung des Transaktionsprotokolls vor der letzten in Ihrer Wiederherstellungssequenz führen Sie eine RESTORE LOG Anweisung mit folgenden Werten aus:

    • Der Name der Datenbank, auf die das Transaktionsprotokoll angewendet wird.
    • Das Backup-Gerät, das das Transaktionsprotokoll-Backup enthält.
    • Die Klausel NORECOVERY.

    Das folgende Beispiel zeigt die Grundsyntax, wobei <database_name> der Name der Datenbank ist und <backup_device> der Name des Geräts, das das Protokoll-Backup enthält.

    RESTORE LOG <database_name>
    FROM <backup_device>
    WITH NORECOVERY
    [ ; ]
    

    Wenn deine Wiederherstellungssequenz nur ein Log-Backup hat, überspringe diesen Schritt.

  2. Für die letzte Log-Sicherung in Ihrer Wiederherstellungssequenz verwenden Sie eine der folgenden Methoden, um die Datenbank wiederherzustellen:

    • Stellen Sie die Datenbank im Rahmen der letzten RESTORE LOG-Anweisung wieder her:

      RESTORE LOG <database_name>
      FROM <backup_device>
      WITH RECOVERY;
      GO
      
    • Die Datenbank wird später mit einer separaten RESTORE DATABASE Anweisung wiederhergestellt:

      RESTORE LOG <database_name>
      FROM <backup_device>
      WITH NORECOVERY;
      
      RESTORE DATABASE <database_name>
      WITH RECOVERY;
      GO
      

      Die Datenbank bleibt nach der letzten RESTORE LOG Anweisung im Wiederherstellungszustand. Du kannst überprüfen, ob du alle notwendigen Log-Backups wiederhergestellt hast, und dann die Datenbank wiederherstellen. Dieser Ansatz ist oft nützlich für eine Wiederherstellung zu einem bestimmten Zeitpunkt.

Beispiele (Transact-SQL)

Standardmäßig verwendet die AdventureWorks2025 -Datenbank das einfache Wiederherstellungsmodell. Die folgenden Beispiele erfordern Backups, die unter dem vollständigen Wiederherstellungsmodell erstellt wurden. Bevor Sie diese Backups erstellen, führen Sie die folgende Anweisung aus, um das Wiederherstellungsmodell zu ändern:

ALTER DATABASE AdventureWorks2025
SET RECOVERY FULL;

Der Wechsel zum vollständigen Wiederherstellungsmodell tritt erst nach der ersten Datensicherung in Kraft. Mach ein vollständiges Datenbank-Backup, um die Log-Kette zu starten.

Die folgenden Beispiele stellen die Backups in eine Instanz zurück, in der die AdventureWorks2025 Datenbank nicht existiert, wie zum Beispiel auf einem anderen Server.

A. Wenden Sie ein Backup eines einzelnen Transaktionsprotokolls an

Das folgende Beispiel stellt die AdventureWorks2025 Datenbank aus einem vollständigen Datenbank-Backup auf einem Sicherungsmedium namens AdventureWorks2025_1 wieder her. Anschließend wird das erste Transaktionsprotokoll-Backup von einem Backup-Gerät namens AdventureWorks2025_log angewendet. Schließlich wird die Datenbank wiederhergestellt.

RESTORE DATABASE AdventureWorks2025
FROM AdventureWorks2025_1
WITH NORECOVERY;
GO

RESTORE LOG AdventureWorks2025
FROM AdventureWorks2025_log
WITH FILE = 1,
     NORECOVERY;
GO

RESTORE DATABASE AdventureWorks2025
WITH RECOVERY;
GO

B. Wenden Sie mehrere Transaktionsprotokoll-Backups an

Das folgende Beispiel stellt die AdventureWorks2025 Datenbank aus einem vollständigen Datenbank-Backup von einem Sicherungsgerät namens AdventureWorks2025_1 wieder her. Anschließend werden nacheinander die ersten drei Transaktionsprotokoll-Backups von einem Backup-Gerät namens AdventureWorks2025_log angewendet. Schließlich wird die Datenbank wiederhergestellt.

RESTORE DATABASE AdventureWorks2025
FROM AdventureWorks2025_1
WITH NORECOVERY;
GO

RESTORE LOG AdventureWorks2025
FROM AdventureWorks2025_log
WITH FILE = 1,
     NORECOVERY;
GO

RESTORE LOG AdventureWorks2025
FROM AdventureWorks2025_log
WITH FILE = 2,
     NORECOVERY;
GO

RESTORE LOG AdventureWorks2025
FROM AdventureWorks2025_log
WITH FILE = 3,
     NORECOVERY;
GO

RESTORE DATABASE AdventureWorks2025
WITH RECOVERY;
GO

PowerShell verwenden

Verwenden Sie das Restore-SqlDatabase Cmdlet und setzen Sie den Parameter -RestoreAction auf Log. Fügen Sie den Parameter -NoRecovery für jede Wiederherstellung in der Sequenz außer der letzten hinzu. Bei der letzten Protokollwiederherstellung -NoRecovery weglassen, um die Datenbank wiederherzustellen.

Hinweis

Diese Beispiele erfordern das SqlServer-Modul. Weitere Informationen finden Sie unter SQL Server PowerShell Provider.

Für die vollständige Syntax siehe Restore-SqlDatabase.

Beispiele (PowerShell)

Die folgenden Beispiele stellen die Backups in einer Instanz wieder her, in der die AdventureWorks2025-Datenbank nicht existiert, beispielsweise auf einem anderen Server.

A. Wenden Sie ein Backup eines einzelnen Transaktionsprotokolls an

Das folgende Beispiel stellt die AdventureWorks2025 Datenbank aus einem vollständigen Datenbank-Backup wieder her und belässt die Datenbank im Wiederherstellungszustand. Anschließend wird ein Transaktionsprotokoll-Backup angewendet und die Datenbank wiederhergestellt.

$instance = "Computer\Instance"

$fullRestore = @{
    ServerInstance = $instance
    Database       = "AdventureWorks2025"
    BackupFile     = "C:\Backup\AdventureWorks2025_full.bak"
    RestoreAction  = "Database"
    NoRecovery     = $true
}
Restore-SqlDatabase @fullRestore

$logRestore = @{
    ServerInstance = $instance
    Database       = "AdventureWorks2025"
    BackupFile     = "C:\Backup\AdventureWorks2025_log1.trn"
    RestoreAction  = "Log"
}
Restore-SqlDatabase @logRestore

B. Wenden Sie mehrere Transaktionsprotokoll-Backups an

Das folgende Beispiel stellt das vollständige Datenbank-Backup wieder her und wendet dann drei Transaktionsprotokoll-Backups nacheinander an. Jede Wiederherstellung außer der letzten verwendet -NoRecovery, sodass die letzte Logwiederherstellung die Datenbank wiederherstellt.

$instance = "Computer\Instance"
$logBackups = @(
    "C:\Backup\AdventureWorks2025_log1.trn",
    "C:\Backup\AdventureWorks2025_log2.trn",
    "C:\Backup\AdventureWorks2025_log3.trn"
)

$fullRestore = @{
    ServerInstance = $instance
    Database       = "AdventureWorks2025"
    BackupFile     = "C:\Backup\AdventureWorks2025_full.bak"
    RestoreAction  = "Database"
    NoRecovery     = $true
}
Restore-SqlDatabase @fullRestore

for ($i = 0; $i -lt $logBackups.Count; $i++) {
    $isLast = ($i -eq $logBackups.Count - 1)
    $logRestore = @{
        ServerInstance = $instance
        Database       = "AdventureWorks2025"
        BackupFile     = $logBackups[$i]
        RestoreAction  = "Log"
        NoRecovery     = -not $isLast
    }
    Restore-SqlDatabase @logRestore
}