Ausführen von Seitenwiederherstellungen

 Dieses Thema ist für SQL Server-Datenbanken relevant, für die das vollständige oder massenprotokollierte Wiederherstellungsmodell verwendet wird. Die Seitenwiederherstellung wird nur für Dateigruppen mit Lese-/Schreibzugriff unterstützt.

Das Ziel einer Seitenwiederherstellung besteht darin, eine oder mehrere beschädigte Seiten wiederherzustellen, ohne dazu die gesamte Datenbank wiederherstellen zu müssen. In der Regel wurden Seiten, die wiederhergestellt werden sollen, aufgrund eines Fehlers beim Zugriff auf die Seite als fehlerverdächtig gekennzeichnet. Fehlerverdächtige Seiten werden in der suspect_pages-Tabelle in der msdb-Datenbank identifiziert.

HinweisHinweis

Nicht für alle Fehler für einzelne Seiten ist eine Wiederherstellung erforderlich. In zwischengespeicherten Daten, z. B. einem sekundären Index, kann ein Problem auftreten, das durch das Neuberechnen der Daten behoben werden kann. Wenn der Datenbankadministrator beispielsweise einen sekundären Index löscht und erneut erstellt, werden die beschädigten Daten, obwohl sie repariert sind, nicht als solche in der suspect_pages-Tabelle angezeigt.

Mehrere Datenbankseiten können sofort wiederhergestellt werden. Die Protokolldateisicherungen werden auf alle Datenbankdateien angewendet, die eine wiederhergestellte Seite enthalten. Wie bei der Dateiwiederherstellung wird die Rollforwardgruppe auch bei der Seitenwiederherstellung durch einen einzelnen Protokollwiederholungsschritt weitergegeben.

Die Seitenwiederherstellung ist zum Reparieren einzelner beschädigter Seiten vorgesehen. Die Wiederherstellung weniger Einzelseiten erfolgt möglicherweise schneller als eine Dateiwiederherstellung, sodass sich die Menge der Daten reduziert, die während der Wiederherstellung offline sind. Wenn Sie jedoch mehrere Seiten in einer Datei wiederherstellen müssen, erweist sich die Wiederherstellung der vollständigen Datei in der Regel als effizienter. Wenn auf einem Gerät sehr viele Seiten beschädigt sind, kann das ein Hinweis auf einen Gerätefehler sein. In diesem Fall sollten Sie die Datei nach Möglichkeit an einem anderen Speicherort wiederherstellen und das Gerät reparieren.

Szenarien für die Seitenwiederherstellung

In allen Editionen von SQL Server 2005 und in höheren Versionen wird das Wiederherstellen von Seiten unterstützt, wenn die Datenbank offline ist (Offlineseitenwiederherstellung). In SQL Server 2005 Enterprise Edition und höheren Versionen bleibt die Datenbank online, wenn die Datenbank während einer Seitenwiederherstellung online ist. Die Wiederherstellung von Seiten, während die Datenbank online ist, wird als Onlineseitenwiederherstellung bezeichnet.

Es gibt die folgenden Szenarien für die Seitenwiederherstellung:

  • Offlineseitenwiederherstellung

    In SQL Server 2005 Standard, SQL Server 2005 Express Edition und SQL Server 2005 Workgroup sowie in höheren Versionen wird ausschließlich die Offlinewiederherstellung unterstützt. In SQL Server 2005 Enterprise Edition und höheren Versionen wird die Offlinewiederherstellung verwendet, wenn die Datenbank bereits offline ist. Bei einer Offlinewiederherstellung von Seiten ist die Datenbank offline, während beschädigte Seiten wiederhergestellt werden. Am Ende der Wiederherstellungssequenz wird die Datenbank wieder online geschaltet.

    Damit die Seitenwiederherstellung erfolgreich ist, müssen die wiederhergestellten Seiten zu einem Status wiederhergestellt werden, der mit der Datenbank konsistent ist. Es muss eine ununterbrochene Kette von Protokollsicherungen auf die letzte vollständige oder differenzielle Wiederherstellung angewendet werden, um die Dateigruppe, in der die Seite enthalten ist, auf den Stand der aktuellen Protokolldatei zu bringen.

  • Onlineseitenwiederherstellung

    In SQL Server 2005 Enterprise Edition und höheren Versionen werden Seitenwiederherstellungen, sofern die Bedingungen dies zulassen, automatisch online ausgeführt. In den meisten Fällen kann eine beschädigte Seite wiederhergestellt werden, wenn die Datenbank einschließlich der Dateigruppen, für die eine Seite wiederhergestellt wird, online bleibt. Die Onlinewiederherstellung von Seiten ist besonders nützlich, wenn Seiten durch Hardwarefehler beschädigt werden.

    In Einzelfällen ist für beschädigte Seiten eine Offlinewiederherstellung erforderlich. Beispielsweise können Schäden an bestimmten, wichtigen Seiten dazu führen, dass die Datenbank nicht gestartet wird. In diesen Fällen muss eine Offlinewiederherstellung verwendet werden.

    HinweisHinweis

    Bei einer Onlinewiederherstellung wird versucht, Metadaten zu aktualisieren. Bei dieser Aktualisierung können Fehler auftreten, wenn eine Seite mit wichtigen Daten beteiligt ist. Tritt bei einer Onlinewiederherstellung ein Fehler auf, muss die Wiederherstellung offline ausgeführt werden.

