 
Introduction
Beaucoup de nouveautés sont apparues avec la version 12.5.0.3 pour la
vérification de l’intégrité des données avec les commandes dbcc checkstorage et
dbcc checkverify (base dbccdb). Cette note technique propose une liste non
exhaustive de ces nouveautés.
Rappels sur la configuration de dbccdb pour les versions pre 12.5.0.3
Ce paragraphe rappelle succinctement les opérations nécessaires pour créer
une configuration de vérification d’intégrité pour une base de données cible
pour les versions antérieures à la version 12.5.0.3 d’Adaptive Server
Enterprise. Dans cet exemple, une configuration est créée dans la base dbccdb
pour la base de données victimdb.
sp_plan_dbccdb
La procédure stockée sp_plan_dbccdb préconise la configuration
nécessaire pour la base de données cible victimdb :
exec sp_plan_dbccdb victimdbRecommended size for dbccdb database is 24MB (data = 22MB, log = 2MB). dbccdb database already exists with size 60MB. Recommended values for workspace size, cache size and process count are: dbname scan ws text ws cache process count -------- -------- ------- ----- ------------- victimdb 752K 192K 1280K 2
Les premières recommandations donnent le dimensionnement pour la base de
données dbccdb. Par la suite sont mentionnés :
- les tailles minimales des workspaces scanettext
- la taille minimale du cache pour le pool de buffer de 16K
- le nombre de worker process.
Globalement, le workspace scan est l’espace utilisé dans la base dbccdb pour
vérifier l’intégrité des colonnes qui ne sont pas de type text de la base de
données victimdb. Le workspace text est l’espace utilisé dans la base dbccdb
pour vérifier les colonnes de type text de la base de données victimdb.
Configuration d’un cache nommé pour la base dbccdb
Une portion du cache de données doit être dédiée à la base dbccdb en créant
un cache nommé et en liant ce cache nommé à la base dbccdb. Le cache dédié doit
posséder un pool de buffer de 16K dont la taille doit au moins être égale au
maximum donné par la colonne cache dans le résultat de la procédure stockée
sp_plan_dbccdb. Plus généralement : 
Taille du cache dédié à dbccdb >= Taille du cache préconisée pour le pool de buffer de 16K + 512K
Il est nécessaire de rajouter 512K car un pool de buffer de 2K doit au moins exister dans ce cache dédié.
- Création d’un cache nommé dbccdb_cache d’une taille de 1792K (1280K +
512K) :
exec sp_cacheconfig "dbccdb_cache","1792K"- Création d’un pool de buffer de 16K d’une taille de 1280K dans le cache
nommé dbccdb_cache :
exec sp_poolconfig "dbccdb_cache","1280K","16K"- Attachement du cache nommé dbccdb_cache à la base dbccdb :
exec sp_bindcache "dbccdb_cache","dbccdb"Création des workspaces pour la base victimdb dans la base dbccdb : sp_dbcc_createws
Un segment est créé pour chaque workspace pour contrôler les emplacements et ainsi améliorer les performances :
exec sp_addsegment "segment_name","db_name","device_name"exec sp_addsegment scan_victimdb,dbccdb,dbccdb_data_01
exec sp_addsegment text_victimdb,dbccdb,dbccdb_data_01Les workspaces sont ensuite créés avec la procédure sp_dbcc_createws, chaque workspace devant être explicitement nommé :
exec sp_dbcc_createws database_name,segment_name,[workspace_name],[{scan|text}],"wssize[K|M]"Les tailles des workspaces sont celles recommandées par la procédure stockée sp_plan_dbccdb.
exec sp_dbcc_createws dbccdb,scan_victimdb,wks_scan_victimdb,scan, "752K"
exec sp_dbcc_createws dbccdb,text_victimdb,wks_text_victimdb,text, "192K"La création des workspaces revient en réalité à créer deux tables
wks_scan_victimdb et wks_text_victimdb dans la base dbccdb, tables placées
respectivement sur les segments scan_victimdb et text_victimdb et ne pouvant
dépasser la taille spécifiée lors de la création de ces dernières.
create table wks_scan_victimdb (col1 binary(18) not null) lock allpages on 'scan_victimdb'
create table wks_text_victimdb (col1 binary(22) not null) lock allpages on 'text_victimdb'Spécification des attributs pour la base cible victimdb dans la base dbccdb : sp_dbcc_updateconfig
La dernière étape permettant de mettre en œuvre dbcc checkstorage sur
la base de données cible victimdb consiste à spécifier les attributs pour la
base de données cible victimdb :
- nombre maximum de worker process (donné par la procédure sp_plan_dbccdb, process count)
- nom du cache nommé dédié à la base dbccdbet taille du pool de buffer de 16k à utiliser dans ce cache nommé (taille donnée par la procéduresp_plan_dbccdb, cache)
- workspaces scanettextà utiliser
Ces attributs sont spécifiés avec la procédure sp_dbcc_updateconfig :
exec sp_dbcc_updateconfig <base_cible>,<attribut>,<valeur1>[,<valeur2>]
exec sp_dbcc_updateconfig victimdb, "max worker processes","2"
exec sp_dbcc_updateconfig victimdb, "dbcc named cache","dbccdb_cache","1280K"
exec sp_dbcc_updateconfig victimdb, "scan workspace","wks_scan_victimdb"
exec sp_dbcc_updateconfig victimdb, "text workspace","wks_text_victimdb"Il est impératif de vérifier que le paramètre de configuration "number of worker processes" est correctement paramétré.
exec sp_configure 'number of worker processes',2Vérification de l’installation : sp_dbcc_evaluatedb
La procédure sp_dbcc_evaluatedb permet de vérifier les paramètres effectués
:
exec sp_dbcc_evaluatedb [db_name]exec sp_dbcc_evaluatedb victimdbRecommended values for workspace size, cache size and process count are: Database name : victimdb current suggested scan workspace size : 752K 752K text workspace size : 192K 192K cache size : 1280K 1280K process count : 2 2
Liste des nouveautés dbcc checkstorage Adaptive Server Enterprise 12.5.0.3
La liste des nouveautés dbcc checkstorage est particulièrement riche avec
ASE 12.5.0.3, les nouveautés surlignées correspondent à des nouveautés pour
lesquelles une illustration est donnée :
- les commandes dbcc checkstorageetdbcc checkverifypeuvent maintenant être exécutées à partir d’une base de données quelconque, il n’est plus nécessaire de se positionner dans la basedbccdbpour exécuter ces commandes.
- les rapports générés
    fournissent maintenant des recommandations pour résoudre les fautes
    soulevées par la commande dbcc checkstorage.
