Réparation de page automatique (groupes de disponibilité : mise en miroir de bases de données)Automatic Page Repair (Availability Groups: Database Mirroring)

La réparation de page automatique est prise en charge par la mise en miroir de bases de données et par Groupes de disponibilité Always OnAlways On availability groups.Automatic page repair is supported by database mirroring and by Groupes de disponibilité Always OnAlways On availability groups. Lorsque certains types d'erreurs endommagent une page et la rendent illisible, un serveur partenaire de mise en miroir de bases de données (principal ou miroir) ou un réplica de disponibilité (principal ou secondaire) tente de récupérer automatiquement la page.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. Le serveur partenaire/réplica qui ne peut pas lire la page demande une nouvelle copie de la page auprès de son serveur partenaire ou d'un autre réplica.The partner/replica that cannot read the page requests a fresh copy of the page from its partner or from another replica. Si cette demande réussit, la page illisible est remplacée par la copie lisible, ce qui permet généralement de résoudre l'erreur.If this request succeeds, the unreadable page is replaced by the readable copy, and this usually resolves the error.

En règle générale, la mise en miroir de bases de données et Groupes de disponibilité Always OnAlways On availability groups gèrent les erreurs d'E/S de manières équivalentes.Generally speaking, database mirroring and Groupes de disponibilité Always OnAlways On availability groups handle I/O errors in equivalent ways. Les quelques différences sont présentées ici de manière explicite.The few differences are explicitly called out here.

Note

La réparation de page automatique diffère de la réparation DBCC.Automatic page repair differs from DBCC repair. Lors d'une réparation de page automatique, toutes les données sont conservées.All of the data is preserved by an automatic page repair. Cependant, la correction des erreurs à l'aide de l'option DBCC REPAIR_ALLOW_DATA_LOSS peut nécessiter la suppression de certaines pages et, par conséquent, de certaines données.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

La réparation de page automatique de la mise en miroir de bases de données tente de réparer uniquement les pages situées dans un fichier de données sur lequel une opération a échoué en raison de l'une des erreurs répertoriées dans le tableau suivant.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.

Numéro d'erreurError number DescriptionDescription Instances qui provoquent une tentative de réparation de page automatiqueInstances that cause automatic page-repair attempt
823823 Cette action est mise en œuvre uniquement si le système d'exploitation a effectué un contrôle de redondance cyclique (CRC) qui a échoué sur les données.Action is taken only if the operating system performed a cyclic redundancy check (CRC) that failed on the data. ERROR_CRC.ERROR_CRC. La valeur du système d'exploitation pour cette erreur est 23.The operating-system value for this error is 23.
824824 Erreurs logiques.Logical errors. Erreurs de données logiques, telles que des erreurs d'écriture ou une somme de contrôle de page défectueuse.Logical data errors, such as torn write or bad page checksum.
829829 Une page a été marquée comme en attente de restauration.A page has been marked as restore pending. ToutesAll.

Pour consulter les erreurs CRC 823 et les erreurs 824 récentes, consultez la table suspect_pages dans la base de données msdb .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

La réparation de page automatique ne peut pas réparer les types de page de contrôle suivants :Automatic page repair cannot repair the following control page types:

  • Page d'en-tête de fichier (ID de page 0).File header page (page ID 0).

  • Page 9 (page de démarrage de la base de données).Page 9 (the database boot page).

  • Pages d'allocation : pages GAM (Global Allocation Map), pages SGAM(Shared Global Allocation Map) et pages PFS (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

Sur le principal/la base de données primaire, la réparation de page automatique est lancée uniquement lorsque la base de données est dans l'état SYNCHRONIZED et que le principal/la base de données primaire envoie encore des enregistrements de journal au serveur miroir/secondaire pour la base de données.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. La séquence de base pour les actions relatives à une tentative de réparation de page automatique est la suivante :The basic sequence of actions in an automatic page-repair attempt are as follows:

  1. Quand une erreur de lecture se produit sur une page de données sur le principal/la base de données primaire, ce dernier ou cette dernière insère une ligne dans la table suspect_pages avec l’état d’erreur approprié.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. Pour la mise en miroir de bases de données, le principal demande ensuite une copie de la page au serveur miroir.For database mirroring, the principal then requests a copy of the page from the mirror. Pour Groupes de disponibilité Always OnAlways On availability groups, le principal diffuse la demande à tous les serveurs secondaires et obtient la page du premier serveur qui répond.For Groupes de disponibilité Always OnAlways On availability groups, the primary broadcasts the request to all the secondaries and gets the page from the first to respond. La demande spécifie l'ID de page et le numéro séquentiel dans le journal (Log Sequence Number ou LSN) se trouvant actuellement à la fin du journal vidé.The request specifies the page ID and the LSN that is currently at the end of the flushed log. La page est marquée comme restauration en attente,The page is marked as restore pending. elle est par conséquent inaccessible pendant la tentative de réparation de page automatique.This makes it inaccessible during the automatic page-repair attempt. Les tentatives d'accès à cette page lors de la tentative de réparation échouent avec une erreur 829 (restauration en attente).Attempts to access this page during the repair attempt will fail with error 829 (restore pending).

  2. Après avoir reçu la demande de page, le serveur miroir/secondaire attend que le journal soit reconstruit jusqu'au LSN spécifié dans la demande.After receiving the page request, the mirror/secondary waits until it has redone the log up to the LSN specified in the request. Ensuite, le serveur miroir/secondaire tente d'accéder à la page dans sa copie de la base de données.Then, the mirror/secondary tries to access the page in its copy of the database. Si la page est accessible, le serveur miroir/secondaire envoie la copie de la page au principal/à la base de données primaire.If the page can be accessed, the mirror/secondary sends the copy of the page to the principal/primary. Dans le cas contraire, le serveur miroir/secondaire retourne une erreur au principal/à la base de données primaire et la tentative de réparation de page automatique échoue.Otherwise, the mirror/secondary returns an error to the principal/primary, and the automatic page-repair attempt fails.

  3. Le principal/la base de données primaire traite la réponse qui contient la copie actualisée de la page.The principal/primary processes the response that contains the fresh copy of the page.

  4. Si la tentative de réparation automatique d’une page suspecte réussit, la page est marquée dans la table suspect_pages comme restaurée (event_type = 5).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. Si l’erreur d’E/S de la page a provoqué des transactions différées, après la réparation de la page, le principal/la base de données primaire tente de résoudre ces transactions.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

