Résumé: Dans ce blog, nous allons discuter de l’erreur CRC ( Contrôle de redondance cyclique ) de la base de données SQL. Nous aborderons également les raisons possibles de cette erreur, ainsi que les scénarios dans lesquels vous pouvez rencontrer l’erreur CRC. Enfin, nous examinerons quelques solutions pour corriger l’erreur CRC SQL. Vous pouvez également essayer le logiciel Stellar Repair for MS SQL pour réparer et restaurer votre base de données SQL en quelques étapes simples, sans avoir à dépenser plusieurs centaines d’heures de travail et de ressources informatiques.
Les opérations de SQL Server dépendent fortement du sous-système de disques. Il s’agit sans aucun doute d’un composant clé des performances et de la disponibilité de SQL Server en tant que stockage. Parfois, un problème avec le sous-système E/S peut conduire à une erreur CRC ( Contrôle de Redondance Cyclique ). Le message d’erreur se lit comme suit:
Erreur rencontrée : Msg 823, Niveau 24, Etat 2, Ligne 1
Erreur E/S 23(Erreur de données (contrôle de redondance cyclique).) détectée pendant la lecture à l’offset 0x000001ac1c4000 en fichier ‘C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2K16\MSSQL\DATA\MoreData.mdf’.
Vous pouvez rencontrer une erreur de données CRC dans la base de données SQL lorsque vous effectuez l’une des actions suivantes:
- Sauvegarde et restauration de la base de données
- Interrogation de la base de données
- Démarrage de SQL Server
Avant d’identifier la cause profonde de cette erreur et de trouver sa solution, comprenons d’abord ce que signifie le contrôle de redondance cyclique.
Qu’est-ce que le CRC ?
Le contrôle de redondance cyclique (CRC) est un algorithme de vérification des données que les ordinateurs utilisent pour vérifier les données sur les dispositifs de stockage tels que les SSD, les HDD, les CD, les bandes magnétiques, etc.
Quelles sont les causes de l’erreur de vérification de la redondance cyclique dans une base de données SQL?
L’erreur de vérification de la redondance cyclique SQL peut se produire pour l’une des raisons suivantes:
- Corruption du registre
- Disque dur encombré
- Installation de programme non réussie
- Fichiers mal configurés
- Fichier écrit sur un mauvais secteur du disque dur
Indépendamment de la cause spécifique, l’erreur de vérification de la redondance cyclique est une erreur grave et doit être traitée immédiatement pour éviter une perte de données potentielle ou même une panne totale du système.
Occurrences de l’erreur SQL CRC
Voici deux scénarios dans lesquels vous pouvez rencontrer l’erreur CRC:
Scénario 1: Vous pouvez rencontrer l’erreur lors de la sauvegarde d’une base de données. Lorsque vous rencontrez l’erreur pendant une sauvegarde, vous pouvez consulter les journaux d’erreurs du serveur SQL pour obtenir plus de détails sur l’erreur.
Figure 1 – Journaux d’erreurs SQL
Un exemple de journal détaillé est présenté ci-dessous:
10/18/2016 12:00:19 AM Création d’une sauvegarde de MoreData vers C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2K16\MSSQL\Backup\
10/18/2016 12:00:32 AM ERREUR : Lire sur “C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2K16\MSSQL\DATA\MoreData.MDF” échoué: 23(Erreur de données (contrôle de redondance cyclique).
La sauvegarde de la base de données se termine anormalement.
10/18/2016 12:00:32 AM ERROR: Travail terminé (avec erreurs)
Scénario 2: Le scénario suivant se produit lorsque vous interrogez la base de données SQL et qu’elle s’arrête brusquement en raison de l’erreur de contrôle des données. Lors de l’interrogation de la base de données, vous recevrez une erreur CRC dans le panneau d’erreur de SQL Server Management Studio (SSMS). Le message d’erreur est le suivant:
Serveur : Msg 823, Niveau 24, Etat 2, Ligne 1
Erreur E/S 23(Erreur de données (contrôle de redondance cyclique).) détectée pendant la lecture à l’offset 0x000001ac1c4000 en fichier ‘C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2K16\MSSQL\DATA\MoreData.mdf’.
Comment corriger l’erreur SQL CRC?
Suivez les étapes dans l’ordre indiqué ci-dessous pour résoudre l’erreur:
Étape 1: Puisque la cause fondamentale de l’erreur CRC est un problème de sous-système d’E/S, il est important de résoudre les problèmes de stockage sous-jacents. Ceci, à son tour, corrigera très probablement l’erreur de contrôle de redondance cyclique dans SQL.
Exécutez l’utilitaire CHKDSK sur le disque en question et permettez-lui de corriger toute erreur en utilisant le paramètre /F. Voici une capture d’écran de la commande permettant de vérifier et de réparer le lecteur F:
Figure 2 – Commande CHKDSK pour réparer et analyser les erreurs CRC
Étape 2: Il est recommandé de procéder à une défragmentation complète du disque après que le “chkdsk” a été effectué et que les erreurs ont été réparées avec succès.
Figure 3 – Fragmentation du disque
Étape 3: Effectuez un contrôle d’intégrité des données sur la base de données SQL pour vous assurer que les données ne sont pas corrompues. Exécutez la commande comme indiqué ci-dessous et analysez les résultats:
DBCC CHECKDB (MoreData) WITH NO_INFOMSGS, ALL_ERRORMSGS
L’exécution de la commande ci-dessus a détecté 2 erreurs d’allocation et 1 erreur de cohérence comme indiqué ci-dessous:
Serveur : Msg 8946, Niveau 16, Etat 12, Ligne 2
Erreur de table : La page d’allocation (1:72864) a des valeurs d’en-tête de page PFS_PAGE invalides. Le type est 0.
Vérifiez le type, l’ID de l’objet et l’ID de la page sur la page.
Serveur : Msg 8921, Niveau 16, Etat 1, Ligne 1
CHECKTABLE terminé. Un échec a été détecté lors de la collecte des faits. Il est possible que tempdb manque d’espace ou qu’une table système soit incohérente. Vérifiez les erreurs précédentes.
Serveur : Msg 8966, Niveau 16, Etat 1, Ligne 1
Impossible de lire et de verrouiller la page (1:72864) avec le type de verrou UP. Échec.
Serveur : Msg 8966, Niveau 16, État 1, Ligne 1
Impossible de lire et de verrouiller la page (1:72864) avec le type de verrou UP. Échec.
Serveur : Msg 8998, Niveau 16, Etat 1, Ligne 1
Des erreurs de page sur les pages GAM, SGAM ou PFS ne permettent pas à CHECKALLOC de vérifier les pages de la base de données ID 8 de (1:72864) à (1:80879). Voir les autres erreurs pour en connaître la cause.
CHECKDB a trouvé 2 erreurs d’allocation et 1 erreur de cohérence non associées à un seul objet.
CHECKDB a trouvé 2 erreurs d’allocation et 1 erreur de cohérence dans la base de données ‘MoreData’.
Étape 4: À ce stade, nous sommes confrontés à une corruption de la base de données, et nos options sont soit de restaurer la sauvegarde la plus récente, soit de réparer la base de données en utilisant les commandes de réparation natives de SQL ou des outils tiers. Examinons maintenant ces deux options:
Restauration de la base de données à partir d’une sauvegarde propre
Lorsque vous essayez de restaurer la base de données à partir d’une sauvegarde, il est fortement recommandé d’effectuer une VERIFICATION DE RESTAURATION UNIQUEMENT sur le fichier de sauvegarde pour savoir si la sauvegarde est dans un état cohérent.
RESTORE VERIFYONLY FROM DISK = C:\BackupFile\MoreData.BAK
GO
Réparer la base de données SQL corrompue
Si la restauration n’aboutit pas, nous sommes à court d’options et devons commencer à envisager la réparation de la base de données. Nous pouvons tenter de réparer la base de données SQL en utilisant la commande DBCC CHECKDB avec REPAIR OPTION.
Pour des informations détaillées sur DBCC CHECKDB, lisez ceci: Comment réparer une base de données SQL en utilisant la commande DBCC CHECKDB
Essayez de réparer la base de données avec DBCC CHECKDB (Réparer les pertes de données) option en exécutant le code suivant:
USE master;
ALTER DATABASE [CorruptDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
DBCC CHECKDB ('CorruptDB', REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS;
GO
ALTER DATABASE [CorruptDB] SET MULTI_USER;
GO
Que faire si DBCC CHECKDB ne parvient pas à réparer la base de données SQL?
La réparation de la base de données à l’aide de DBCC CHECKDB avec (Réparer les pertes de données) comporte un risque de perte de données pendant le processus de réparation. Elle peut également ne pas donner les résultats escomptés. Utilisez l’outil Stellar SQL Database repair pour réparer une base de données SQL corrompue. L’outil est la meilleure alternative à DBCC CHECKDB Réparer les pertes de données qui aide à réparer une base de données SQL de tous les types d’erreurs courantes de corruption de base de données SQL. Il répare les fichiers MDF et NDF corrompus et restaure tous les objets de la base de données. Il permet également de restaurer la base de données dans son état d’origine sans aucun risque de perte de données.
Le logiciel permet essentiellement de réparer les fichiers de base de données SQL Server (.mdf et .ndf) corrompus, tout en conservant la structure et l’intégrité originales des objets de la base de données.
Conclusion
Voilà, c’est fait ! Si vous avez mis en place un bon plan de reprise après sinistre, vous ne devriez avoir aucun problème lorsque votre base de données de production ou toute autre base de données est corrompue en raison d’une erreur CRC (Contrôle de redondance cyclique) de la base de données SQL. Supposons maintenant que vous vous trouviez dans une situation où un plan de reprise d’activité approprié n’a pas été établi et que vous n’ayez pas de sauvegardes à restaurer. Vous pouvez envisager d’utiliser le niveau de réparation minimal signalé par DBCC CHECKDB lorsque vous exécutez le contrôle d’intégrité sur la base de données suspecte.
N’oubliez pas que la fonction de réparation de SQL Server n’est pas robuste et ne constitue pas une solution garantie. Pour une réparation plus rapide et plus polyvalente qui remettrait votre base de données SQL corrompue en état de marche avec une perte de données minimale, ne cherchez pas plus loin que le logiciel Stellar Repair for MS SQL. Il répare la base de données plus rapidement en utilisant un algorithme de réparation plus sophistiqué. Il peut même récupérer les données supprimées dans votre base de données.