- des rapports peuvent être générés pour les opérations dbcc checkstorageetdbcc checkverifyen échec.
- il est possible de
    limiter la commande dbcc checkverifyà un objet spécifique.
- il est désormais
    possible d’exclure des tables, des fautes ou des combinaisons de tables et
    fautes dans les opérations dbcc checkverifyet dans le retour de la procéduresp_dbcc_faultreport.
- il est possible de créer
    des valeurs de configuration par défaut et visualiser ces dernières avec la
    commande sp_dbcc_configreport.
- il n’est plus nécessaire de créer un cache explicite pour les opérations checkstorage.
- il n’est plus nécessaire
    de créer explicitement des workspaces textetscanpour chaque base de données. Des workpsacesscanettextsont créés par défaut lorsque le scriptinstalldbccbest exécuté.
- il n’est plus nécessaire de réenregistrer avec la commande
    sp_dbcc_updateconfigun workspace supprimé et recréé.
- il n’est plus nécessaire
    d’étendre manuellement les workspaces dans la base dbccdb.
Expansion automatique des workspaces : enable automatic workspace extension
La configuration de la base victimdb est utilisée pour illustrer cette
nouveauté. Initialement, deux workspaces wks_scan_victimdb (792K) et
wks_text_victimdb (192K) ont été créés pour vérifier l’intégrité de la base
victimdb :
exec sp_dbcc_configreport victimdbdatabase name victimdb 61440K dbcc named cache dbccdb_cache 1280K scan workspace wks_scan_victimdb (id = 784002793) 752K text workspace wks_text_victimdb (id = 816002907) 192K max worker processes 2 operation sequence number 3
Pour l’exemple, les tailles des workspaces wks_scan_victimdb et
wks_text_victimdb vont être volontairement réduits à des tailles insuffisantes
(48 Kb) pour vérifier l’intégrité de la base victimdb :
exec sp_dbcc_alterws dbccdb, "wks_scan_victimdb","48K" exec sp_dbcc_alterws dbccdb, "wks_text_victimdb","48K" go exec sp_dbcc_configreport victimdb godatabase name victimdb 61440K dbcc named cache dbccdb_cache 1280K scan workspace wks_scan_victimdb (id = 784002793) 48K text workspace wks_text_victimdb (id = 816002907) 48K max worker processes 2 operation sequence number 3 enable automatic workspace exp 0
Dans ce contexte, les tailles des workspaces sont insuffisantes et la
commande dbcc checkstorage lancée sur la base victimdb échoue :
dbcc checkstorage(victimdb) goChecking victimdb: Logical pagesize is 2048 bytes You cannot use the scan workspace 'wks_scan_victimdb' for database 'victimdb'; required minimum size is 736 KB. The workspace is only 48 KB. You cannot use the text workspace 'wks_text_victimdb' for database 'victimdb'; required minimum size is 192 KB. The workspace is only 48 KB. DBCC CHECKSTORAGE for database 'victimdb' encountered an error. Some results may not be available. Correct the problems reported and reexecute the CHECKSTORAGE command.
Pour pallier à ce problème, un nouveau paramètre de configuration dbcc a été
introduit afin de rendre possible l’expansion automatique des workspaces :
'enable automatic workspace extension'.
Dans le cas où l’expansion automatique des workspaces est activée pour une
configuration donnée, au démarrage de la commande dbcc checkstorage, la taille
des workspaces est validée et si plus d’espace est nécessaire, checkstorage
étend automatiquement les workspaces à la taille nécessaire si toutefois il
existe assez d’espace disponible sur les segments respectifs.
La procédure sp_dbcc_updateconfig est utilisée pour appliquer une expansion
automatique des workspaces sur une configuration donnée :
exec sp_dbcc_updateconfig <target_db>,'enable automatic workspace expansion','0|1'En spécifiant 0, l’expansion automatique des workspaces est désactivée. Avec la valeur 1, l’expansion automatique des workspaces est activée.
Par défaut : l’expansion automatique des workspaces est activée !
Dans le contexte de notre illustration :
exec sp_dbcc_updateconfig victimdb, 'enable automatic workspace expansion','1'
go
dbcc checkstorage(victimdb)À l’issue de l’application du paramètre 'enable automatic workspace
expansion', les workspaces ont été étendus :
exec sp_dbcc_configreport victimdbdatabase name victimdb 61440K dbcc named cache dbccdb_cache 1280K scan workspace wks_scan_victimdb (id = 784002793) 736K text workspace wks_text_victimdb (id = 816002907) 192K max worker processes 2 operation sequence number 4 enable automatic workspace exp 1
Workspaces scan et text par défaut, configuration par défaut
Avec la version 12.5.0.3, un workspace scan def$scan$ws (256K) et un
workspace text def$text$ws (128K) sont créés par défaut lors de l’exécution du
script installdbccdb, ainsi l’on dispose d’une configuration par défaut
disponible
exec sp_dbcc_configreportParameter Name Value Size database name DEFAULT_VALUES scan workspace def$scan$ws (id = 432001539) 256K text workspace def$text$ws (id = 464001653) 128K
Ces workspaces par défaut sont utilisés lorsque des workspaces explicites ne
sont pas configurés pour les bases de données cible avec la commande
sp_dbcc_updateconfig.
En plus des workspaces par défaut, il est possible d’appliquer une
configuration par défaut pour les paramètres 'max worker processes','enable
automatic workspace expansion','dbcc named cache', configuration par défaut qui
est automatiquement utilisée si la base de données cible n’a pas été paramétrée
avec la procédure stockée sp_dbcc_updateconfig.
Pour mettre à jour la configuration par défaut, la procédure
sp_dbcc_updateconfig est appliquée avec l’option null pour la base de données
cible.
exec sp_dbcc_updateconfig null, 'enable automatic workspace expansion', '1' exec sp_dbcc_updateconfig null, 'max worker processes', '2' go exec sp_dbcc_configreport goParameter Name Value Size database name DEFAULT_VALUES scan workspace def$scan$ws (id = 432001539) 256K text workspace def$text$ws (id = 464001653) 128K max worker processes 2 enable automatic workspace exp 1
A titre d’exemple, la commande dbcc checkstorage va être lancée pour la base
de données pubs2, laquelle base de données ne dispose d’aucune configuration
appliquée explicitement. À la première exécution de la commande dbcc
checkstorage sur la base pubs2, la configuration par défaut est prise en compte
et appliquée à la base de données pubs2.
La procédure sp_dbcc_configreport montre clairement lorsque des paramètres
de configuration sont pris par défaut en affichant ** Default pour le paramètre
pris par défaut.
dbcc checkstorage(pubs2) go exec sp_dbcc_configreport pubs2 goReporting configuration information of database pubs2. Parameter Name Value Size database name pubs2 61440K operation sequence number 1 scan workspace def$scan$ws (id = 432001539) 736K ** Default text workspace def$text$ws (id = 464001653) 192K ** Default max worker processes 2 ** Default enable automatic workspace exp 1 ** Default
exec sp_dbcc_evaluatedb pubs2 goRecommended values for workspace size, cache size and process count are: Database name : pubs2 current suggested scan workspace size : 0K 752K text workspace size : 0K 48K cache size : 0K 1280K process count : 0 2
Affichage des recommandations : sp_dbcc_recommendations et sp_dbcc_help_fault
L’affichage détaillée des erreurs et des recommandations associées est une
nouveauté importante de la version d’ASE 12.5.0.3 lors de la détection
d’erreurs avec la commande dbcc checkstorage.
Dans le contexte du cas pratique :
- la table authors(row level locking) est corrompue avec l’erreur 100035 (spacebits mismatch) dans la basevictimdb
- la table titlesest corrompue avec l’erreur 100002 (page free offset error) dans la basevictimdb
La commande dbcc checkstorage soulève ces erreurs.
exec sp_dbcc_summaryreport @dbname=victimdb goDatabase Name Start time End Time Operation ID Hard Faults Soft F ------------- ------------------- ------------ ------------ ----------- ------ victimdb 05/27/2004 17:07:06 17:7:14:383 7 0 3 victimdb 05/27/2004 17:11:23 17:11:31:403 8 1 3
exec sp_dbcc_faultreport @dbname=victimdb goDatabase Name : victimdb Table Name Index Type Code Description Page Number ----------- ----- --------- ----------------------- ----------- authors 0 100025 row count error NULL authors 0 100035 spacebits mismatch 1001 authors 0 100035 spacebits mismatch 1002 titles 0 100002 page free offset error 784
sp_dbcc_recommendations
La nouvelle procédure stockée sp_dbcc_recommendations analyse les fautes
reportées par la commande dbcc checkstorage pour un identifiant d’opération, ou
une date et génère une liste des recommandations de actions correctrices pour
l’objet spécifié présentant une erreur.
exec sp_dbcc_recommendations dbname [,"date" [, opid [,"objectname"]]]
exec sp_dbcc_recommendations @dbname=dbname [,@date="date"[, @opid=opid [,@objectname= "objectname"]]]Sans spécification d’identifiant d’opération ou de date, des recommandations
sont données pour les erreurs de la dernière opération dbcc checkstorage.
Quelques exemples :
exec sp_dbcc_recommendations victimdb,null,7,'authors' goGenerating recommendations for database victimdb. ================================================================================ Suggested corrective actions for object authors, objid 48000171, listed in recommended order: Run dbcc checktable with the 'fix_spacebits' option. Run dbcc checktable. ================================================================================ Contact Sybase Technical Support if the recommended corrective action does not resolve the faults.
exec sp_dbcc_recommendations victimdb,null,8,'titles' goGenerating recommendations for database victimdb. ================================================================================ Database level recommendations: Reload the database from a clean backup. ================================================================================ Recommended corrective action for object titles, objid 240000855: Drop the object and recreate it. ================================================================================ Contact Sybase Technical Support if the recommended corrective action does not resolve the faults. ================================================================================ Database level recommendations: Reload the database from a clean backup. ================================================================================ Recommended corrective action for object titles, objid 240000855: Drop the object and recreate it. ================================================================================ Contact Sybase Technical Support if the recommended corrective action does not resolve the faults.
sp_dbcc_help_fault
La nouvelle procédure stockée sp_dbcc_help_fault fournit une description
détaillée pour un type de faute dbcc checkstorage et les actions correctrices
recommandées :
exec sp_dbcc_help_fault [fault_type]Exemple :
exec sp_dbcc_help_fault 100002******************************************************************************** Description of the fault corresponding to checkstorage type_code 100002: The page free offset value in the page header is invalid. Suggested corrective actions for the fault corresponding to checkstorage type_code 100002, listed in recommended order: Drop the object and recreate it. Reload the database from a clean backup. Contact Sybase Technical Support if the recommended corrective action does not resolve the faults. ********************************************************************************
Intégration de sp_dbcc_recommendations dans les procédures sp_dbcc_faultreport et sp_dbcc_summaryreport
Il est possible d’intégrer l’affichage des recommandations en même temps que
l’exécution des procédures stockées sp_dbcc_summaryreport et
sp_dbcc_faultreport :
exec sp_dbcc_summaryreport @dbname=victimdb,@display_recommendations=1exec sp_dbcc_faultreport @dbname=victimdb,@display_recommendations=1Création d’exclusions : sp_dbcc_exclusions
Il est désormais possible d’exclure explicitement des fautes avec la
procédure stockée sp_dbcc_exclusions dans le retour de la procédure stockée
sp_dbcc_faultreport et pour l’exécution de la commande dbcc checkverify.
exec sp_dbcc_exclusions dbname, op, type, list| Paramètre | Description | 
|---|---|
| dbname | Nom de la base de données pour laquelle les exclusions s’appliquent,
si cette valeur est null, l’exclusion s’applique pour toutes les bases
de données. | 
| op | 
 | 
