DBCC CHECKFILEGROUP (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Vérifie l'allocation et l'intégrité de la structure de toutes les tables et vues indexées dans le groupe de fichiers spécifié de la base de données active.

Conventions de la syntaxe Transact-SQL

Syntaxe

DBCC CHECKFILEGROUP
[
    [ ( { filegroup_name | filegroup_id | 0 }
        [ , NOINDEX ]
  ) ]
    [ WITH
        {
            [ ALL_ERRORMSGS | NO_INFOMSGS ]
            [ , TABLOCK ]
            [ , ESTIMATEONLY ]
            [ , PHYSICAL_ONLY ]
            [ , MAXDOP  = number_of_processors ]
        }
    ]
]

Notes

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 et versions antérieures, consultez Versions antérieures de la documentation.

Arguments

filegroup_name

Nom du groupe de fichiers dans la base de données active, pour lequel l’allocation de table et l’intégrité de la structure doivent être vérifiées. Si vous ne définissez pas cet argument ou si vous lui attribuez la valeur 0, le groupe de fichiers primaire est utilisé par défaut. Les noms de groupe de fichiers doivent suivre les règles applicables aux identificateurs.
filegroup_name ne peut pas être un groupe de fichiers FILESTREAM.

filegroup_id

Numéro d’identification (ID) du groupe de fichiers dans la base de données active, pour lequel l’allocation de table et l’intégrité de la structure doivent être vérifiées.

NOINDEX

Spécifie de ne pas faire de vérifications intensives des index non cluster pour les tables utilisateur. Cela diminue la durée d'exécution globale. NOINDEX n’affecte pas les tables système, car DBCC CHECKFILEGROUP vérifie toujours tous les index des tables système.

ALL_ERRORMSGS

Affiche un nombre illimité d'erreurs par objet. 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.

TABLOCK

Fait que DBCC CHECKFILEGROUP obtient des verrouillages au lieu d’utiliser un instantané de base de données interne.

ESTIMATE ONLY

Affiche une estimation de la quantité d’espace de tempdb nécessaire pour exécuter DBCC CHECKFILEGROUP avec toutes les autres options spécifiées.

PHYSICAL_ONLY

Limite la vérification à l'intégrité de la structure physique de la page, des en-têtes d'enregistrement et de la structure physique des arbres B (B-trees). Conçue pour effectuer une vérification à faible charge de la cohérence physique du groupe de fichiers, cette vérification peut également détecter les pages endommagées et les erreurs matérielles courantes susceptibles de compromettre les données. Une exécution complète de DBCC CHECKFILEGROUP peut prendre beaucoup plus de temps que dans les versions antérieures. Ce comportement se produit pour les raisons suivantes :

  • Les vérifications logiques sont plus complètes.
  • Certaines des structures sous-jacentes à vérifier sont plus complexes.
  • De nombreuses vérifications nouvelles ont été introduites pour inclure les nouvelles fonctionnalités.

Notes

De manière générale, la documentation SQL Server utilise le terme B-tree en référence aux index. Dans les index rowstore, SQL Server implémente une structure B+. Cela ne s’applique pas aux index columnstore ou aux magasins de données en mémoire. Pour plus d’informations, consultez le Guide de conception et d’architecture d’index SQL Server et Azure SQL.

Par conséquent, l’utilisation de l’option PHYSICAL_ONLY étant susceptible de réduire considérablement la durée d’exécution de DBCC CHECKFILEGROUP sur les grands groupes de fichiers, elle est recommandée pour une utilisation fréquente sur des systèmes de production. Nous vous recommandons d’effectuer régulièrement une exécution complète de DBCC CHECKFILEGROUP. La fréquence de ces exécutions dépend de facteurs spécifiques à chaque entreprise et à chaque environnement de production. PHYSICAL_ONLY implique toujours NO_INFOMSGS et n’est autorisé avec aucune des options de réparation.

Notes

La spécification de l’option PHYSICAL_ONLY fait que DBCC CHECKFILEGROUP va ignorer toutes les vérifications des données FILESTREAM.

MAXDOP

S’applique à : SQL Server 2014 Service Pack 2 et ultérieur

Remplace l’option de configuration max degree of parallelism de sp_configure pour l’instruction. MAXDOP peut être supérieur à la valeur configurée avec sp_configure. Si MAXDOP dépasse la valeur configurée avec Resource Governor, le moteur de base de données utilise la valeur MAXDOP de Resource Governor, décrite dans ALTER WORKLOAD GROUP (Transact-SQL). Toutes les règles sémantiques utilisées avec l’option de configuration du degré maximal de parallélisme sont applicables quand vous utilisez l’indicateur de requête MAXDOP. Pour plus d’informations, consultez Configurer l’option de configuration du serveur max degree of parallelism.

Attention

Si MAXDOP est défini sur zéro, le serveur choisit le degré maximal de parallélisme.

Notes

DBCC CHECKFILEGROUP et DBCC CHECKDB sont des commandes DBCC similaires. La différence principale est que la commande DBCC CHECKFILEGROUP est limitée au groupe de fichiers unique spécifié et aux tables requises.

DBCC CHECKFILEGROUP effectue les commandes suivantes :

L’exécution de DBCC CHECKALLOC ou de DBCC CHECKTABLE séparément de DBCC CHECKFILEGROUP n’est pas obligatoire.

Instantané de base de données interne

DBCC CHECKFILEGROUP utilise un instantané de base de données interne pour fournir la cohérence transactionnelle nécessaire pour effectuer ces vérifications. Pour plus d’informations, consultez Voir la taille du fichier partiellement alloué d’un instantané de base de données (Transact-SQL) et la section Utilisation d’un instantané de base de données interne DBCC de DBCC (Transact-SQL).

Si un instantané ne peut pas être créé ou si l’option TABLOCK est spécifiée, DBCC CHECKFILEGROUP acquiert des verrous pour obtenir la cohérence requise. Dans ce cas, un verrou de base de données exclusif est requis pour effectuer les vérifications d'allocation, tandis que des verrous de table partagés sont nécessaires pour effectuer les vérifications de table. TABLOCK accélère l’exécution de DBCC CHECKFILEGROUP sur une base de données dont la charge est importante, mais diminue la concurrence disponible sur la base de données pendant l’exécution de DBCC CHECKFILEGROUP.

Notes

L’exécution de DBCC CHECKFILEGROUP sur tempdb n’effectue aucune vérification d’allocation et doit acquérir des verrous de table partagés pour vérifier les tables. 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.

Vérifier des objets en parallèle

Par défaut, DBCC CHECKFILEGROUP effectue une vérification parallèle des objets. Le degré de parallélisme est automatiquement défini par le processeur de requêtes. Le degré maximum de parallélisme est configuré de la même manière que les requêtes parallèles. Pour limiter le nombre maximal de processeurs disponibles pour la vérification DBCC, utilisez sp_configure. Pour plus d’informations, consultez Configurer l’option de configuration du serveur max degree of parallelism.

La vérification parallèle peut être désactivée avec l’indicateur de trace 2528. Pour plus d’informations, consultez Indicateurs de trace (Transact-SQL).

Index non cluster sur des groupes de fichiers distincts

Si un index non cluster du groupe de fichiers spécifié est associé à une table d’un autre groupe de fichiers, l’index n’est pas vérifié, car la table de base n’est pas disponible pour être validée.

Si une table du groupe de fichiers spécifié a un index non cluster dans un autre groupe de fichiers, l’index non cluster n’est pas vérifié pour les raisons suivantes :

  • La structure de la table de base n’est pas dépendante de la structure d’un index non cluster. Les index non cluster n’ont pas à être analysés pour permettre la validation de la table de base.
  • La commande DBCC CHECKFILEGROUP vérifie les objets seulement dans le groupe de fichiers spécifié.

Un index cluster et une table ne peuvent pas se trouver dans des groupes de fichiers différents : les considérations précédentes s’appliquent donc seulement aux index non cluster.

Tables partitionnées dans des groupes de fichiers distincts

Quand une table partitionnée se trouve sur plusieurs groupes de fichiers, DBCC CHECKFILEGROUP vérifie les ensembles de lignes de partition présents sur le groupe de fichiers spécifiés et ignore les ensembles de lignes dans les autres groupes de fichiers. Le message d’information 2594 indique les partitions qui n’ont pas été vérifiées. Les index non cluster qui ne figurent pas dans le groupe de fichiers spécifié ne sont pas vérifiés.

Comprendre les messages d’erreur de DBCC

Une fois la commande DBCC CHECKFILEGROUP 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 CHECKFILEGROUP détecte une erreur d’altération. Quand les fonctionnalités Rapport d’erreurs et de collecte des données Utilisation de fonctionnalités 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 CHECKFILEGROUP 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 en cas d’échec du processus de collecte des données.

Résolution des erreurs

Si des erreurs sont signalées par DBCC CHECKFILEGROUP, il est recommandé de restaurer la base de données à partir de la sauvegarde de cette dernière. Les options de réparation ne peuvent pas être spécifiées sur DBCC CHECKFILEGROUP.

Si aucune sauvegarde n’existe, l’exécution de DBCC CHECKDB avec une option de réparation spécifiée corrige les erreurs signalées. L'option de réparation à utiliser est spécifiée à la fin de la liste des erreurs signalées. La correction des erreurs à l'aide de l'option REPAIR_ALLOW_DATA_LOSS peut nécessiter la suppression de certaines pages et, par conséquent, de certaines données.

Jeux de résultats

DBCC CHECKFILEGROUP retourne le jeu de résultats suivant (les valeurs peuvent varier) :

  • Sauf si ESTIMATEONLY ou NO_INFOMSGS est spécifié.
  • Pour la base de données active, si aucune base de données n’est spécifiée, que des options soient ou non définies (excepté NOINDEX).
DBCC results for 'master'.
DBCC results for 'sys.sysrowsetcolumns'.
There are 630 rows in 7 pages for object 'sys.sysrowsetcolumns'.
DBCC results for 'sys.sysrowsets'.
There are 97 rows in 1 pages for object 'sys.sysrowsets'.
DBCC results for 'sysallocunits'.
There are 195 rows in 3 pages for object 'sysallocunits'.
  
There are 2340 rows in 16 pages for object 'spt_values'.
DBCC results for 'MSreplication_options'.
There are 2 rows in 1 pages for object 'MSreplication_options'.
CHECKFILEGROUP found 0 allocation errors and 0 consistency errors in database 'master'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Si NO_INFOMSGS est spécifié, DBCC CHECKFILEGROUP retourne :

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Si ESTIMATEONLY est spécifié, DBCC CHECKFILEGROUP retourne (les valeurs peuvent varier) :

Estimated TEMPDB space needed for CHECKALLOC (KB)
-------------------------------------------------
15
  
(1 row(s) affected)
  
Estimated TEMPDB space needed for CHECKTABLES (KB)
--------------------------------------------------
207
  
(1 row(s) affected)
  
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Autorisations

Nécessite l’appartenance au rôle de serveur fixe sysadmin ou au rôle de base de données fixe db_owner .

Exemples

R. Vérifier le groupe de fichiers PRIMARY de la base de données

L'exemple suivant vérifie le groupe de fichiers primaire de la base de données active.

DBCC CHECKFILEGROUP;
GO

B. Vérifier le groupe de fichiers PRIMARY de la base de données AdventureWorks sans index non cluster

L’exemple suivant vérifie le groupe de fichiers principal de la base de données AdventureWorks2022 (à l’exception des index non-cluster) en spécifiant le numéro d’identification du groupe de fichiers principal et NOINDEX.

USE AdventureWorks2022;
GO
DBCC CHECKFILEGROUP (1, NOINDEX);
GO

C. Vérifier le groupe de fichiers PRIMARY avec des options

L'exemple suivant vérifie le groupe de fichiers primaire de la base de données master et spécifie l'option ESTIMATEONLY.

USE master;
GO
DBCC CHECKFILEGROUP (1)
WITH ESTIMATEONLY;

Voir aussi