jeudi 8 janvier 2015

Passer une base SQL SERVER du mode SUSPECT au mode NORMAL

Il peut arriver qu'une base se retrouve dans un état "SUSPECT".

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
Cela permet de vérifier si le problème est un problème matériel.


  • Vous pouvez consulter les logs.
Exemple :

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>
Elle vous renseigne sur les pages de données corrompues.

Aucun commentaire:

Enregistrer un commentaire