web-dev-qa-db-fra.com

Mode SQL Server 2008 R2 (suspect) - comment réparer?

J'ai une base de données SQL Server 2008 R2 en mode suspect. J'ai essayé de le réparer en exécutant cette requête:

EXEC sp_resetstatus ‘yourDBname’;
ALTER DATABASE yourDBname SET EMERGENCY
DBCC checkdb(’yourDBname’)
ALTER DATABASE yourDBname SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB (’yourDBname’, REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE yourDBname SET MULTI_USER

Mais la sortie de réparation était ce message:

Warning: You must recover this database prior to access.
Msg 8921, Level 16, State 1, Line 5
Check terminated. A failure was detected while collecting facts. Possibly tempdb out of space or a system table is inconsistent. Check previous errors.
Warning: The log for database 'ServeDB' has been rebuilt. Transactional consistency has been lost. The RESTORE chain was broken, and the server no longer 
has context on the previous log files, so you will need to know what they were. You should run DBCC CHECKDB to validate physical consistency. The database has 
been put in dbo-only mode. When you are ready to make the database available for use, you will need to reset database options and delete any extra log files.
Msg 8921, Level 16, State 1, Line 9
Check terminated. A failure was detected while collecting facts. Possibly tempdb out of space or a system table is inconsistent. Check previous errors.

Comment réparer complètement la base de données? Cette réparation que j'ai faite ne fonctionne que quelques jours, puis la base de données passe à nouveau en mode Suspect ...

5
Vytas999

J'ai rencontré un problème similaire. Cependant, je n'ai pas pu extraire la base de données des suspects car les sauvegardes étaient également suspectes. J'ai utilisé la fonctionnalité d'exportation dans SSMS pour déplacer les tables et les données vers une nouvelle base de données vierge.

Cependant, cela ne déplace pas toutes vos procédures stockées, vues, fonctions, etc. J'ai une copie de la comparaison SQL de RedGate (que je recommande fortement à tous ceux qui travaillent régulièrement avec des schémas SQL) qui a géré toute la migration de la structure. Cela a donc rendu le processus assez indolore. RedGate dispose d'un essai de 14 jours sur son logiciel si vous devez l'utiliser.

Si vous ne disposez que de tables ou d'un petit nombre de procédures, de vues, etc., vous pouvez utiliser la fonction "Générer des scripts" de SSMS pour créer des scripts de création pour ces éléments, puis les exécuter sur votre nouvelle base de données.

Comparaison SQL de RedGate: http://www.red-gate.com/products/sql-development/sql-compare/

5
AJ Piscitelli

Vous ne pouvez pas réparer cette base de données et la réparation que vous avez potentiellement effectuée n'est pas terminée. Vous devez vous assurer de comprendre pourquoi votre base de données est corrompue - vérifiez votre système de disque car c'est le coupable le plus probable.

Ensuite, restaurez votre base de données à partir d'une sauvegarde - mais assurez-vous d'exécuter DBCC CHECKDB sur cette même sauvegarde pour vous assurer qu'elle n'est pas corrompue.

DBCC CHECKDB avec REPAIR_ALLOW_DATA_LOSS est le tout dernier recours auquel vous devriez vous adresser. Avant cela, vous devez restaurer une sauvegarde valide. Une fois que vous utilisez REPAIR_ALLOW_DATA_LOSS, ne vous attendez pas à ce que votre base de données revienne comme par magie - très probablement, des dommages irréparables se sont produits - en particulier dans ce cas, car il se plaint de la corruption de la table système.

7
Mark S. Rasmussen

Avez-vous essayé ce que Paul Randal recommande? Créer, détacher, rattacher et réparer une base de données suspecte

  1. Créer une nouvelle base de données factice avec la même disposition de fichier exacte et aussi proche que possible des tailles de fichier de la base de données détachée
  2. Arrêter SQL Server
  3. Échangez les fichiers de base de données corrompus
  4. Redémarrez SQL Server
  5. Utiliser la réparation en mode d'urgence
6
Carol Baker West