Les causes sont multiples mais en général nous sommes dans le cas d'une base "corrompue".
Et lorsque cela arrive, l'accès à cette base est vraiment limité. En clair vous ne pouvez plus l'utiliser correctement.
Comment remédier à ce problème ?
Vous trouverez ci-joint une séquence de commandes à exécuter.
Nous réinitialisons le statut de la base.
EXEC sp_resetstatus 'nom_de_votre_base'
GO
Nous passons la base en mode "réparation" et faisons un "état des lieux"
ALTER DATABASE nom_de_votre_base SET EMERGENCY
DBCC checkdb('nom_de_votre_base')
Nous supprimons les anomalies détectées (ce qui peut provoquer la perte de données)
ALTER DATABASE nom_de_votre_base SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC checkdb('nom_de_votre_base', REPAIR_ALLOW_DATA_LOSS)
Nous repassons la base en mode normal : elle est à nouveau accessible
ALTER DATABASE nom_de_votre_base SET MULTI-USER WITH ROLLBACK IMMEDIATE
GO
Quelques outils pour comprendre la cause du problème
- Un CHECKDISK sur la partition où se trouve la base
- Vous pouvez consulter les logs.
EXEC sp_readerrorlog 0,1,'2015-01-01'
0 -> log courant, 1 -> error log, '2015-01-01' -> chaine à rechercher dans log, dans notre cas la date du jour par exemple
- Si dans les erreurs générées par DBCC checkdb('nom_de_ma_base') se trouve des erreurs du type "INDEX"
Nous avons probablement des index incorrects.
Pour lister ces index :
EXEC sp_HelpIndex 'nom_de_ma_table'
- Vérifier le contenu de la table <msdb.suspect_pages>
Aucun commentaire:
Enregistrer un commentaire