La mise en miroir de la base de données est une fonction du serveur SQL qui permet la récupération des données en cas d'urgence. Deux copies de la base de données sont gérées sur différentes instances de SQL Server - un serveur principal et un serveur miroir. En option, un serveur témoin est utilisé pour synchroniser les données entre le serveur principal et le serveur miroir.
Il arrive que des problèmes surviennent avec la base de données dans l'environnement miroir. Si la base de données du serveur principal tombe en panne, le serveur miroir peut être utilisé.
Toutefois, si la base de données principale est corrompue, vous pouvez recevoir des messages d'erreur tels que les suivants :
Msg 8978, niveau 16, statut 1, ligne 1
Erreur de table : Object ID 123490, Index ID 1. La page (n°1:1234) a des valeurs d'en-tête non valides. Le PageId dans l'en-tête de la page = (0:0).
Msg 8976, niveau 16, état 1, ligne 1
Erreur de table : Object ID 98721, index ID 0. Il manque à la page (3:5678) un lien avec la page précédente (2:3456). Le maillon de la chaîne est peut-être endommagé.
Ici, "Object ID" est l'ID de la table.
Pour connaître le nom de la table à l'aide de l'ID, vous pouvez exécuter la requête suivante :
DECLARE @object_id INT = 123490
SELECT OBJECT_NAME(@object_id) AS ObjectNameCopy Code
L'ID de l'objet est ici 123490.
Raisons de la corruption d'une base de données dans un environnement de mise en miroir
Une base de données peut être endommagée dans un environnement miroir SQL Server pour diverses raisons, par exemple
- Problèmes matériels sur le serveur principal ou le serveur miroir.
- Attaque par un virus ou un logiciel malveillant qui affecte le serveur principal, le serveur témoin ou le serveur miroir.
- Certains des serveurs utilisés pour la mise en miroir de la base de données SQL Server sont endommagés par des catastrophes naturelles.
Comment diagnostiquer une corruption de base de données dans un environnement SQL Server mirroring ?
Vous pouvez exécuter la commande DBCC CHECKDB comme indiqué ci-dessous pour détecter les erreurs de corruption dans la base de données.
DBCC CHECKDB('stellardb')Copier le code
La commande DBCC CHECKDB ci-dessus détectera les erreurs de corruption dans la base de données appelée stellardb.
Vous pouvez également consulter le journal des erreurs dans SQL Server. Pour ce faire, ouvrez SQL Server Management Studio (SSMS) et allez dans Administration > SQL Server Logs.
Comment réparer et remettre en état une base de données endommagée dans un environnement de mise en miroir ?
Si la base de données principale est corrompue, la fonction de mise en miroir de la base de données permet de remplacer les pages corrompues par la copie saine de la base de données partenaire. Par exemple, si le serveur principal présente des erreurs, la mise en miroir de la base de données reconnaît les pages corrompues et copie les pages saines de la base de données miroir afin de résoudre automatiquement le problème.
Voici quelques erreurs qui sont automatiquement corrigées dans l'environnement de mise en miroir de la base de données dans SQL Server :
Code d'erreur |
Message d'erreur |
823 |
Erreur causée par un échec du contrôle de redondance cyclique (CRC) du système d'exploitation. |
824 |
SQL Server a détecté une erreur E/S basée sur la cohérence logique. |
829 |
Une page a été marquée comme étant "en attente de récupération". |
Remarque : si une base de données de l'environnement de mise en miroir des bases de données tombe en panne, le serveur miroir ne devient pas le serveur principal. L'autre serveur est alors le serveur miroir.
Si la synchronisation ne résout pas le problème, vous devez remettre la base de données à partir de la dernière bonne sauvegarde. Pour ce faire, vous pouvez utiliser la commande RESTORE en T-SQL ou l'interface utilisateur dans SSMS.
Une fois la base de données remise en état, ouvrez SSMS, sélectionnez la base de données miroir, cliquez dessus avec le bouton droit de la souris et sélectionnez les propriétés. Sur la page Miroir, cliquez sur le bouton Basculement. La base de données miroir est alors convertie en base de données principale.
Si vous ne disposez pas d'une sauvegarde mise à jour ou saine, vous pouvez essayer de réparer la base de données corrompue à l'aide de la commande DBCC CHECKDB (voir l'exemple suivant).
USE master
GO
ALTER DATABASE stellardb SET SINGLE_USER
GO
DBCC CHECKDB (N'stellardb') WITH REPAIR_REBUILD
GO
ALTER DATABASE stellardb SET MULTI_USER
Code GOCopy
Et si rien ne marche ?
Si vous ne disposez pas d'une sauvegarde et que DBCC CHECKDB échoue, votre seule option est d'utiliser un logiciel tiers de réparation de bases de données SQL, par exemple Stellar Repair for MS SQL. Ce logiciel peut réparer les bases de données SQL Server endommagées et récupérer toutes les données. Il peut réparer les fichiers de données MDF et NDF.
Le logiciel peut remettre les objets sélectionnés ou tous les objets de la base de données. Il affiche également un aperçu de toutes les données récupérables. Vous pouvez remettre la base de données dans un nouveau fichier de base de données ou dans une base de données active. Vous pouvez également enregistrer les données remises dans un fichier Excel, CSV ou HTML.
Conclusion
La fonction de mise en miroir de la base de données dans le serveur SQL permet de rectifier diverses erreurs de corruption. Grâce à cette fonction, les pages corrompues sont remplacées par les pages saines de la base de données miroir. Dans cet article, nous avons expliqué les concepts de base de la mise en miroir des bases de données. Nous avons également indiqué comment vous pouvez diagnostiquer et réparer une base de données corrompue dans un environnement de mise en miroir du serveur SQL. Si les solutions natives ne fonctionnent pas, vous pouvez utiliser Stellar Repair for MS SQL - un logiciel spécialisé dans la réparation des bases de données SQL Server corrompues.