Réparation de page automatique pendant une session de mise en miroir de bases de données

À partir de SQL Server 2008, un serveur partenaire de mise en miroir de bases de données tente de récupérer automatiquement à partir de pages endommagées sur la base de données miroir en résolvant certains types d'erreurs qui empêchent la lecture d'une page de données. Un serveur partenaire qui ne peut pas lire une page demande une copie actualisée à un autre serveur partenaire. Si cette demande réussit, la page illisible est remplacée par la copie, ce qui permet généralement de résoudre l'erreur.

[!REMARQUE]

La réparation de page automatique par les serveurs partenaires de mise en miroir de bases de données diffère de la réparation DBCC. Lors d'une réparation de page automatique, toutes les données sont conservées. 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.

Types d'erreur qui provoquent une tentative de réparation de page automatique

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.

Numéro d'erreur

Description

Instances qui provoquent une tentative de réparation de page automatique

823

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.

ERROR_CRC. La valeur du système d'exploitation pour cette erreur est 23.

824

Erreurs logiques.

Erreurs de données logiques, telles que des erreurs d'écriture ou une somme de contrôle de page défectueuse.

829

Une page a été marquée comme en attente de restauration.

Toutes

Pour consulter les erreurs CRC 823 et les erreurs 824 récentes, consultez la table suspect_pages dans la base de données msdb.

Types de page qui ne peuvent pas être réparés automatiquement

Les types de page de contrôle suivants ne peuvent pas être réparés par la mise en miroir de bases de données :

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

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

  • Pages d'allocation : pages Global Allocation Map (GAM), pages Shared Global Allocation Map (SGAM) et pages Page Free Space (PFS).

Gestion des erreurs d'E/S sur la base de données principale

Sur la base de données principale, la réparation de page automatique est lancée uniquement lorsque le nœud est dans l'état SYNCHRONIZED et que le serveur principal envoie encore des enregistrements de journal au serveur miroir. La séquence de base pour les actions relatives à une tentative de réparation de page automatique est la suivante :

  1. Lorsqu'une erreur de lecture se produit sur une page de données dans la base de données principale, le serveur principal insère une ligne dans la table suspect_pages avec l'état d'erreur approprié. Le serveur principal demande ensuite une copie de la page au serveur miroir. 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é. La page est marquée comme restauration en attente, elle est par conséquent inaccessible pendant la tentative de réparation de page automatique. Les tentatives d'accès à cette page lors de la tentative de réparation échouent avec une erreur 829 (restauration en attente).

  2. Après avoir reçu la demande de page, le serveur miroir attend que le journal soit reconstruit jusqu'au LSN spécifié dans la demande. Ensuite, le serveur miroir tente d'accéder à la page dans la base de données miroir. Si la page est accessible, le serveur miroir envoie la copie de la page au serveur principal. Dans le cas contraire, le serveur miroir retourne une erreur au serveur principal et la tentative de réparation de page automatique échoue.

  3. Le serveur principal traite la réponse qui contient la copie actualisée de la page.

  4. Après la réussite d'une tentative de réparation de page automatique d'une page suspecte, la page est marquée comme restaurée (event_type = 4) dans la table suspect_pages.

  5. Si l'erreur d'E/S de la page a provoqué des transactions différées, après avoir réparé la page, le serveur principal tente de résoudre ces transactions.

Gestion des erreurs d'E/S sur la base de données miroir

Les erreurs d'E/S sur des pages de données qui se produisent sur la base de données miroir sont traitées de la manière suivante.

  1. 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 en état SUSPENDED. Le serveur miroir insère alors une ligne dans la table suspect_pages avec l'état d'erreur approprié. Le serveur miroir demande ensuite une copie de la page au serveur principal.

  2. Le serveur principal tente d'accéder à la page dans la base de données principale. Si la page est accessible, le serveur principal envoie la copie de celle-ci au serveur miroir.

  3. Si le serveur miroir reçoit des copies de chaque page demandée, il tente de rétablir la session de mise en miroir. Si une tentative de réparation de page automatique d'une page suspecte réussit, la page est marquée comme restaurée (event_type = 4) dans la table suspect_pages.

    Si un serveur miroir ne reçoit pas une page qu'il a demandée au serveur principal, la tentative de réparation de page automatique échoue et la session de mise en miroir reste suspendue. Si la session de mise en miroir est rétablie manuellement, les pages endommagées seront à nouveau renvoyées lors de la phase de synchronisation.

Recommandations des développeurs

Une réparation de page automatique est un processus asynchrone qui s'exécute en arrière-plan. Par conséquent, même pour une base de données mise en miroir, une opération de base de données qui demande des pages illisibles échoue et renvoie le code d'erreur correspondant à la condition ayant provoqué l'échec. Lorsque vous développez une application pour une base de données mise en miroir, vous devez intercepter les exceptions pour les opérations ayant échoué. Si le code d'erreur SQL Server est 823, 824 ou 829, vous devez retenter l'opération ultérieurement.

Historique des modifications

Mise à jour du contenu

Suppression de l'instruction incorrecte indiquant que la réparation de page automatique est limitée à SQL Server 2008 Enterprise. SQL Server 2008 Standard prend également en charge la réparation de page automatique.