Bei der Seitenwiederherstellung werden die verbesserten Fehlerberichts- und Nachverfolgungsfunktionen (einschließlich Seitenprüfsummen) in SQL Server 2005 und höheren Versionen verwendet. Seiten, die aufgrund der Prüfsumme beschädigt sein müssen oder für die ein unterbrochener Schreibvorgang festgestellt wurde, beschädigte Seiten, können wiederhergestellt werden, indem diese Seiten in einer RESTORE-Anweisung angegeben werden. Die Seitenwiederherstellung ist für die Wiederherstellung einzelner beschädigter Seiten vorgesehen. Alle in der RESTORE-Anweisung angegebenen Seiten werden durch die entsprechende Seite aus dem zugehörigen Sicherungssatz ersetzt. Die wiederhergestellten Seiten müssen in einem Status wiederhergestellt werden, der mit dem Status der Datenbank übereinstimmt. Es werden nur explizit angegebene Seiten wiederhergestellt.

Einschränkungen der Seitenwiederherstellungen

Es können nur Datenbankseiten wiederhergestellt werden. Die Seitenwiederherstellung kann nicht zum Wiederherstellen der folgenden Elemente verwendet werden:

  • Transaktionsprotokoll

  • Zuordnungsseiten: GAM-Seiten (Global Allocation Map), SGAM-Seiten (Shared Global Allocation Map) und PFS-Seiten (Page Free Space). Weitere Informationen finden Sie unter Verwalten von Blockzuordnungen und freiem Speicherplatz.

  • Seite 0 von allen Datendateien (die Startseite der Datei)

  • Seite 1:9 (die Startseite der Datenbank)

  • Volltextkatalog

Wenn eine einzelne Seite nicht wiederhergestellt werden kann, müssen Sie die vorhandene vollständige Datenbanksicherung oder die vollständige Datei- oder Dateigruppensicherung verwenden.

HinweisHinweis

Wenn es sich bei der wiederhergestellten Seite um einen Spezialfall handelt (z. B. um Metadatenseiten), schlägt die Onlineseitenwiederherstellung fehl. Versuchen Sie in diesen Fällen, eine Offlineseitenwiederherstellung auszuführen.

Anforderungen für die Seitenwiederherstellung

Für Seitenwiederherstellungen gelten die folgenden Anforderungen:

  • Die Datenbanken müssen das Modell der vollständigen oder der massenprotokollierten Wiederherstellung verwenden. Beim Verwenden des massenprotokollierten Modells sind einige Besonderheiten zu beachten. Weitere Informationen finden Sie im folgenden Abschnitt.

  • Seiten in schreibgeschützten Dateigruppen können nicht wiederhergestellt werden. Wenn Sie versuchen, eine Dateigruppe als schreibgeschützt festzulegen, während gleichzeitig in der Dateigruppe eine Seitenwiederherstellung ausgeführt wird, tritt ein Fehler auf.

  • Die Wiederherstellungssequenz muss mit einer vollständigen Sicherung, einer Dateisicherung oder einer Dateigruppensicherung beginnen.

  • Für eine Seitenwiederherstellung muss eine fortlaufende Kette von Protokollsicherungen bis zur aktuellen Protokolldatei vorhanden sein, die lückenlos angewendet wurden, sodass die Datei mit der aktuellen Protokolldatei auf den neuesten Stand gebracht wird.

  • Wie bei einer Dateiwiederherstellungssequenz können Sie der Rollforwardgruppe in den einzelnen Wiederherstellungsschritten weitere Seiten hinzufügen.

  • Es kann nicht gleichzeitig eine Datenbanksicherung und eine Seitenwiederherstellung ausgeführt werden.

Modell der massenprotokollierten Wiederherstellung und Seitenwiederherstellung

Wenn für eine Datenbank das massenprotokollierte Wiederherstellungsmodell verwendet wird, gelten für die Seitenwiederherstellung die folgenden zusätzlichen Bedingungen:

  • Wenn die Dateigruppen- oder Seitendaten offline sind, gestaltet sich die Sicherung bei massenprotokollierten Daten problematisch, da die offline verfügbaren Daten nicht im Protokoll erfasst sind. Die Protokollsicherung kann durch jede beliebige Offlineseite verhindert werden. In diesen Fällen empfiehlt es sich, DBCC REPAIR zu verwenden, da dadurch weniger Daten verloren gehen als bei der Wiederherstellung der letzten Sicherung.

  • Wenn eine Protokollsicherung einer massenprotokollierten Datenbank eine beschädigte Seite erkennt, schlägt der Vorgang fehl, es sei denn, WITH CONTINUE_AFTER_ERROR wurde angegeben.

  • Die Seitenwiederherstellung ist bei der massenprotokollierten Wiederherstellung grundsätzlich nicht möglich.

    Die bewährte Methode zum Ausführen einer Seitenwiederherstellung besteht darin, für die Datenbank das vollständige Wiederherstellungsmodell festzulegen und eine Protokollsicherung zu versuchen. Wenn die Protokollsicherung ausgeführt werden kann, können Sie die Seitenwiederherstellung fortsetzen. Wenn die Protokollsicherung fehlschlägt, geht entweder die Arbeit seit der letzten Protokollsicherung verloren, oder Sie müssen versuchen, DBCC mit der Option REPAIR_ALLOW_DATA_LOSS auszuführen.

