Automatische Seitenreparatur (Verfügbarkeitsgruppen: Datenbankspiegelung)Automatic Page Repair (Availability Groups: Database Mirroring)

Automatische Seitenreparatur wird von Datenbankspiegelung und AlwaysOn-VerfügbarkeitsgruppenAlways On availability groupsunterstützt.Automatic page repair is supported by database mirroring and by AlwaysOn-VerfügbarkeitsgruppenAlways On availability groups. Wenn bestimmte Fehlertypen eine Seite beschädigen und sie unlesbar machen, versucht ein Datenbank-Spiegelungspartner (Prinzipal oder Spiegel) oder ein Verfügbarkeitsreplikat (primär oder sekundär), die Seite automatisch wiederherzustellen.After certain types of errors corrupt a page, making it unreadable, a database mirroring partner (principal or mirror) or an availability replica (primary or secondary) attempts to automatically recover the page. Der Partner/das Replikat, der/das die Seite nicht lesen kann, fordert eine neue Kopie der Seite von seinem Partner oder einem anderen Replikat an.The partner/replica that cannot read the page requests a fresh copy of the page from its partner or from another replica. Wenn die Anforderung erfolgreich ist, wird die nicht lesbare Seite durch die lesbare Kopie ersetzt. Dadurch wird der Fehler normalerweise behoben.If this request succeeds, the unreadable page is replaced by the readable copy, and this usually resolves the error.

Im Allgemeinen behandeln Datenbankspiegelung und AlwaysOn-VerfügbarkeitsgruppenAlways On availability groups E/A-Fehler auf dieselbe Weise.Generally speaking, database mirroring and AlwaysOn-VerfügbarkeitsgruppenAlways On availability groups handle I/O errors in equivalent ways. Die wenigen Unterschiede werden hier explizit beschrieben.The few differences are explicitly called out here.

Hinweis

Die automatische Seitenreparatur unterscheidet sich von der DBCC-Reparatur.Automatic page repair differs from DBCC repair. Bei einer automatischen Seitenreparatur bleiben alle Daten erhalten.All of the data is preserved by an automatic page repair. 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.In contrast, correcting errors by using the DBCC REPAIR_ALLOW_DATA_LOSS option might require that some pages, and therefore data, be deleted.

Error Types That Cause an Automatic Page-Repair Attempt Error Types That Cause an Automatic Page-Repair Attempt

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.Database mirroring automatic page repair tries to repair only pages in a data file on which an operation has failed for one of the errors listed in the following table.

FehlernummerError number BeschreibungDescription Instanzen, die zu einer automatischen Seitenreparatur führenInstances that cause automatic page-repair attempt
823823 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.Action is taken only if the operating system performed a cyclic redundancy check (CRC) that failed on the data. ERROR_CRC.ERROR_CRC. Der Wert des Betriebssystems für diesen Fehler ist 23.The operating-system value for this error is 23.
824824 Logische Fehler.Logical errors. Logische Datenfehler, z. B. unterbrochener Schreibvorgang oder fehlerhafte Prüfsumme auf einer Seite.Logical data errors, such as torn write or bad page checksum.
829829 Eine Seite wurde mit "Wiederherstellung steht aus" gekennzeichnet.A page has been marked as restore pending. Alle.All.

Um aktuelle CRC-Fehler vom Typ 823 und Fehler vom Typ 824 anzuzeigen, rufen Sie die Tabelle suspect_pages in der msdb -Datenbank auf.To view recent 823 CRC errors and 824 errors, see the suspect_pages table in the msdb database.

Page Types That Cannot Be Automatically Repaired Page Types That Cannot Be Automatically Repaired

Die automatische Seitenreparatur kann die folgenden Steuerelementseitentypen nicht reparieren:Automatic page repair cannot repair the following control page types:

  • Dateiheaderseite (Seiten-ID 0).File header page (page ID 0).

  • Seite 9 (die Startseite der Datenbank)Page 9 (the database boot page).

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

Handling I/O Errors on the Principal/Primary Database Handling I/O Errors on the Principal/Primary Database

