Freigeben über


Automatische Seitenreparatur während einer Datenbank-Spiegelungssitzung

Ab Version SQL Server 2008 versucht ein Datenbankspiegelungspartner, für beschädigte Seiten der Spiegeldatenbank eine automatische Wiederherstellung durchzuführen, indem bestimmte Fehlertypen behoben werden, die das Lesen einer Datenseite verhindern. Der Partner, der eine Seite nicht lesen kann, fordert vom anderen Partner eine neue Kopie an. Wenn die Anforderung erfolgreich ist, wird die nicht lesbare Seite durch die Kopie ersetzt. Dadurch kann der Fehler normalerweise behoben werden.

HinweisHinweis

Die automatische Seitenreparatur durch Datenbank-Spiegelungspartner unterscheidet sich von der DBCC-Reparatur. Bei einer automatischen Seitenreparatur bleiben alle Daten erhalten. Beim Beheben von Fehlern mithilfe der Option DBCC REPAIR_ALLOW_DATA_LOSS ist es jedoch möglicherweise erforderlich, dass einige Seiten (und somit Daten) gelöscht werden.

Fehlertypen, die zu einer automatischen Seitenreparatur führen

Bei der automatischen Seitenreparatur bei einer Datenbankspiegelung werden nur Seiten in einer Datendatei repariert, bei denen bei einem Vorgang einer der in der folgenden Tabelle aufgeführten Fehler aufgetreten ist.

Fehlernummer

Beschreibung

Instanzen, die zu einer automatischen Seitenreparatur führen

823

Maßnahme wird nur ergriffen, wenn das Betriebssystem eine zyklische Redundanzprüfung (CRC, Redundancy Check) ausgeführt hat, bei der in den Daten ein Fehler gefunden wurde.

ERROR_CRC. Der Wert des Betriebssystems für diesen Fehler ist 23.

824

Logische Fehler.

Logische Datenfehler, z. B. unterbrochener Schreibvorgang oder fehlerhafte Prüfsumme auf einer Seite.

829

Eine Seite wurde mit "Wiederherstellung steht aus" gekennzeichnet.

Alle.

Um aktuelle CRC-Fehler vom Typ 823 und Fehler vom Typ 824 anzuzeigen, rufen Sie die Tabelle suspect_pages in der msdb-Datenbank auf.

Seitentypen, die nicht automatisch repariert werden können

Die folgenden Typen von Steuerungsseiten können nicht mithilfe einer Datenbankspiegelung repariert werden:

  • Dateiheaderseite (Seiten-ID 0).

  • Seite 9 (die Startseite der Datenbank)

  • Zuordnungsseiten: GAM (Global Allocation Map)-Seiten, SGAM (Shared Global Allocation Map)-Seiten und PFS (Page Free Space)-Seiten.

Behandeln von E/A-Fehlern in der Prinzipaldatenbank

In der Prinzipaldatenbank wird die automatische Seitenreparatur nur ausgeführt, wenn sich der Knoten im Status SYNCHRONIZED befindet und der Prinzipalserver noch Protokolldatensätze an den Spiegelserver sendet. Im Prinzip werden bei einer automatischen Seitenreparatur die folgenden Aktionen in dieser Reihenfolge ausgeführt:

  1. Wenn in der Prinzipaldatenbank auf einer Datenseite ein Lesefehler auftritt, fügt der Prinzipalserver in die Tabelle suspect_pages eine Zeile mit dem entsprechenden Fehlerstatus ein. Der Prinzipalserver fordert dann eine Kopie der Seite vom Spiegelserver an. In der Anforderung werden die Seiten-ID und die LSN angegeben, die sich derzeit am Ende des geleerten Protokolls befindet. Die Seite wird mit Wiederherstellung steht aus gekennzeichnet. Das bedeutet, dass während der automatischen Seitenreparatur kein Zugriff auf die Seite möglich ist. Bei dem Versuch, während der Seitenreparatur auf die Seite zuzugreifen, wird der Fehler 829 (Wiederherstellung steht aus) ausgegeben.

  2. Nach Erhalt der Seitenanforderung wartet der Spiegelserver, bis das Protokoll bis zu der in der Anforderung angegebenen LSN wiederholt wurde. Dann versucht er, auf die Seite in der Spiegeldatenbank zuzugreifen. Wenn der Zugriff möglich ist, sendet der Spiegelserver eine Kopie der Seite an den Prinzipalserver. Andernfalls gibt der Spiegelserver einen Fehler an den Prinzipalserver zurück, und die automatische Seitenreparatur wird mit einem Fehler beendet.

  3. Der Prinzipalserver verarbeitet die Antwort, die die neue Kopie der Seite enthält.

  4. Nachdem mithilfe der automatischen Seitenreparatur eine fehlerverdächtige Seite repariert werden konnte, wird die Seite in der Tabelle suspect_pages als wiederhergestellt (event_type = 4) gekennzeichnet.

  5. Wenn durch den Seiten-E/A-Fehler verzögerte Transaktionen verursacht wurden, versucht der Prinzipalserver nach der Reparatur der Seite, diese Transaktionen aufzulösen.

Behandeln von E/A-Fehlern in der Spiegeldatenbank

E/A-Fehler auf Datenseiten, die in der Spiegeldatenbank auftreten, werden auf folgende Weise behandelt.

  1. Wenn der Spiegelserver beim Wiederholen eines Protokolldatensatzes einen oder mehrere Seiten-E/A-Fehler feststellt, wird die Spiegelungssitzung in den Status SUSPENDED versetzt. Zu diesem Zeitpunkt fügt der Spiegelserver eine Zeile mit dem entsprechenden Fehlerstatus in die Tabelle suspect_pages ein. Der Spiegelserver fordert dann eine Kopie der Seite vom Prinzipalserver an.

  2. Der Prinzipalserver versucht, auf die Seite in der Prinzipaldatenbank zuzugreifen. Wenn der Zugriff möglich ist, sendet der Prinzipalserver eine Kopie der Seite an den Spiegelserver.

  3. Erhält der Spiegelserver Kopien aller angeforderten Seiten, unternimmt er den Versuch, die Spiegelungssitzung fortzusetzen. Wenn eine fehlerverdächtige Seite mithilfe der automatischen Seitenreparatur repariert werden konnte, wird die Seite in der Tabelle suspect_pages als wiederhergestellt (event_type = 5) gekennzeichnet.

    Wenn ein Spiegelserver eine vom Prinzipalserver angeforderte Seite nicht erhält, tritt bei der automatischen Seitenreparatur ein Fehler auf, und die Spiegelungssitzung bleibt angehalten. Wenn die Spiegelungssitzung manuell fortgesetzt wird, werden die beschädigten Seiten während der nächsten Synchronisierungsphase erneut gefunden.

Bewährte Methode für Entwickler

Eine automatische Seitenreparatur ist ein asynchroner Prozess, der im Hintergrund ausgeführt wird. Daher tritt auch bei einer gespiegelten Datenbank bei einem Datenbankvorgang, bei dem eine nicht lesbare Seite angefordert wird, ein Fehler auf, und es wird der Fehlercode für den Zustand zurückgegeben, der den Fehler ausgelöst hat. Beim Entwickeln einer Anwendung für eine gespiegelte Datenbank sollten Sie Ausnahmen für fehlerhafte Vorgänge abfangen. Wenn der SQL Server-Fehlercode 823, 824 oder 829 lautet, sollten Sie den Vorgang später wiederholen.