Symptôme:

Lors de l'utilisation DBCC CHECKDB avec REPAIR_ALLOW_DATA_LOSS paramètre pour réparer une base de données .MDF corrompue, comme ceci :

DBCC CHECKDB(xxxx, 'REPAIR_ALLOW_DATA_LOSS')

vous voyez le message d'erreur suivant :

Résultats DBCC pour 'xxxx'.
CHECKDB a trouvé 0 erreurs d'allocation et 0 erreurs de cohérence dans la base de données 'xxxx'.
Msg 824, niveau 24, état 2, ligne 8
SQL Server a détecté une erreur d'E/S basée sur la cohérence logique : somme de contrôle incorrecte (attendu : 0xea8a9a2f ; réel : 0x37adbff8). Cela s'est produit lors d'une lecture de la page (1:28) dans la base de données ID 39 au décalage 0x00000000038000 dans le fichier 'xxxx.mdf'. Messages supplémentaires dans le SQL Server le journal des erreurs ou le journal des événements système peut fournir plus de détails. Il s'agit d'une condition d'erreur grave qui menace l'intégrité de la base de données et doit être corrigée immédiatement. Effectuez une vérification complète de la cohérence de la base de données (DBCC CHECKDB). Cette erreur peut être causée par de nombreux facteurs ; pour plus d'informations, voir SQL Server Livres en ligne.

où 'xxxx.mdf' est le nom du fichier MDF corrompu en cours de réparation. Bien que CHECKDB dise

CHECKDB a trouvé 0 erreurs d'allocation et 0 erreurs de cohérence dans la base de données 'xxxx'.

Il s'agit toujours d'une erreur de cohérence(Msg 824) dans la base de données.

Capture d'écran du message d'erreur :

erreur d'E/S basée sur la cohérence logique : somme de contrôle incorrecte

Si la corruption est grave, il y aura des messages d'erreur continus (Msg 824), comme ci-dessous :

Msg 824, niveau 24, état 6, ligne 2 SQL Server a détecté une erreur d'E/S basée sur la cohérence logique : somme de contrôle incorrecte (attendu : 0x3d17dfef ; réel : 0xd81748ef). Cela s'est produit lors d'une lecture de la page (1:0) dans la base de données ID 39 au décalage 0000000000000000 dans le fichier 'xxxx.mdf'. Messages supplémentaires dans le SQL Server le journal des erreurs ou le journal des événements système peut fournir plus de détails. Il s'agit d'une condition d'erreur grave qui menace l'intégrité de la base de données et doit être corrigée immédiatement. Effectuez une vérification complète de la cohérence de la base de données (DBCC CHECKDB). Cette erreur peut être causée par de nombreux facteurs ; pour plus d'informations, voir SQL Server Livres en ligne.

Msg 824, niveau 24, état 6, ligne 4 SQL Server a détecté une erreur d'E/S basée sur la cohérence logique : somme de contrôle incorrecte (attendu : 0x3d17dfef ; réel : 0xd81748ef). Cela s'est produit lors d'une lecture de la page (1:0) dans la base de données ID 39 au décalage 0000000000000000 dans le fichier 'xxxx.mdf'. Messages supplémentaires dans le SQL Server le journal des erreurs ou le journal des événements système peut fournir plus de détails. Il s'agit d'une condition d'erreur grave qui menace l'intégrité de la base de données et doit être corrigée immédiatement. Effectuez une vérification complète de la cohérence de la base de données (DBCC CHECKDB). Cette erreur peut être causée par de nombreux facteurs ; pour plus d'informations, voir SQL Server Livres en ligne.

où 'xxxx.mdf' est le nom du fichier MDF corrompu en cours de réparation.

Capture d'écran du message d'erreur :

Si la corruption est plus grave, vous pouvez voir Msg 7909 suit Msg 824:

Résultats DBCC pour 'xxxx'.
CHECKDB a trouvé 0 erreurs d'allocation et 0 erreurs de cohérence dans la base de données 'xxxx'.
Msg 824, niveau 24, état 2, ligne 8
SQL Server a détecté une erreur d'E/S basée sur la cohérence logique : somme de contrôle incorrecte (attendu : 0xcfcd2118 ; réel : 0x6fc599d6). Cela s'est produit lors d'une lecture de la page (1:1) dans la base de données ID 39 au décalage 0x00000000002000 dans le fichier 'xxxx.mdf'. Messages supplémentaires dans le SQL Server le journal des erreurs ou le journal des événements système peut fournir plus de détails. Il s'agit d'une condition d'erreur grave qui menace l'intégrité de la base de données et doit être corrigée immédiatement. Effectuez une vérification complète de la cohérence de la base de données (DBCC CHECKDB). Cette erreur peut être causée par de nombreux facteurs ; pour plus d'informations, voir SQL Server Livres en ligne.
Msg 7909, niveau 20, état 1, ligne 8
La réparation en mode d'urgence a échoué. Vous devez restaurer à partir de la sauvegarde.

où 'xxxx' est le nom de la base de données et 'xxxx.mdf' est le nom du fichier physique de la base de données.

Notes Msg 7909 est une erreur grave qui peut se produire dans de nombreuses situations chaque fois que SQL Server pense que la base de données est au-delà de la récupération.

Capture d'écran du message d'erreur :

Explication précise :

Les données dans le fichier MDF sont stockées en tant que 8 Ko pages. Chaque page comporte un champ de somme de contrôle facultatif.

Si la commande DBCC CHECKDB trouve que les valeurs de somme de contrôle dans la page d'en-tête, la page PFS et certaines des pages de données ne sont pas valides et qu'elle ne peut pas corriger le problème, elle signalera cette erreur (Msg 824). Si la corruption est grave, il peut y avoir des erreurs continues(Msg 824) ou suivi d'une autre erreur(Msg 7909).

Vous pouvez utiliser notre produit DataNumen SQL Recovery pour récupérer les données du fichier MDF corrompu et résoudre cette erreur.

Exemples de fichiers :

Exemples de fichiers MDF corrompus qui causeront l'erreur (Erreur Msg 824 unique):

SQL Server version Fichier MDF corrompu Fichier MDF fixé par DataNumen SQL Recovery
SQL Server 2014 Erreur1_3.mdf Erreur1_3_fixed.mdf

Exemples de fichiers MDF corrompus qui causeront l'erreur (Erreurs continues Msg 824):

SQL Server version Fichier MDF corrompu Fichier MDF fixé par DataNumen SQL Recovery
SQL Server 2014 Erreur1_1.mdf Erreur1_1_fixed.mdf

Exemples de fichiers MDF corrompus qui causeront l'erreur (Erreur Msg 824 suivie de l'erreur Msg 7909):

SQL Server version Fichier MDF corrompu Fichier MDF fixé par DataNumen SQL Recovery
SQL Server 2014 Erreur1_2.mdf Erreur1_2_fixed.mdf

 

Références:

1. https://docs.microsoft.com/en-us/sql/relational-databases/errors-events/mssqlserver-824-database-engine-error?view=sql-server-ver15