In der Prinzipaldatenbank/primären Datenbank wird die automatische Seitenreparatur nur ausgeführt, wenn sich die Datenbank im Status SYNCHRONIZED befindet und der Prinzipalserver/primäre Server noch Protokolldatensätze für die Datenbank an den Spiegelserver/sekundären Server sendet.On the principal/primary database, automatic page repair is tried only when the database is in the SYNCHRONIZED state and the principal/primary is still sending log records for the database to the mirror/secondary. Im Prinzip werden bei einer automatischen Seitenreparatur die folgenden Aktionen in dieser Reihenfolge ausgeführt:The basic sequence of actions in an automatic page-repair attempt are as follows:

  1. Wenn in der Prinzipaldatenbank/primären Datenbank auf einer Datenseite ein Lesefehler auftritt, fügt der Prinzipalserver/primäre Server in die Tabelle suspect_pages eine Zeile mit dem entsprechenden Fehlerstatus ein.When a read error occurs on a data page in the principal/primary database, the principal/primary inserts a row in the suspect_pages table with the appropriate error status. Zur Datenbankspiegelung fordert der Prinzipalserver dann eine Kopie der Seite vom Spiegelserver aus an.For database mirroring, the principal then requests a copy of the page from the mirror. Für AlwaysOn-VerfügbarkeitsgruppenAlways On availability groupsüberträgt der primäre Server die Anforderung an alle sekundären Server und ruft die Seite vom Server ab, der als Erster antwortet.For AlwaysOn-VerfügbarkeitsgruppenAlways On availability groups, the primary broadcasts the request to all the secondaries and gets the page from the first to respond. In der Anforderung werden die Seiten-ID und die LSN angegeben, die sich derzeit am Ende des geleerten Protokolls befindet.The request specifies the page ID and the LSN that is currently at the end of the flushed log. Die Seite wird mit Wiederherstellung steht ausgekennzeichnet.The page is marked as restore pending. Das bedeutet, dass während der automatischen Seitenreparatur kein Zugriff auf die Seite möglich ist.This makes it inaccessible during the automatic page-repair attempt. Bei dem Versuch, während der Seitenreparatur auf die Seite zuzugreifen, wird der Fehler 829 (Wiederherstellung steht aus) ausgegeben.Attempts to access this page during the repair attempt will fail with error 829 (restore pending).

  2. Nach Erhalt der Seitenanforderung wartet der Spiegelserver/sekundäre Server, bis das Protokoll bis zu der in der Anforderung angegebenen LSN wiederholt wurde.After receiving the page request, the mirror/secondary waits until it has redone the log up to the LSN specified in the request. Dann versucht der Spiegelserver/sekundäre Server die Seite in seiner Kopie der Datenbank aufzurufen.Then, the mirror/secondary tries to access the page in its copy of the database. Wenn der Zugriff möglich ist, sendet der Spiegelserver/sekundäre Server die Kopie der Seite an den Prinzipalserver/primären Server.If the page can be accessed, the mirror/secondary sends the copy of the page to the principal/primary. Andernfalls gibt der Spiegelserver/sekundäre Server einen Fehler an den Prinzipalserver/primären Server zurück, und die automatische Seitenreparatur schlägt fehl.Otherwise, the mirror/secondary returns an error to the principal/primary, and the automatic page-repair attempt fails.

  3. Der Prinzipalserver/primäre Server verarbeitet die Antwort, die die neue Kopie der Seite enthält.The principal/primary processes the response that contains the fresh copy of the page.

  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 = 5) gekennzeichnet.After the automatic page-repair attempt fixes a suspect page, the page is marked in the suspect_pages table as restored (event_type = 5).

  5. Wenn durch den Seiten-E/A-Fehler verzögerte Transaktionenverursacht wurden, versucht der Prinzipalserver/primäre Server nach der Reparatur der Seite, diese Transaktionen aufzulösen.If the page I/O error caused any deferred transactions, after you repair the page, the principal/primary tries to resolve those transactions.

Handling I/O Errors on the Mirror/Secondary Database Handling I/O Errors on the Mirror/Secondary Database