Grundlegende Seitenwiederherstellungssyntax

Zum Angeben einer Seite in einer RESTORE DATABASE-Anweisung benötigen Sie die Datei-ID der Datei, die die Seite enthält, und die Seiten-ID der Seite. Die erforderliche Syntax lautet wie folgt:

RESTORE DATABASE database_name

PAGE ='file:page [ ,...n ]' [ ,...n ]

FROM <backup_device> [ ,...n ]

WITH NORECOVERY

Weitere Informationen zu den in der Option PAGE verwendeten Parametern finden Sie unter RESTORE-Argumente (Transact-SQL). Weitere Informationen zur RESTORE DATABASE-Syntax finden Sie unter RESTORE (Transact-SQL).

Vorgehensweise für eine Seitenwiederherstellung

Eine Seitenwiederherstellung umfasst die folgenden grundlegenden Schritte:

  1. Rufen Sie die Seiten-IDs der wiederherzustellenden beschädigten Seiten ab. Bei Prüfsummenfehlern oder einem unterbrochenen Schreibvorgang wird die Seiten-ID zurückgegeben, sodass die zum Angeben der Seiten benötigten Informationen zur Verfügung stehen. Sie können die Seiten-ID einer beschädigten Seite mithilfe der folgenden Quellen ermitteln:

  2. Beginnen Sie die Seitenwiederherstellung mit einer vollständigen Datenbanksicherung, einer Dateisicherung oder einer Dateigruppensicherung, die die Seite enthält. Listen Sie die Seiten-IDs der wiederherzustellenden Seiten mit der PAGE-Klausel der RESTORE DATABASE-Anweisung auf.

    PAGE ='file:page [ ,...n ]' [ ,...n ]'

  3. Wenden Sie die aktuellsten differenziellen Sicherungen an.

  4. Wenden Sie die nachfolgenden Protokollsicherungen an.

  5. Erstellen Sie eine neue Protokollsicherung der Datenbank, die die letzte LSN der wiederhergestellten Seiten enthält, d. h. den Zeitpunkt, an dem die zuletzt wiederhergestellte Seite offline geschaltet wurde. Die letzte LSN, die im Rahmen der ersten Wiederherstellung innerhalb der Sequenz festgelegt wird, ist die Wiederholungsziel-LSN. Das Onlinerollforward der Datei, die die Seite enthält, kann an der Wiederholungsziel-LSN anhalten. Die aktuelle Wiederholungsziel-LSN einer Datei entnehmen Sie der redo_target_lsn-Spalte von sys.master_files. Weitere Informationen finden Sie unter sys.master_files (Transact-SQL).

  6. Stellen Sie die neue Protokollsicherung wieder her. Sobald diese neue Protokollsicherung angewendet wird, ist die Seitenwiederherstellung abgeschlossen, und die Seiten können verwendet werden.

HinweisHinweis

Diese Sequenz erfolgt analog zur Dateiwiederherstellungssequenz. Seiten- und Dateiwiederherstellungen können beide als Bestandteil derselben Sequenz ausgeführt werden.

Beispiel

Im folgenden Beispiel werden vier beschädigte Seiten der Datei B mit NORECOVERY wiederhergestellt. Anschließend werden zwei Protokollsicherungen mit NORECOVERY angewendet, gefolgt von der Sicherung des Protokollfragments, die mit RECOVERY wiederhergestellt wird.

Wichtiger HinweisWichtig

Wenn beschädigte Seiten kritische Datenbankmetadaten speichern, kann eine Offlineseitenwiederherstellungssequenz erforderlich sein. Zum Auszuführen einer Offlinewiederherstellung müssen Sie das Transaktionsprotokoll WITH NORECOVERY sichern.

Im folgenden Beispiel wird eine Onlinewiederherstellung ausgeführt. In diesem Beispiel lautet die Datei-ID der Datei B: 1. Die Seiten-IDs der beschädigten Seiten lauten 57, 202, 916 und 1016.

RESTORE DATABASE <database> PAGE='1:57, 1:202, 1:916, 1:1016'
   FROM <file_backup_of_file_B> 
   WITH NORECOVERY;
RESTORE LOG <database> FROM <log_backup> 
   WITH NORECOVERY;
RESTORE LOG <database> FROM <log_backup> 
   WITH NORECOVERY; 
BACKUP LOG <database> TO <new_log_backup> 
RESTORE LOG <database> FROM <new_log_backup> WITH RECOVERY;
GO