Les erreurs d'E/S sur les pages de données qui se produisent sur la base de données miroir/secondaire sont généralement gérées de la même manière par la mise en miroir de bases de données et par Groupes de disponibilité Always OnAlways On availability groups.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 Groupes de disponibilité Always OnAlways On availability groups.

  1. Avec la mise en miroir de bases de données, si le serveur miroir rencontre une ou plusieurs erreurs d'E/S de page lorsqu'il reconstruit un enregistrement de journal, la session de mise en miroir passe à l'état SUSPENDED.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. Avec Groupes de disponibilité Always OnAlways On availability groups, si un réplica secondaire rencontre une ou plusieurs erreurs d'E/S de page lorsqu'il reconstruit un enregistrement de journal, la base de données secondaire passe à l'état SUSPENDED.With Groupes de disponibilité Always OnAlways 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. Le serveur miroir/secondaire insère alors une ligne dans la table suspect_pages avec l’état d’erreur approprié.At that point, the mirror/secondary inserts a row in the suspect_pages table with the appropriate error status. Le serveur miroir/secondaire demande ensuite une copie de la page au principal/à la base de données primaire.The mirror/secondary then requests a copy of the page from the principal/primary.

  2. Le principal/la base de données primaire tente d'accéder à la page dans sa copie de la base de données.The principal/primary tries to access the page in its copy of the database. Si la page est accessible, le principal/la base de données primaire envoie la copie de la page au serveur miroir/secondaire.If the page can be accessed, the principal/primary sends the copy of page to the mirror/secondary.

  3. Si le serveur miroir/secondaire reçoit des copies de chaque page demandée, il tente de rétablir la session de mise en miroir.If the mirror/secondary receives copies of every page it has requested, the mirror/secondary tries to resume the mirroring session. Si la tentative de réparation automatique d’une page suspecte réussit, la page est marquée dans la table suspect_pages comme restaurée (event_type = 4).If an automatic page-repair attempt fixes a suspect page, the page is marked in the suspect_pages table as restored (event_type = 4).

    Si un serveur miroir/secondaire ne reçoit pas une page qu'il a demandée au principal/à la base de données primaire, la tentative de réparation de page automatique échoue.If a mirror/secondary does not receive a page that it requested from the principal/primary, the automatic page-repair attempt fails. Avec la mise en miroir de bases de données, la session de mise en miroir reste suspendue.With database mirroring, the mirroring session remains suspended. Avec Groupes de disponibilité Always OnAlways On availability groups, la base de données secondaire reste suspendue.With Groupes de disponibilité Always OnAlways On availability groups, the secondary database remains suspended. Si la session de mise en miroir ou la base de données secondaire est rétablie manuellement, les pages endommagées sont à nouveau renvoyées lors de la phase de synchronisation.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

Une réparation de page automatique est un processus asynchrone qui s'exécute en arrière-plan.An automatic page repair is an asynchronous process that runs in the background. Par conséquent, une opération de base de données qui demande une page illisible échoue et renvoie le code d'erreur correspondant à la condition ayant provoqué l'échec.Therefore, a database operation that requests an unreadable page fails and returns the error code for whatever condition caused the failure. Lorsque vous développez une application pour une base de données mise en miroir ou une base de données de disponibilité, vous devez intercepter les exceptions pour les opérations ayant échoué.When developing an application for a mirrored database or an availability database, you should intercept exceptions for failed operations. Si le code d'erreur SQL ServerSQL Server est 823, 824 ou 829, vous devez retenter l'opération ultérieurement.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

Les vues de gestion dynamique suivantes retournent les lignes correspondant aux dernières tentatives de réparation de page automatique sur une base de données de disponibilité ou une base de données mise en miroir spécifique, avec un maximum de 100 lignes par base de données.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.

  • Groupes de disponibilité Always On :Always On Availability Groups:

    sys.dm_hadr_auto_page_repair (Transact-SQL)sys.dm_hadr_auto_page_repair (Transact-SQL)

    Retourne une ligne pour chaque tentative de réparation de page automatique sur une base de données de disponibilité sur un réplica de disponibilité hébergé pour un groupe de disponibilité quelconque par l'instance de serveur.Returns a row for every automatic page-repair attempt on any availability database on an availability replica that is hosted for any availability group by the server instance.

  • Mise en miroir de bases de données :Database mirroring:

    sys.dm_db_mirroring_auto_page_repair (Transact-SQL)sys.dm_db_mirroring_auto_page_repair (Transact-SQL)

    Retourne une ligne pour chaque tentative de réparation de page automatique sur toute base de données mise en miroir sur l'instance de serveur.Returns a row for every automatic page-repair attempt on any mirrored database on the server instance.

Voir aussiSee Also

Gérer la table suspect_pages (SQL Server) Manage the suspect_pages Table (SQL Server)
Vue d’ensemble des groupes de disponibilité Always On (SQL Server) Overview of Always On Availability Groups (SQL Server)
Mise en miroir de bases de données (SQL Server) Database Mirroring (SQL Server)