E/A-Fehler auf Datenseiten, die auf der Spiegeldatenbank/sekundären Datenbank auftreten, werden im Allgemeinen von Datenbankspiegelung und AlwaysOn-VerfügbarkeitsgruppenAlways On availability groupsauf dieselbe Weise behandelt.I/O errors on data pages that occur on the mirror/secondary database are handled in generally the same way by database mirroring and by AlwaysOn-VerfügbarkeitsgruppenAlways On availability groups.

  1. Falls der Spiegel bei der Datenbankspiegelung beim Wiederholen eines Protokolldatensatzes einen oder mehrere Seiten-E/A-Fehler feststellt, wird die Spiegelungssitzung in den Status SUSPENDED versetzt.With database mirroring, if the mirror encounters one or more page I/O errors when it redoes a log record, the mirroring session enters the SUSPENDED state. Falls ein sekundäres Replikat bei AlwaysOn-VerfügbarkeitsgruppenAlways On availability groupsbeim Wiederholen eines Protokolldatensatzes ein oder mehrere Seiten-E/A-Fehler feststellt, wird die sekundäre Datenbank in den Status SUSPENDED versetzt.With AlwaysOn-VerfügbarkeitsgruppenAlways On availability groups, if a secondary replica encounters one or more page I/O errors when it redoes a log record, the secondary database enters the SUSPENDED state. Zu diesem Zeitpunkt fügt der Spiegelserver/sekundäre Server in die Tabelle suspect_pages eine Zeile mit dem entsprechenden Fehlerstatus ein.At that point, the mirror/secondary inserts a row in the suspect_pages table with the appropriate error status. Der Spiegelserver/sekundäre Server fordert dann eine Kopie der Seite vom Prinzipalserver/primären Server an.The mirror/secondary then requests a copy of the page from the principal/primary.

  2. Der Prinzipalserver/primäre Server versucht, die Seite in seiner Kopie der Datenbank aufzurufen.The principal/primary tries to access the page in its copy of the database. Wenn der Zugriff möglich ist, sendet der Prinzipalserver/primäre Server die Kopie der Seite an den Spiegelserver/sekundären Server.If the page can be accessed, the principal/primary sends the copy of page to the mirror/secondary.

  3. Erhält der Spiegelserver/sekundäre Server Kopien aller angeforderten Seiten, unternimmt er den Versuch, die Spiegelungssitzung fortzusetzen.If the mirror/secondary receives copies of every page it has requested, the mirror/secondary tries to resume the mirroring session. Wenn 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.If an automatic page-repair attempt fixes a suspect page, the page is marked in the suspect_pages table as restored (event_type = 4).

    Wenn ein Spiegelserver/sekundärer Server eine vom Prinzipalserver/primären Server angeforderte Seite nicht erhält, tritt bei der automatischen Seitenreparatur ein Fehler auf.If a mirror/secondary does not receive a page that it requested from the principal/primary, the automatic page-repair attempt fails. Bei der Datenbankspiegelung bleibt die Spiegelungssitzung angehalten.With database mirroring, the mirroring session remains suspended. Bei AlwaysOn-VerfügbarkeitsgruppenAlways On availability groupsbleibt die sekundäre Datenbank angehalten.With AlwaysOn-VerfügbarkeitsgruppenAlways On availability groups, the secondary database remains suspended. Wenn die Spiegelungssitzung oder sekundäre Datenbank manuell fortgesetzt wird, werden die beschädigten Seiten während der nächsten Synchronisierungsphase erneut gefunden.If the mirroring session or secondary database is resumed manually, the corrupted pages will be hit again during the synchronization phase.

Developer Best Practice Developer Best Practice

Eine automatische Seitenreparatur ist ein asynchroner Prozess, der im Hintergrund ausgeführt wird.An automatic page repair is an asynchronous process that runs in the background. Daher tritt bei einem Datenbankvorgang, bei dem eine nicht lesbare Seite angefordert wird, ein Fehler auf, und der Fehlercode für den Zustand wird zurückgegeben, der den Fehler ausgelöst hat.Therefore, a database operation that requests an unreadable page fails and returns the error code for whatever condition caused the failure. Beim Entwickeln einer Anwendung für eine gespiegelte Datenbank oder eine Verfügbarkeitsdatenbank sollten Sie Ausnahmen für fehlerhafte Vorgänge abfangen.When developing an application for a mirrored database or an availability database, you should intercept exceptions for failed operations. Wenn der SQL ServerSQL Server -Fehlercode 823, 824 oder 829 lautet, sollten Sie den Vorgang später wiederholen.If the SQL ServerSQL Server error code is 823, 824, or 829, you should retry the operation later.

How To: View Automatic Page-Repair Attempts How To: View Automatic Page-Repair Attempts

Die folgenden dynamischen Verwaltungssichten geben Zeilen für die letzten automatischen Seitenreparatur-Versuche auf einer angegebenen Verfügbarkeitsdatenbank oder gespiegelten Datenbank mit einem Maximum von 100 Zeilen pro Datenbank zurück.The following dynamic management views return rows for the latest automatic page-repair attempts on a given availability database or mirrored database, with a maximum of 100 rows per database.

Siehe auchSee Also

Verwalten der suspect_pages-Tabelle (SQL Server) Manage the suspect_pages Table (SQL Server)
Übersicht über Always On-Verfügbarkeitsgruppen (SQL Server) Overview of Always On Availability Groups (SQL Server)
Datenbankspiegelung (SQL Server) Database Mirroring (SQL Server)