Nous avons une base de données SQL 2000. Le serveur est tombé en panne en raison d'une défaillance de la baie Raid. Maintenant, lorsque nous exécutons DBCC CHECKDB, nous obtenons une erreur indiquant qu'il y a 27 erreurs de cohérence sur 9 pages.
Lorsque nous exécutons DBCC PAGE sur ces pages, nous obtenons ceci:
Msg 8939, Level 16, State 106, Line 1
Table error: Object ID 1397580017, index ID 2, page (1:8404521). Test (m_freeCnt == freeCnt) failed. Values are 2 and 19.
Msg 8939, Level 16, State 108, Line 1
Table error: Object ID 1397580017, index ID 2, page (1:8404521). Test (emptySlotCnt == 0) failed. Values are 1 and 0.
Étant donné que l'index indiqué n'est pas en cluster et est créé par une constarint unique qui comprend 2 colonnes, nous avons essayé de supprimer et de recréer l'index. Cela a entraîné l'erreur suivante:
CREATE UNIQUE INDEX terminated because a duplicate key was found for index ID 2. Most significant primary key is '3280'.
The statement has been terminated.
Cependant en cours d'exécution
Select var_id,result_on
from tests
group by var_id,result_on
having count(*)>1
renvoie 0 lignes.
Voici ce que nous prévoyons de faire:
- Restaurer une copie de plantage pré-serveur de la base de données et exécuter DBCC CHECKDB
- Si cela revient propre, puis restaurer à nouveau sans récupération
- Appliquer toutes les sauvegardes TLOG inférieures
- Arrêtez l'application de production, effectuez une sauvegarde du journal de fin et appliquez-la également
- Supprimez la base de données prod et renommez la base de données fraîchement restaurée pour la rendre prod
- Lancer l'application prod
Quelqu'un pourrait-il s'il vous plaît percer des trous dans cette approche? Peut-être, suggérer une approche différente? Ce dont nous avons besoin, c'est d'un temps d'arrêt minimal.
Taille de la base de données SQL 2000 94 Go Le tableau contenant des pages corrompues contient plus de 460 millions de lignes de données
Merci pour l'aide.
Raj
Réponses:
Votre solution de récupération est la manière la plus simple de procéder. En supposant que vous disposiez de sauvegardes appropriées et à condition de pouvoir sauvegarder le journal des transactions de la base de données corrompue, votre stratégie est celle du manuel à mettre en œuvre.
Mais avant de poursuivre, avez-vous envisagé la possibilité de recréer uniquement la table concernée?
Parfois, vous pouvez échapper à la création d'une copie exacte de la table affectée en faisant un
Ensuite, déposez / échangez simplement la table endommagée avec la nouvelle, en vous rappelant d'ajouter les contraintes et les index appropriés.
la source
J'essayerais de grouper les données à déposer en premier, puis de les regrouper dans une nouvelle table. SELECT INTO n'est pas approprié (IMO) pour ce nombre d'enregistrements ...
la source