web-dev-qa-db-fra.com

réparateur_allow_data_loss est le niveau de réparation minimum pour les erreurs trouvées par DBCC CheckDB

Travailler dans un problème de corruption de base de données. Je travaille sur une copie dans un environnement de développement. Certains étaient des index corrompus auquel cas je viens de tomber et le recréer. Celles-ci sont toutefois des problèmes de corruption de données qui préoccupent.

Quand je cours:

DBCC CHECKDB ('DATABASE', REPAIR_ALLOW_DATA_LOSS);

...ça dit:

l'erreur a été réparée

Cela signifie-t-il réellement le problème ou qu'il a supprimé la page qui était la "réparation" et les données ont été perdues?

ID d'objet 1899231358, index ID 0, ID de partition 124468026277888, ID d'alloc ID 124468026277888 (Données de type in-lignes): page (1: 10429642) n'a pas pu être traitée. Voir d'autres erreurs pour plus de détails.
L'erreur a été réparée.

ERREUR DE TABLE: OBJECT ID 1518653945, ID d'index 1, ID de partition 72057594166444032, ID de l'unité Alloc 71875645566156800 (Données de type LOB).
[.____] Le nœud de données hors lignes à la page (1: 10429980), Slot 0, ID de texte 954358824960 est référencé par page (1: 6660634), emplacement 10, mais n'a pas été vu dans le balayage.
L'erreur a été réparée.

4
Thorin

Comme vous avez utilisé les états ... vous avez perdu des données avec la réparation

REPAIR_ALLOW_DATA_LOSS

Dans votre cas, vous avez perdu Index 0, Données de référence. La réparation s'est terminée avec succès, mais cela ne rend pas vos données perdues reviennent. À propos du seul scénario de corruption qui est fixable sans perte de données à l'aide de l'option est si toute la corruption était sur une donnée non clustere (non rentrée).

Si vous avez une sauvegarde précédente, vous pourrez peut-être restaurer les pages endommagées. Cela dépend de vos sauvegardes n'ayant pas la même corruption pour les pages concernées, ce qui est très probable si vous n'étilisez pas régulièrement CheckDB, n'utilisez pas la vérification de la page de contrôle et l'option de contrôle pour les sauvegardes.

Examinez la table impliquée et essayez de déterminer si vous pouvez reconstruire sinon ce qui a été perdu. Sinon, bonne chance et vous pouvez essayer une page de restauration de page, voir:

Comment restaurer une page dans SQL Server Standard and Enterprise Edition par Jes Schultz Borland

2
Andrew Loree

En ce qui concerne mon "expérience" va réparer_allow_data_loss ne corrige jamais le problème ce que cela fait en réalité est supprime autant que Culprits Possibilité de s'assurer que tout ce qui reste est cohérent. Cela devrait toujours être votre dernier recours à sortir de la corruption. De plus, ce qu'il fait également supprime ces contraintes de valeur précieuses/contraintes commerciales sur lesquelles votre logique est conçue de la base de données en laissant la base de données dans l'état vulnérable.

Un bit d'avantage MS fournit ici est que nous pouvons exécuter réparateur_allow_data_loss dans une transaction, mais ne pas l'engager réellement et évaluer la quantité de perte de données et cassé Base de données que vous obtenez. Ensuite, vous pouvez réellement décider plus loin.

Je cite une section d'avertissement de BOL DOCUMENT sur REPAY_ALE_DATA_LOSS

L'option Repair_allow_Data_Loss est une fonctionnalité prise en charge de SQL Server. Cependant, ce n'est peut-être pas toujours la meilleure option pour apporter une base de données à un état physiquement cohérent. En cas de succès, l'option Repair_allow_Data_Loss peut entraîner une perte de données. En fait, cela peut entraîner davantage de données perdues que si un utilisateur devait restaurer la base de données de la dernière bonne sauvegarde connue. Microsoft recommande toujours une restauration de l'utilisateur à partir de la dernière bonne sauvegarde connue en tant que méthode principale de récupération des erreurs rapportées par DBCC CheckDB. L'option Repair_allow_Data_Loss n'est pas une alternative pour la restauration d'une bonne sauvegarde connue. C'est une option "Dernier recours" d'urgence recommandée pour une utilisation uniquement si la restauration d'une sauvegarde n'est pas possible.

Certaines erreurs, qui ne peuvent être réparées que à l'aide de l'option Repair_allow_Data_Loss, peuvent impliquer de traiter une ligne, une page ou une série de pages pour effacer les erreurs. Toute données de distribution n'est plus accessible ni récupérable pour l'utilisateur, et le contenu exact des données de distribution ne peut pas être déterminé. Par conséquent, l'intégrité référentielle peut ne pas être exacte après que les lignes ni les pages sont traitées car les contraintes de clé étrangère ne sont ni vérifiées ni entretenues dans le cadre de cette opération de réparation. L'utilisateur doit inspecter l'intégrité référentielle de leur base de données (à l'aide de DBCC CheckConstraints) après avoir utilisé l'option Repair_allow_Data_Loss.

Avant d'effectuer la réparation, créez des copies physiques des fichiers appartenant à cette base de données. Ceci inclut le fichier de données primaire (.MDF), tous les fichiers de données secondaires (.ndf), tous les fichiers journaux de transaction (.LDF) et d'autres conteneurs qui forment la base de données comprenant des catalogues de texte intégral, des dossiers de flux de fichiers, des données optimisées de mémoire, etc. .

Avant de réparer la réparation, envisagez de modifier l'état de la base de données en mode d'urgence et d'essayer d'extraire autant d'informations possibles des tables critiques et d'enregistrer ces données.

1
Shanky