Lorsque vous utilisez Microsoft SQL Server pour attacher ou accéder à un fichier de base de données MDF corrompu, vous verrez divers messages d'erreur, ce qui peut être un peu déroutant pour vous. Par conséquent, nous essaierons ici de lister toutes les erreurs possibles, triées en fonction de leur fréquence d'apparition. Pour chaque erreur, nous décrirons son symptôme, expliquerons sa raison précise et donnerons des exemples de fichiers ainsi que le fichier corrigé par notre DataNumen SQL Recovery, afin que vous puissiez mieux les comprendre. Ci-dessous, nous utiliserons 'xxx.MDF' pour exprimer votre corruption SQL Server Nom du fichier de base de données MDF.
Basé sur SQL Server ou messages d'erreur CHECKDB, il existe trois types d'erreurs qui provoqueront un échec:
-
- Erreurs d'allocation: Nous savons que les données des fichiers MDF et NDF sont allouées comme pages. Et certaines pages spéciales sont utilisées pour la gestion des allocations, comme suit:
Type de page | Description |
Page GAM | Stockez les informations de la carte d'allocation globale (GAM). |
Page SGAM | Stockez les informations de la carte d'allocation globale partagée (SGAM). |
Page IAM | Stockez les informations de la carte d'allocation d'index (IAM). |
Page PFS | Stockez les informations d'allocation PFS. |
Si l'une des pages d'allocation ci-dessus contient des erreurs ou si les données gérées par ces pages d'allocation sont incompatibles avec les informations d'allocation, alors SQL Server ou CHECKDB signalera erreurs d'allocation.
- Erreurs de cohérence: Pour le pages qui sont utilisées pour stocker des données, y compris les pages de données et les pages d'index, si SQL Server ou CHECKDB trouve une incohérence entre le contenu de la page et la somme de contrôle, puis ils signalent erreurs de cohérence.
- Toutes les autres erreurs: Il peut y avoir d'autres erreurs qui ne relèvent pas des deux catégories ci-dessus.
- xxxx.mdf n'est pas un fichier de base de données primaire. (Microsoft SQL Server, Erreur: 5171)
- L'en-tête du fichier «xxxx.mdf» n'est pas un en-tête de fichier de base de données valide. La propriété FILE SIZE est incorrecte. (Microsoft SQL Server, Erreur: 5172)
- SQL Server a détecté une erreur d'E / S basée sur la cohérence logique: somme de contrôle incorrecte
- SQL Server a détecté une erreur d'E / S basée sur la cohérence logique: page déchirée
- Vous supprimez par erreur certains enregistrements ou certaines tables de la base de données.
SQL Server a un outil intégré appelé DBCC, Qui présente CHECKDB et TABLEAU DE CONTRÔLE options qui peuvent aider à réparer une base de données MDF corrompue. Cependant, pour les fichiers de base de données MDB gravement endommagés, DBCC CHECKDB et TABLEAU DE CONTRÔLE échouera également.
Erreurs de cohérence signalées par CHECKDB:
- SQL Server a détecté une erreur d'E / S basée sur la cohérence logique: somme de contrôle incorrecte
- La ligne dans sys.xxx n'a pas de ligne correspondante dans sys.xxx.
- Erreur de table: ID d'objet ##, l'ID d'index ## sera reconstruit.
- Cet index de table système ne peut pas être recréé.
- ID d'objet ##, ID d'index ##, ID de partition ##, ID d'unité d'allocation ## (type inconnu), ID de page (##: 560) contient un ID de page incorrect dans son en-tête de page.
Erreurs d'allocation signalées par CHECKDB:
- La page Index Allocation Map (IAM) est pointée par le pointeur suivant de la page IAM
- L'étendue (##: ##) dans l'ID de base de données ## est marquée allouée dans le GAM, mais aucun SGAM ou IAM ne l'a allouée.
Toutes les autres erreurs signalées par CHECKDB:
- Échec: (- #######) L'exécution de la requête «DBCC CHECKDB (xxxx) WITH NO_INFOMSGS» a échoué avec l'erreur suivante: «xxxx».
- Erreur d'E / S (ID de page incorrect) détectée lors de la lecture à l'offset 0x ###### dans le fichier 'xxxx.mdf'.
- Le système n'a pas pu activer suffisamment de base de données pour reconstruire le journal
- Perte de données lors de la réparation avec CHECKDB
- Le fichier semble avoir été tronqué par le système d'exploitation.
- Lors du rétablissement d'une opération journalisée dans la base de données «xxxx», une erreur s'est produite au niveau de l'ID d'enregistrement du journal.