Nouveautés dbcc checkstorage - ASE 12.5.0.3

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 et text
  • 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édure sp_plan_dbccdb, cache)
  • workspaces scan et text à 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

Nouveautés dbcc checkstorage Adaptive Server Enterprise 12.5.0.3

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 commandes dbcc checkstorage et dbcc 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 base dbccdb 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 et dbcc 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édure sp_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 et scan pour chaque base de données. Des workpsaces scan et text sont créés par défaut lorsque le script installdbccb 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)

A 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. 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
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 base victimdb
  • la table titles est corrompue avec l'erreur 100002 (page free offset error) dans la base victimdb

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

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.