| type | Type à exclure : fautes, tables, combinaisons de fautes et de tables (combo : table:erreur). | 
| list | Liste de fautes, de tables séparées par des virgules. | 
Pour exclure toutes les fautes 100035 pour toutes les bases de données :
exec sp_dbcc_exclusions null,'add','faults','100035'Pour supprimer cette exclusion
exec sp_dbcc_exclusions null, 'drop', 'faults', '100035'Pour ajouter une exclusion pour les erreurs 100035 et 100025 associées à la
table authors dans la base victimdb :
exec sp_dbcc_exclusions victimdb,'add','combo','authors:100035,authors :100025'Pour supprimer toutes les fautes associées aux tables syslogs et
syscomments
exec sp_dbcc_exclusions victimdb, 'add', 'tables', 'syslogs,syscomments'Pour consulter les exclusions associées à la base victimdb :
exec sp_dbcc_exclusions victimdb,listallScope Type Table Fault -------- ----- ----------- ------------ victimdb Table syscomments victimdb Table syslogs victimdb Combo authors 100025 victimdb Combo authors 100035
Toutes les exclusions paramétrées ne sont pas reportées par la procédure
sp_dbcc_faultreport et analysées par la commande dbcc checkverify.
Améliorations de la commande dbcc checkverify
La nouvelle syntaxe de la commande dbcc checkverify permet de restreindre la
vérification jusqu’au nivau d’une table avec la possibilité d’ignorer ou de
prendre en compte les exclusions créées avec la commande sp_dbcc_exclusions
:
dbcc checkverify( db_name [, tblname [,ignore_exclusions]])ignore_exclusions vaut 0 ou 1 : 1 pour ignorer les exclusions, 0 pour
prendre en compte les exclusions.