Homogénéité des bases de données ASE - Commandes DBCC


1- Introduction

Avant la sauvegarde d'une base de données, la consistence d'une base de données doit être vérifiée. Ce document traite de l'utilisation des commandes dbcc pour vérifier et fixer la consistence d'une base de données.

2- Généralités sur les commandes dbcc

2-1- Inconsistence dans une base de données

Les tables et les indexes sont composés de chaînes de pages de 2K. Lorsqu'une page est allouée à un objet :

Les inconsistences peuvent se produire dans les allocations de pages aux objets.

Exemples :

Causes possibles :

2-2- Généralités sur les commandes dbcc

Le vérificateur de consistence des bases de données (Database Consistency Checker, dbcc) est un jeu de commandes utiles pour vérifier la consistence physique et logique d'une base de données.

Les commandes qui vérifient le chaînage de pages pour les objets bases de données sont :

Les commandes qui vérifient les allocations de pages pour les objets des bases de données sont :

2-3- Quand exécuter les commandes dbcc ?

Il est recommandé de vérifier l'homogénéité d'une base de données :

avant un dump d'une base de données

La consistence des bases de données doit être vérifiée avec le moindre impact sur les utilisateurs :

3- Vérification du chaînage de pages

3-1- dbcc checktable

La commande dbcc checktable s'exécute sur une table spécifique. Pour cette table, la commande effectue les opérations suivantes :

Si le segment de log possède son propre device, la commande vérifie la table syslogs et rapporte l'usage de l'espace et le pourcentage d'espace libre.

Syntaxe :

dbcc checktable ( {table_name | table_id} [,skip_ncindex] )
dbcc checktable (sales)
-
Checking sales

The total number of data pages in this table is 192.
Table has 7065 data rows.

Il est possible d'accélérer l'exécution de la commande en écartant la vérification sur les indexes non clusterisés.

dbcc checktable (sales, skip_ncindex)
-
Checking sales

The total number of data pages in this table is 192. Table has 7065 data rows.

3-2- dbcc checkdb

Cette commande s'exécute sur une base de données, lorsque la base de données n'est pas spécifiée, la vérification est réalisée sur la base de données courante.

Pour une base de données, dbcc checkdb exécute la commande dbcc checktable sur toutes les tables de la base de données.

Si l'option skip_ncindex est spécifiée, chaque index non clusterisé sur chaque table sera écarté de la vérification.

Syntaxe :

dbcc checkdb [ (database_name [, skip_ncindex ] ) ]
dbcc checkdb (pubs2)
    -
    Checking pubs2
    Checking sysobjects
    The total number of data pages in this table is 3.
    Table has 54 data rows.
    Checking sysindexes
    The total number of data pages in this table is 7.
    Table has 66 data rows.
    Checking syscolumns
    The total number of data pages in thîs table is 10.
    Table has 445 data rows.
    Checking systypes ...

3-3- dbcc checkcatalog

Si aucune base de données n'est spécifiée, la commande dbcc checkcatalog s'exécute sur la base de données courante. La commande dbcc checkcatalog vérifie les problèmes d'intégrité référentielle dans les tables systèmes de la base de données

A titre d'exemple, la commande dbcc checkcatalog

Syntaxe :

dbcc checkcatalog [(database_name)]
dbcc checkcatalog
-
Checking current database The following segments have been defined for database 6 (database name pubs2).

virtual start addr size segments
--------------------------------
6148    1536     0    1        2

4- Vérification des allocations de pages

4-1- dbcc tablealloc

La commande dbcc tablealloc s'exécute sur une table spécifique. Pour la table, la commande dbcc tablealloc

4-1-1- Options de la commande dbcc tablealloc

Options de reporting :

Options de résolution :

4-1-2- Syntaxe

dbcc tablealloc ({table_name | table_id}, index_id [, {full | optimized | fast | NULL}
[, {fix | nofix} ]])
dbcc tablealloc (titles, optimized)
-
    The default fix option of FIX is used for this
    TABLE: titles OBJID = 208003772
    INDID=1 FIRST=848 ROOT=864 SORT=1
    Data level:1. 2 Data pages and 2 Extents allocated.
    Indid :1. 1 Index pages and 2 Extents allocated.
    INDID=2 FIRST=872 ROOT=872 SORT=0
    Indid :2. 1 Index pages and 2 Extents allocated.
    TOTAL # of extents = 6
    Alloc page 768 (# of extent=2 used pgs=2 ref pgs=2)
    Alloc page 768 (# of extent=2 used pgs=3 ref pgs=3)
    Alloc page 512 (# of extent=1 used pgs=l ref pgs=l)
    Alloc page 768 (# of extent=1 used pgs=l ref pgs=l)
    Total (# of extent=6 used pages=7 ref pgs=7) in this database

4-2- dbcc indexalloc

La commande dbcc indexalloc s'exécute sur un index en particulier. La commande dbcc indexalloc

La commande dbcc indexalloc inclut les mêmes options que la commande dbcc tablealloc

Syntaxe:

dbcc indexalloc ({table_name | table_id}, index_id [, {full | optimized | fast | NULL}
[, {fix | nofix} ]])
dbcc indexalloc (authors, 1, full)
    The default fix option of FIX is used for this run.
    TABLE: authors OBJID = 16003088
    INDID=1 FIRST=760 ROOT=800 SORT=1
    Data level:1. 1 Data pages and 2 Extents allocated.
    indid :1. 1 index pages and 2 Extents allocated.
    TOTAL # of extents = 4
    Alloc page 512 (# of extent=2 used pgs=2 ref pgs=2)
    Alloc page 768 (# of extent=2 used pgs=2 ref pgs=2)
    Total (# of extent=4 used pages=4 ref pages=4) in thîs database

4-3- dbcc checkalloc

La commande dbcc checkalloc s'exécute sur la base de données de courante si aucune base de données n'est spécifiée. La commande dbcc checkalloc réalise la commande dbcc tablealloc sur toutes les tables de la base de données. La commande dbcc checkalloc ne possède par d'options de reporting, en revanche les options fix | nofix sont disponibles.

Syntaxe :

dbcc checkalloc [ ( database-name [, fix | nofix ] ) ]
dbcc checkalloc (pubs2)
-
Checking pubs2
*************************************************
TABLE: sysobjects OBJID = 1
INDID=1 FIRST=l ROOT=8 SORT=O
Data level:1. 3 Data pages and 1 Extents allocated.
Indid :1. 1 Index pages and 1 Extents allocated.
INDID=2 FIRST=16 ROOT=16 SORT=O
Indid :2. 1 Index pages and 1 Extents allocated.
TOTAL # of extents = 3
 ...

5- Recommandations

Pour des performances accrues :

Conserver également les enregistrements sur le temps mis par le serveur pour exécuter les commandes dbcc.

6- Suppression d'une base de données endommagée

Si une base de données possède des inconsistences, le serveur peut considérer la base de données corrompue.

dans cette situation, la base de données ne peut être supprimée avec la commande drop database

la base de données ne peut être supprimée qu'avec la commande dbcc dbrepair

Syntaxe :

dbcc dbrepair (database_name, dropdb)
dbcc dbrepair (pubs2, dropdb)

Annexe

Historique

Version Date Commentaires
1.0 08/2002 Version initiale

Liens

Sybase Adaptive Server Enterprise 15.0.2 Books OnLine - System Administration Guide vol2, Checking Database Consistency