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 victimdb
Recommended 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
scan
ettext
- 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_01
Les 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
dbccdb
et taille du pool de buffer de 16k à utiliser dans ce cache nommé (taille donnée par la procéduresp_plan_dbccdb
, cache) - workspaces
scan
ettext
à 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',2
Vé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 victimdb
Recommended 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 checkstorage
etdbcc checkverify
peuvent maintenant être exécutées à partir d’une base de données quelconque, il n’est plus nécessaire de se positionner dans la basedbccdb
pour 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 checkstorage
etdbcc checkverify
en é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 checkverify
et 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
text
etscan
pour chaque base de données. Des workpsacesscan
ettext
sont créés par défaut lorsque le scriptinstalldbccb
est exécuté. - il n’est plus nécessaire de réenregistrer avec la commande
sp_dbcc_updateconfig
un 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 victimdb
database 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 go
database 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) go
Checking 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 victimdb
database 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_configreport
Parameter 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 go
Parameter 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 go
Reporting 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 go
Recommended 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
titles
est 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 go
Database 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 go
Database 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' go
Generating 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' go
Generating 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=1
exec sp_dbcc_faultreport @dbname=victimdb,@display_recommendations=1
Cré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,listall
Scope 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.