mardi 20 novembre 2012

Résoudre les cas graves de corruption Indice de MS SQL Server 2000

Je suis actuellement en utilisant SQL Server 2000. J'ai une base de données contenant une table en cluster nommé «dbo.MyWidgetTable». Cette table a une contrainte d'unicité sur elle comme suit:

«CONSTRAINT UK_Widget_UID non cluster unique (Widget_UID, WidgetColor) '

Cette contrainte est appliquée pour aider à assurer l'intégrité référentielle lorsqu'il s'agit de relations de clé étrangère. Il ya encore un index ordonné en clusters sur la même table. En outre, la table dispose également de deux index non-cluster comme suit:


CREATE IX_CreatedAt index non cluster sur dbo.MyWidgetTable
(Widget_UID, WidgetColor, CreatedAt)

CREATE IX_CreatedAt index non cluster sur dbo.MyWidgetTable
(Widget_UID, WidgetColor, WidgetStatusFID)

De toute évidence, les index non-cluster se chevauchent la contrainte d'unicité. Maintenant, lorsque je tente d'apporter des modifications à l'unique index non cluster d'avoir des «CreatedAt« colonnes de clés, «WidgetStatusFID ', puis ajouter la contrainte suivante:

"ALTER TABLE [dbo]. [MyWidgetStatusTable] AVEC NOCHECK ADD CONSTRAINT
KEY [FK_MyWidgetStatusTable_MyWidgetTable] ÉTRANGER ([WidgetFID], [WidgetColor])
RÉFÉRENCES [dbo]. [MyWidgetTable] ([Widget_UID], [WidgetColor]) '

J'ai rencontré l'erreur suivante:

Msg 1776, Niveau 16, État 0, Ligne 1
Il n'y a pas de clés primaires ou d'un candidat à dbo la table référencée.
MyWidgetTable »qui correspondent à la liste des colonnes de référence dans la clé étrangère
«FK_MyWidgetStatusTable_MyWidgetTable '.

J'ai vérifié le Table de confirmer si la contrainte de clé primaire a été supprimée. Mais la table a une clé primaire en place. Ensuite, j'ai vérifié le journal des erreurs de SQL Server et a constaté que le message ci-dessous a été enregistré dans le fichier:

«Impossible de trouver l'entrée d'index RID '160314a879010000 'de la page d'index (1:428288), ID d'index 3,' DatabaseName 'base de données'.

J'ai essayé de chercher l'erreur sur le web. Quelques ressources a indiqué que c'est le cas de la corruption d'index SQL. Tout d'abord, j'ai ouvert le SQL Server Management Studio, puis exécuté la commande DBCC CHECKDB comme suit:

«DBCC CHECKDB ('DatabaseName') AVEC ALL_ERRORMSGS '

Cela a donné aucune erreur après l'exécution complète. Ensuite, j'ai couru la commande «DBCC DBREINDEX» avec la syntaxe suivante:

«DBCC DBREINDEX (@ TableName, '', 90)»

J'ai couru cette commande pour chaque table qui a eu l'index non-cluster. Cette fois, j'ai trouvé des erreurs avec DBCC CHECKDB.

Afin d'éviter les pertes de données dues à la corruption, je me suis immédiatement précipité à un expert en récupération de base de données. Il m'a conseillé d'aller pour un logiciel de récupération SQL avancé. Ce fut peut-être un diable d'une tâche à moi de décider sur lequel on devrait je préfère. Il y avait des utilitaires abondantes sur Internet qui a promis une reprise base de données complète. Heureusement, j'ai fini par utiliser l'un des outils les plus intéressants, 'Récupération de base de données SQL. Ce logiciel m'a permis de restaurer tous les objets de base de données facilement à une nouvelle base de données SQL. J'ai importé la base de données nouvellement créée et cela a fonctionné sans aucun problème. En outre, il est compatible avec MS SQL Server 2008 R2, 2008 7.0, 2005 et 2000.

Aucun commentaire:

Enregistrer un commentaire

Thanks for your valuable comment !