Nouveautés dbcc checkstorage - ASE 12.5.0.3


1- 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.

2- 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.

2-1- sp_plan_dbccdb

La procédure stockée sp_plan_dbccdb permet de prévoir la configuration nécessaire pour la base de données cible victimdb :

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 :

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.

2-2- 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)

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

sp_poolconfig "dbccdb_cache","1280K","16K"

- Attachement du cache nommé dbccdb_cache à la base dbccdb

sp_bindcache "dbccdb_cache","dbccdb"

2-3- 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 :

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é :

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.

sp_dbcc_createws dbccdb,scan_victimdb,wks_scan_victimdb,scan, "752K"
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'

2-4- 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 :

Ces attributs sont spécifiés avec la procédure sp_dbcc_updateconfig :

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é .

sp_configure 'number of worker processes',2

2-5- 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

3- Nouveautés dbcc checkstorage Adaptive Server Enterprise 12.5.0.3

3-1- Liste des nouveautés

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 nouveautés en gras non surlignées ne font pas l'objet d'illustration :

3-2- 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 :

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 :

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 :

sp_dbcc_updateconfig victimdb, 'enable automatic workspace expansion','1'
go
dbcc checkstorage(victimdb)

A l'issue de l'application du paramètre 'enable automatic workspace expansion', les workspaces ont été étendus :

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

3-3- 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

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
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. A 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
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
sp_dbcc_evaluatedb pubs2
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

3-4- 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 commande dbcc checkstorage soulève ces erreurs.

sp_dbcc_summaryreport @dbname=victimdb
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
sp_dbcc_faultreport @dbname=victimdb
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

3-4-1- 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.

sp_dbcc_recommendations dbname [,"date" [, opid [,"objectname"]]]
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 :

sp_dbcc_recommendations victimdb,null,7,'authors'
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.

sp_dbcc_recommendations victimdb,null,8,'titles'

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.

3-4-2- 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 :

sp_dbcc_help_fault [fault_type]

Exemple :

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.
********************************************************************************

3-4-3- 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 :

sp_dbcc_summaryreport @dbname=victimdb,@display_recommendations=1
sp_dbcc_faultreport @dbname=victimdb,@display_recommendations=1

3-5- 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.

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 vaut null, l'exclusion s'applique pour toutes les bases de données.
op add : enregistre de nouvelles exclusions (les doublons sont ignorés). drop : supprime des exclusions.
listall : liste les exclusions enregistrées.
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 :

sp_dbcc_exclusions null,'add','faults','100035'

Pour supprimer cette exclusion

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 :

sp_dbcc_exclusions victimdb,'add','combo','authors:100035,authors :100025'

Pour supprimer toutes les fautes associées aux tables syslogs et syscomments

sp_dbcc_exclusions victimdb, 'add', 'tables', 'syslogs,syscomments'

Pour consulter les exclusions associées à la base victimdb :

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.

3-6- 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.


Annexe

Historique

Version Date Commentaires
1.0 05/2004 Version initiale

Liens

Sybase Adaptive Server Enterprise 12.5.1 Books OnLine - New Functionality in Adaptive Server 12.5.0.3, Changes to checkstorage
Sybase Adaptive Server Enterprise 15.0.2 Books OnLine - System Administration Guide vol2, Checking Database Consistency