La commande dbcc checkstorage vérifie l'homogénéité d'une base de données dans son intégralité, y compris les pages non utilisées.
Elle verrouille de manière minimale les tables durant le processus, ce qui autorise une activité concurrente.
Son temps d'exécution est dépendant de la taille de la base de données. Il n'est pas affecté par le paramètre de remplissage de la base de données
Elle nécessite l'installation d'une base de données technique : dbccdb
La mise en œuvre de la commande dbcc checkstorage nécessite plusieurs étapes fondamentales dont l'installation de la base dbccdb. Ces étapes sont au nombre de 6 et sont rappelées ci-dessous :
Les ressources requises pour la commande dbcc checkstorage dépendent :
Parmi les ressources qui doivent être configurées :
Une procédure système, sp_plan_dbccdb permet d'obtenir des
recommandations sur les ressources évoquées précédemment.
sp_plan_dbccdb [dbname]
exec sp_plan_dbccdb
Recommended size for dbccdb database is 16MB (data = 14MB, log = 2MB). dbccdb database already exists with size 12MB. Recommended values for workspace size, cache size and process count are: dbname scan ws text ws cache process count master 96K 48K 640K 1 tempdb 192K 48K 1280K 2 model 64K 48K 640K 1 dbtest 192K 48K 1280K 2 sybsystemdb 64K 48K 640K 1 sybsystemprocs 1232K 320K 640K 1 dbccdb 176K 48K 1280K 2
Les premières recommandations concernent le dimensionnement de la base de données dbccdb (taille en Mo pour les données et pour le log). Par la suite, sont indiqués :
La création de la base de données dbccdb doit être effectuée en utilisant la taille minimale recommandée par sp_plan_dbccdb.
use master go disk init name=data_dbccdb_1, physname='/dba/sybase/TST_T1_ASE/dbccdbdevices/data_dbccdb_1.dat', size="100M" disk init name=log_dbccdb_1, physname='/dba/sybase/TST_T1_ASE/dbccdbdevices/log_dbccdb_1.dat', size="20M" go create database dbccdb on data_dbccdb_1=100 log on log_dbccdb_1=20 go exec sp_dboption dbccdb, 'trunc log', true go use dbccdb go checkpoint go
A l'issue de la création de la base dbccdb, le script installdbccdb doit être lancé pour la création des tables et des procédures stockées propres à la base dbccdb, ces dernières procédures stockées sont évoquées dans le paragraphe concernant l'analyse des résultats notamment.
isql -S TST_T1_ASE -U sa -P $SA_PWD -i $SYBASE/$SYBASE_ASE/scripts/installdbccdb
Une portion du cache de données doit être dédiée à dbccdb en créant un cache
nommé et en liant ce cache nommé à dbccdb. Un pool de buffer de 16 Ko doit par
ailleurs être alloué dans ce cache nommé dédié à dbccdb. A noter que l'on peut
parfaitement utiliser le default data cache en prenant soin de
mesurer l'impact éventuel son contenu
La taille du cache recommandée doit être au moins être égale à la somme de
la taille minimale préconisée pour le pool de buffer de 16 K avec la procédure
sp_plan_dbccdb et de la taille d'une page de pool de cette
valeur.
Taille du cache >= Taille du cache préconisée pour le pool de buffer de 16K + Taille d'une page de pool (512 K)
La création du cache nommé pour dbccdb s'effectue de manière classique avec
la procédure sp_cacheconfig.
exec sp_cacheconfig dbccdb_cache, "1792K
Dans le dernier cache nommé, un pool de buffer de 16 K doit être créé avec au minimum la taille préconisée par la procédure sp_plan_dbccdb.
exec sp_poolconfig dbccdb_cache, "1280K", "16K"
L'attribution du cache nommé à la base de données dbccdb s'effectue avec la procédure système sp_bindcache.
exec sp_bindcache dbccdb_cache, dbccdb
La base de données dbccdb requiert deux workspaces :
Un segment doit être créé pour chaque workspace pour contrôler son placement, ce qui améliore les performances.
exec sp_addsegment "scan_ws_dbtest", "dbccdb", "dbccdb_dev" exec sp_addsegment "text_ws_dbtest", "dbccdb", "dbccdb_log" go
Les workspaces doivent être créés en utilisant la procédure sp_dbcc_createws appartenant à la base de données dbccdb, chaque workspace doit posséder un nom unique.
sp_dbcc_createws dbccdb, segment_name, [workspace_name], [{scan|text}], "wssize[K|M]"
exec sp_dbcc_createws dbccdb, scanseg, scan_ws_dbtest, scan, "192K"
exec sp_dbcc_createws dbccdb, textseg, text_ws_dbtest, text, "48K"
Les tailles des workspaces spécifiées avec la
procédure sp_dbcc_createws sont les tailles recommandées données
avec sp_plan_dbccdb.
Il est impératif de préciser les attributs des bases de données cible, c'est-à-dire les bases de données pour lesquelles la commande dbcc checkstorage( ) sera exécutée.
dbcc checkstorage ne peut vérifier une base de données et en stocker
l'historique sans la spécification de ces attributs. Pour spécifier ces
attributs, la procédure sp_dbcc_updateconfig est prévue à cet
effet :
Les paramètres définis sont fournis par la procédure
sp_plan_dbccdb.
sp_dbcc_updateconfig db_target, "max worker processes", "nb worker processes"
sp_dbcc_updateconfig dbtest, "max worker processes","2"
L'application de cet attribut suppose la mise en place du parallélisme avec un nombre de worker processes qui doit être au minimum égal à 2 (voir sp_configure 'number of worker processes')
sp_dbcc_updateconfig db_target, "dbcc named cache", "nom_cache", "taille cache"
exec sp_dbcc_updateconfig dbtest, "dbcc named cache","dbccdb_cache", "1280K"
La taille correspond à la taille mémoire attribuée pour le pool de buffer de 16 Ko dans le cache nommé dédié à dbccdb.
sp_dbcc_updateconfig db_target, "scan workspace", nom_workspace
exec sp_dbcc_updateconfig dbtest , "scan workspace", "scan_ws_dbtest"
sp_dbcc_updateconfig db_target, "text workspace", nom_workspace
exec sp_dbcc_updateconfig dbtest , "text workspace", "text_ws_dbtest"
Il est possible de vérifier l'installation d'une base de données cible dans
la base dbccdb à l'aide de la procédure sp_dbcc_evaluatedb
(dbccdb)
exec sp_dbcc_evaluatedb
Recommended values for workspace size, cache size and process count are: Database name : dbtest current scan workspace size : 192K suggested scan workspace size : 192K current text workspace size : 48K suggested text workspace size : 48K current cache size : 1280K suggested cache size : 1280K current process count : 2 suggested process count : 2
dbcc checkstorage [ (database_name) ]
La commande dbcc checkstorage effectue les opérations suivantes :
Lorsque dbcc checkstorage trouve une faute dans la base de données cible, cette dernière est stockée dans la table dbcc_faults de la base dbccdb. Il existe deux types de fautes issues de la commande dbcc checkstorage
Certaines erreurs peuvent être dépendantes du contexte d'execution du dbcc, aussi, il est possible de filtrer les 'fausses' erreurs ( spurious ) relevées lors du dernier lancement de checkstorage.
La commande dbcc checkverify va vérifier chacune des erreurs reportée et éventuellement reclassifier le code erreur
set command_status_reporting on go exec dbcc checkverify ( [dbname] ) go
Une faute soft est une inconsistence dans ASE qui n'est pas généralement persistente. La plupart des fautes soft résultent d'inconsistences temporaires dans la base de données cible dues aux mises à jour des utilisateurs dans la base de données durant la commande dbcc checkstorage ou bien lorsque dbcc checkstorage rencontre des commandes DDL.
Ces fautes ne sont pas reproduites lors d'une seconde commande dbcc checkstorage. Lorsque ces fautes soft persistent dans des exécutions successives de dbcc checkstorage, elles peuvent indiquer une corruption.
Une faute hard est une corruption persistente d'ASE qui ne peut être corrigée en redémarrant ASE. Toutes les fautes hard ne sont pas équivalentes en gravité.
Quelques fautes hard peuvent être corrigées simplement en vidant la table affectée par l'erreur (truncate table), d'autres fautes hard sont résolues uniquement en restaurant une sauvegarde.
La commande sp_dbcc_runcheck, permet d'enchainer l'exécution
des commandes checkstorage, checkverify et summary report
exec sp_dbcc_runcheck [dbname]
Plusieurs procédures permettent d'obtenir les informations utiles provenant de la commande dbcc checkstorage. Ces dernières procédures sont résumées dans le tableau qui suit.
| Procédure de rapport | Description fonctionnelle |
|---|---|
| sp_dbcc_summaryreport | Affiche le résumé des données tel que le nombre de fautes graves ou mineures détectées. |
| sp_dbcc_faultreport | Affiche les informations détaillées pour chaque faute rapportée |
| sp_dbcc_fullreport | Affiche la configuration, les statistiques et les données de fautes pour une base de données ou un objet |
| sp_dbcc_differentialreport | Affiche les résultats comparatifs des opérations dbcc checkstorage réalisées pour une base de données spécifiée à des dates spécifiées par l'utilisateur |
Si la nature d'une base de données cible change, il est nécessaire de réévaluer la configuration dbccdb.
Le filtre awk suivant permet de transformer le résultat de la commande sp_plan_dbccdb en commandes sql générant la configuration de dbccdb
printf "sp_plan_dbccdb\ngo\n" | isql -S TST_T1_ASE -U sa -P $SA_PWD -o output.txt
cat output.txt
Recommended size for dbccdb database is 104MB (data = 102MB, log = 2MB). dbccdb database already exists with size 120MB. Recommended values for workspace size, cache size and process count are: dbname scan ws text ws cache comp mem process count master 624K 160K 640K 0K 1 tempdb 24640K 6176K 6164K 0K 2 model 64K 48K 640K 0K 1 sybsystemdb 64K 48K 640K 0K 1 sybsystemprocs 1632K 416K 640K 0K 1 dbccdb 1488K 384K 1280K 0K 2 SYB_STATS 30736K 7696K 7687K 0K 2 tempdb_ice 144K 48K 640K 0K 1
nawk -f convert_sp_plan_dbccdb.awk output.txt
use dbccdb
go
exec sp_dbcc_createws dbccdb, 'default', scan_ws, scan, '31M'
exec sp_dbcc_createws dbccdb, 'default', text_ws, text, '8M'
go
exec sp_dbcc_updateconfig SYB_STATS, 'max worker processes', '2'
exec sp_dbcc_updateconfig SYB_STATS, 'dbcc named cache', 'default data cache', '8M'
exec sp_dbcc_updateconfig SYB_STATS, 'scan workspace', scan_ws
exec sp_dbcc_updateconfig SYB_STATS, 'text workspace', text_ws
go
exec sp_dbcc_updateconfig master, 'max worker processes', '1'
exec sp_dbcc_updateconfig master, 'dbcc named cache', 'default data cache', '1M'
exec sp_dbcc_updateconfig master, 'scan workspace', scan_ws
exec sp_dbcc_updateconfig master, 'text workspace', text_ws
go
Écriture en une ligne:
printf "sp_plan_dbccdb\ngo\n" | isql -S TST_T1_ASE -U sa -P $SA_PWD | nawk -f convert_sp_plan_dbccdb.awk
| Version | Date | Commentaires |
|---|---|---|
| 1.0 | 07/2002 | Version initiale |
| 1.1 | 05/2009 | Ajout d'un script awk pour formater automatiquement le résultat de la procédure stockée sp_plan_dbccdb |
Sybase BOL :
dbcc checkstorage
Sybase BOL :
Checking database consistency
Sybase BOL :
dbcc stored procedures