DBCC CHECKALLOC (Transact-SQL)
S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
Vérifie la cohérence des structures d'allocation de l'espace disque pour une base de données spécifiée.
Conventions de la syntaxe Transact-SQL
Syntaxe
DBCC CHECKALLOC
[
( database_name | database_id | 0
[ , NOINDEX
| , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ]
)
[ WITH
{
[ ALL_ERRORMSGS ]
[ , NO_INFOMSGS ]
[ , TABLOCK ]
[ , ESTIMATEONLY ]
}
]
]
Notes
Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 et versions antérieures, consultez Versions antérieures de la documentation.
Arguments
database_name | database_id | 0
Nom ou ID de la base de données sur laquelle l’allocation et l’utilisation des pages doivent être vérifiées.
En l'absence de spécification, ou si 0 est spécifié, la base de données actuelle est utilisée.
Les noms de base de données doivent suivre les règles applicables aux identificateurs.
NOINDEX
Spécifie que les index non cluster pour les tables utilisateur ne doivent pas être vérifiés.
NOINDEX
est conservé seulement pour la compatibilité descendante et n’affecte pas DBCC CHECKALLOC
.
REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD
Spécifie que DBCC CHECKALLOC
répare les erreurs trouvées. database_name doit être en mode mono-utilisateur.
REPAIR_ALLOW_DATA_LOSS
Tente de réparer toutes les erreurs trouvées. Ces réparations peuvent entraîner des pertes de données.
REPAIR_ALLOW_DATA_LOSS
est la seule option qui permet de réparer les erreurs d’allocation.REPAIR_FAST
La syntaxe n'est conservée que pour la compatibilité descendante. Aucune réparation n'est effectuée.
REPAIR_REBUILD
Non applicable.
Important
N'utilisez les options REPAIR qu'en dernier recours. Pour réparer les erreurs, nous vous recommandons d'effectuer une restauration à partir d'une sauvegarde. Les opérations de réparation ne prennent en compte aucune des contraintes qui peuvent exister sur les tables ou entre tables. Si la table spécifiée est impliquée dans une ou plusieurs contraintes, nous vous recommandons d’exécuter DBCC CHECKCONSTRAINTS
après une réparation. Si vous devez utiliser REPAIR, exécutez DBCC CHECKDB
sans option de réparation afin de déterminer le niveau de réparation à utiliser. Si vous utilisez le niveau REPAIR_ALLOW_DATA_LOSS
, nous vous recommandons de sauvegarder la base de données avant d’exécuter DBCC CHECKDB
avec cette option.
WITH
Permet de spécifier des options.
ALL_ERRORMSGS
Affiche tous les messages d'erreur. Tous les messages d'erreur sont affichés par défaut. La spécification ou non de cette option n'a aucun effet.
NO_INFOMSGS
Supprime tous les messages d'information, ainsi que le rapport sur l'espace utilisé.
TABLOCK
Permet à la commande DBCC d'obtenir un verrou de base de données exclusif.
ESTIMATEONLY
Affiche une estimation de la quantité d’espace de
tempdb
requise pour exécuterDBCC CHECKALLOC
quand toutes les autres options sont spécifiées.
Notes
DBCC CHECKALLOC
vérifie l’allocation de toutes les pages de la base de données, quel que soit le type de page ou le type d’objet auquel elles appartiennent. Il valide également les différentes structures internes qui sont utilisées pour garder la trace de ces pages et des relations entre elles.
Si NO_INFOMSGS
n’est pas spécifié, DBCC CHECKALLOC
collecte les informations d’utilisation de l’espace pour tous les objets de la base de données. Ces informations sont imprimées avec les erreurs détectées.
Notes
La fonctionnalité DBCC CHECKALLOC
est incluse dans DBCC CHECKDB et dans DBCC CHECKFILEGROUP. Cela signifie qu’il n’est pas nécessaire d’exécuter DBCC CHECKALLOC
indépendamment de ces instructions. DBCC CHECKALLOC
ne vérifie pas les données FILESTREAM. FILESTREAM stocke les objets BLOB dans le système de fichiers.
Instantané de base de données interne
DBCC CHECKALLOC
utilise un instantané de base de données interne pour assurer la cohérence transactionnelle nécessaire pour effectuer ces vérifications. S’il n’est pas possible de créer un instantané ou si TABLOCK
est spécifié, DBCC CHECKALLOC
tente d’acquérir un verrou exclusif (X
) sur la base de données pour obtenir la cohérence nécessaire.
Notes
L’exécution de DBCC CHECKALLOC
sur tempdb
n’effectue aucune vérification. La raison en est que, pour des raisons de performances, les instantanés de base de données ne sont pas disponibles sur tempdb
. Cela signifie que la cohérence transactionnelle requise ne peut pas être obtenue. Arrêtez et démarrez le moteur de base de données pour résoudre les problèmes d’allocation de tempdb
. Cette action supprime la base de données tempdb
, puis la recrée.
Comprendre les messages d’erreur de DBCC
Une fois la commande DBCC CHECKALLOC
terminée, un message est écrit dans le journal des erreurs SQL Server. Si la commande DBCC est correctement exécutée, le message indique que l’exécution a réussi ainsi que la durée d’exécution de la commande. Si la commande DBCC est interrompue avant la fin de la vérification en raison d’une erreur, le message indique que la commande n’a pas abouti et précise une valeur d’état ainsi que la durée d’exécution de la commande. Le tableau suivant répertorie et décrit les valeurs d'état pouvant être incluses dans le message.
State | Description |
---|---|
0 | Erreur numéro 8930 générée. Ceci indique une corruption des métadonnées qui a provoqué l'arrêt de la commande DBCC. |
1 | Erreur numéro 8967 générée. Une erreur DBCC interne s'est produite. |
2 | Une erreur s'est produite lors de la réparation de la base de données en mode urgence. |
3 | Ceci indique une corruption des métadonnées qui a provoqué l'arrêt de la commande DBCC. |
4 | Une assertion ou une violation d'accès a été détectée. |
5 | Une erreur inconnue s'est produite et a arrêté la commande DBCC. |
Rapport d’erreurs
Un fichier minidump (SQLDUMP<nnnn>.txt
) est créé dans le répertoire LOG
de SQL Server chaque fois que DBCC CHECKALLOC
détecte une erreur d’endommagement. Lorsque les fonctions de collecte des données d'utilisation des fonctionnalités et de rapport d'erreurs sont activées pour l'instance de SQL Server, ce fichier est automatiquement transféré à Microsoft. Les données collectées sont utilisées pour améliorer les fonctionnalités SQL Server.
Le fichier de vidage contient les résultats de la commande DBCC CHECKALLOC
ainsi que des informations de diagnostic supplémentaires. Ce fichier contient des listes de contrôle d'accès discrétionnaire (DACL, Discretionary Access Control Lists) avec accès restreint. L’accès est limité au compte de service SQL Server et aux membres du rôle sysadmin. Par défaut, le rôle sysadmin contient tous les membres du groupe Windows BUILTIN\Administrators et du groupe Administrateurs local. La commande DBCC n’échoue pas si le processus de collecte des données échoue.
Résolution des erreurs
Si DBCC CHECKALLOC
signale des erreurs, nous vous recommandons de restaurer la base de données à partir de la sauvegarde de la base de données au lieu d’exécuter une réparation. S’il n’existe pas de sauvegarde, l’exécution d’une réparation peut corriger les erreurs signalées ; cependant, la correction de ces erreurs risque de nécessiter la suppression de plusieurs pages, et donc de données.
Une réparation peut être exécutée dans une transaction utilisateur. Ceci permet d'annuler les modifications. Si des modifications sont annulées, la base de données contiendra encore des erreurs et il faudra donc la restaurer à partir d’une sauvegarde. Une fois les réparations effectuées, sauvegardez la base de données.
Jeux de résultats
Les tableaux suivants décrivent les informations retournées par DBCC CHECKALLOC
.
Élément | Description |
---|---|
FirstIAM | À usage interne uniquement |
Root | À usage interne uniquement |
Dpages | Nombre de pages de données. |
Pages utilisées (Pages used) | Pages allouées. |
Extensions dédiées (Dedicated extents) | Extensions allouées à l'objet En cas d'utilisation de pages d'allocation mixtes, certaines pages allouées peuvent n'avoir aucune extension. |
DBCC CHECKALLOC
fournit aussi un résumé de l’allocation pour chaque index et chaque partition de chaque fichier. Ce résumé décrit la distribution des données.
Élément | Description |
---|---|
Pages réservées (Reserved pages) | Pages allouées à l'index et pages inutilisées dans les extensions allouées. |
Pages utilisées (Used pages) | Pages allouées et utilisées par l'index. |
ID de partition (Partition ID) | À usage interne uniquement |
ID d'unité d'allocation | À usage interne uniquement |
Données dans la ligne (In-row data) | Les pages contiennent des données de segment de mémoire ou d'index. |
Données LOB (LOB data) | Les pages contiennent des données de type varchar(max), nvarchar(max), varbinary(max), text, ntext, xml et image. |
Données de dépassement de ligne (Row-overflow data) | Les pages contiennent des données de colonne de longueur variable qui ont été envoyées hors ligne. |
DBCC CHECKALLOC
retourne le jeu de résultats suivant (les valeurs peuvent varier), excepté si ESTIMATEONLY
ou NO_INFOMSGS
est spécifié.
DBCC results for 'master'.
***************************************************************
Table sysobjects Object ID 1.
Index ID 1 FirstIAM (1:11) Root (1:12) Dpages 22.
Index ID 1. 24 pages used in 5 dedicated extents.
Index ID 2 FirstIAM (1:1368) Root (1:1362) Dpages 10.
Index ID 2. 12 pages used in 2 dedicated extents.
Index ID 3 FirstIAM (1:1392) Root (1:1408) Dpages 4.
Index ID 3. 6 pages used in 0 dedicated extents.
Total number of extents is 7.
***************************************************************
'...'
***************************************************************
Table spt_server_info Object ID 1938105945.
Index ID 1 FirstIAM (1:520) Root (1:508) Dpages 1.
Index ID 1. 3 pages used in 0 dedicated extents.
Total number of extents is 0.
***************************************************************
Processed 52 entries in sysindexes for database ID 1.
File 1. Number of extents = 210, used pages = 1126, reserved pages = 1280.
File 1 (number of mixed extents = 73, mixed pages = 184).
Object ID 1, Index ID 0, data extents 5, pages 24, mixed extent pages 9.
'...'
Object ID 1938105945, Index ID 0, data extents 0, pages 3, mixed extent pages 3.
Total number of extents = 210, used pages = 1126, reserved pages = 1280 in this database.
(number of mixed extents = 73, mixed pages = 184) in this database.
CHECKALLOC found 0 allocation errors and 0 consistency errors in database 'master'.
DBCC results for 'master'.
***************************************************************
Table sys.sysrowsetcolumns Object ID 4.
Index ID 1, partition ID 262144, alloc unit ID 262144 (type In-row data). FirstIAM (1:98). Root (1:94). Dpages 7.
Index ID 1, partition ID 262144, alloc unit ID 262144 (type In-row data). 9 pages used in 1 dedicated extents.
Index ID 1, partition ID 262144, alloc unit ID 262398 (type Row-overflow data). FirstIAM (0:0). Root (0:0). Dpages 0.
Index ID 1, partition ID 262144, alloc unit ID 262398 (type Row-overflow data). 0 pages used in 0 dedicated extents.
Total number of extents is 1.
...
***************************************************************
Processed 201 entries in system catalog for database ID 1.
File 1. Number of extents = 44, used pages = 300, reserved pages = 345.
File 1 (number of mixed extents = 29, mixed pages = 225).
Object ID 4, index ID 1, partition ID 262144, alloc unit ID 262144 (type In-row data), data extents 1, pages 9, mixed extent pages 8.
Object ID 5, index ID 1, partition ID 327680, alloc unit ID 327680 (type In-row data), data extents 0, pages 2, mixed extent pages 2.
Object ID 7, index ID 1, partition ID 458752, alloc unit ID 458752 (type In-row data), data extents 0, pages 5, mixed extent pages 5.
Object ID 8, index ID 0, partition ID 524288, alloc unit ID 524288 (type In-row data), data extents 0, pages 2, mixed extent pages 2.
Object ID 13, index ID 1, partition ID 851968, alloc unit ID 851968 (type In-row data), data extents 1, pages 9, mixed extent pages 8.
Object ID 15, index ID 1, partition ID 983040, alloc unit ID 983040 (type In-row data), data extents 0, pages 2, mixed extent pages 2.
Object ID 26, index ID 1, partition ID 281474978414592, alloc unit ID 1703937 (type In-row data), data extents 0, pages 3, mixed extent pages 3.
Object ID 27, index ID 1, partition ID 281474978480128, alloc unit ID 1769473 (type In-row data), data extents 0, pages 3, mixed extent pages 3.
Object ID 27, index ID 2, partition ID 562949955190784, alloc unit ID 1769474 (type In-row data), index extents 0, pages 3, mixed extent pages 3.
...
Object ID 1179151246, index ID 1, partition ID 72057594038845440, alloc unit ID 13435136 (type In-row data), data extents 2, pages 18, mixed extent pages 8.
Object ID 1179151246, index ID 2, partition ID 72057594038910976, alloc unit ID 13566208 (type In-row data), index extents 1, pages 16, mixed extent pages 8.
Object ID 1911677858, index ID 0, partition ID 72057594039631872, alloc unit ID 15073536 (type In-row data), data extents 0, pages 2, mixed extent pages 2.
Total number of extents = 41, used pages = 289, reserved pages = 323 in this database.
(number of mixed extents = 27, mixed pages = 211) in this database.
CHECKALLOC found 0 allocation errors and 0 consistency errors in database 'master'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Quand ESTIMATEONLY
est spécifié, DBCC CHECKALLOC
retourne le jeu de résultats suivant.
Estimated TEMPDB space needed for CHECKALLOC (KB)
-------------------------------------------------
34
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Autorisations
Nécessite l’appartenance au rôle serveur fixe sysadmin ou au rôle de base de données fixe db_owner.
Exemples
L'exemple suivant exécute DBCC CHECKALLOC
pour la base de données actuelle et pour la base de données AdventureWorks2022
.
-- Check the current database.
DBCC CHECKALLOC;
GO
-- Check the AdventureWorks2022 database.
DBCC CHECKALLOC (AdventureWorks2022);
GO