Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

SQL Server : Maintenance courante, vérifiez l’intégrité de la base de données avec DBCC CHECKDB

Si vous ne le faites pas encore c'est le moment de planifier cette opération régulièrement sur vos bases de données. A l'instar de CHKDSK sur les disques de vos machines, les fichiers de bases de données et leur structure internes peuvent subir des dommages.

Dans la série des problèmes pouvant survenir et qui peuvent être détectés par DBCC CHECKDB :

  • Problème de corruption logique ou physique
  • Vérification de l'intégrité des métas donnés
    • En vérifie le contenu des en-têtes de pages, les chaînages d'index, etc.
  • Vérification des vues indexées, index géo-spatiaux et index XML avec WITH EXTENDED_LOGICAL_CHECKS
    • La vérification de ces index spéciaux est assez couteuse, c'est pour cela qu'une option a été crée sous SQL Server 2008 pour choisir ou non de vérifier leur intégrité. Sous SQL Server 2005 la vérification des vues indexées et index XML etait systématique par défaut.
  • Vérification de certains types (float, datetime) avec WITH DATA_PURITY
    • Suite à migration depuis SQL Server 2000

Elle s'exécute facilement, mais nécessite comme toutes les commandes DBCC des privilèges de sysadmin sur l'instance.

DBCC CHECKDB

-- base de données courante

DBCC CHECKDB(5)

-- où 5 correspond à un numéro d'une base de données --> sys.databases

 

Ou en boucle sur toutes les bases de données d'une même instance (eh oui un curseur) :

DECLARE @dbid int ;

 

DECLARE crsDB CURSOR FOR SELECT database_id FROM sys.databases FOR READ ONLY ;

OPEN crsDB ;

 

FETCH NEXT FROM crsDB INTO @dbid ;

 

WHILE ( @@FETCH_STATUS = 0)

BEGIN

 

    DBCC CHECKDB( @dbid ) WITH NO_INFOMSGS ;

 

    FETCH NEXT FROM crsDB INTO @dbid ;

 

END

 

CLOSE crsDB ;

DEALLOCATE crsDB ;

A noter aussi l'existence d'une tâche dans les plans de maintenance, intitulé « vérification de l'intégrité de la base de données ».

Cette commande permet aussi de réparer une partie des défauts détectés durant le contrôle.

En pratique, la commande DBCC CHECKDB génère un Snapshot (instantané) de la base de données sur laquelle le contrôle d'intégrité a été demandé, et cela quelque soit l'édition de SQL Server sur laquelle vous tournez. Celui-ci va consommer un peu d'espace disque en fonction des écritures en cours sur la base de données source. Cet instantané est invisible et utilise les emplacements des fichiers sources, vérifiez bien qu'assez d'espace est disponible avant l'utilisation de DBCC CHECKDB et éviter son utilisation concomitante avec une maintenance d'index ou tout autre tâche exigeant beaucoup d'écritures au sein de la base de données.

Quand exécuter cette commande ?

  • Avant chaque sauvegarde complète
    • Certes cela ne vous offre qu'une garantie limitée, mais il est probable à plus de 95% que le contenu de la sauvegarde soit ok
  • A chaque redémarrage inattendu de votre instance, ou redémarrage forcé (on redémarre Windows ou on coupe l'instance sans attendre le COMMIT des transactions en cours)
    • Plus par précaution qu'autre chose, si le système disque est préservé par batterie il ne devrait pas y avoir de problèmes
  • Après chaque mise à niveau de SQL Server
    • Passage de 2000 à 2005 ou 2005 à 2008… En option à chaque Service pack.
  • Lors d'une période d'activité calme et surtout pas en même temps qu'une autre tâche de maintenance de type sauvegarde ou optimisation des index !

Quelques astuces :

  • WITH NO_INFOMSGS
    • Cette clause vous permets de supprimer les centaines de messages, vous signalant que l'analyse de la table x ou de l'index y est en cours et de fait ne renvoie que les erreurs trouvées
  • La colonne percent_complete de la vue dynamique sys.dm_exec_requests vous permet de suivre l'avancement de votre vérification d'intégrité
  • Si la vérification de l'intégrité n'est pas possible sur votre système (impact trop important du snapshot, trop peu d'espace libre, etc.). Dans ces cas, faites une sauvegarde complète de votre base de données, restaurez là sur une autre instance et exécutez le DBCC CHECKDB sur cette nouvelle base de données.
  • Si vous souhaitez découper vos vérifications de bases de données, les commandes suivantes sont des alternatives au DBCC CHECKDB (voir http://www.sqlskills.com/BLOGS/PAUL/post/CHECKDB-From-Every-Angle-Consistency-Checking-Options-for-a-VLDB.aspx le gars qui a écrite une partie des commandes DBCC, pour plus d'infos)
    • Par groupe de fichier (FILEGROUP)
      • DBCC CHECKFILEGROUP
    • Table par table et en découpant par types de contrôle
      • DBCC CHECKALLOC
      • DBCC CHECKCATALOG
      • DBCC CHECKTABLE

Donc, commande indispensable, à utiliser régulièrement pour préserver la santé de vos bases de données.

Bonne vérification…

 

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Publié lundi 14 décembre 2009 10:13 par christian

Commentaires

Pas de commentaires
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Article dans Programmez sur les principes SOLID par Fathi Bellahcene le il y a 3 minutes

- Parution de mon livre sur WPF 4 par Perspective le il y a 5 heures et 52 minutes

- EDM : comment utiliser l’Horizontal Entity Splitting par Matthieu MEZIL le il y a 19 heures et 0 minutes

- [WP7Dev][Reactive] Rendre les Reactive Extensions Plus Stables par Jerome Laban le 09-08-2010, 02:24

- [SharePoint 2010] [Visio] Manipulation n°1 : Comment générer automatiquement la carte d’un site Web avec Visio ? par Le blog de Patrick le 09-07-2010, 14:12

- WinDbg / SOS / PSSCOR2 : Failed to load data access DLL (mscordacwks) par CoqBlog le 09-06-2010, 22:29

- Perspective 2.0 : version finale par Perspective le 09-06-2010, 19:42

- SharePoint 2010 : Comparaison entre la version 2007 et la version 2010 par Philippe Sentenac [MVP SharePoint] le 09-06-2010, 12:00

- Utilisation de la réplication SQL dans le code .NET d'une application mobile - Implémentation & Conseils : PARTIE 1/3 (classe SqlCeReplication & premi... par Le Blog de Pi-R (Pierre Cambier) le 09-06-2010, 08:37

- Quelques trucs intéressants (05/09/2010) par CoqBlog le 09-05-2010, 14:53