Message d’erreur lorsque vous exécutez la commande DBCC CHECKDB sur un ordinateur qui contient une base de données SQL Server

Cet article explique comment contourner le problème qui se produit lorsque vous exécutez la DBCC CHECKDB commande sur un ordinateur qui contient une base de données SQL Server.

Version d’origine du produit : SQL Server 2008
Numéro de la base de connaissances d’origine : 960791

Symptômes

Prenons l’exemple du scénario suivant :

  • Vous restaurez une base de données Microsoft SQL Server 2008 ou SQL Server 2005 à partir d’une sauvegarde.

  • Pendant le processus de restauration, vous recevez des erreurs qui vous empêchent de restaurer la base de données.

  • Vous restaurez correctement la base de données à partir de la même sauvegarde à l’aide de l’option CONTINUE_AFTER_ERROR.

Dans ce scénario, lorsque vous exécutez la commande DBCC CHECKDB sur l’ordinateur qui contient la base de données SQL Server, vous recevez un message d’erreur semblable au suivant :

Msg 8967, Niveau 16, État 216, <Nom> du serveur, Ligne 2
Une erreur interne s’est produite dans DBCC, ce qui a empêché le traitement ultérieur. Veuillez contacter le support technique.
Résultats DBCC pour «< nom> de la base de données ».

Msg 8921, Niveau 16, État 1, Nom du <>serveur, Ligne 1

Vérification terminée. Une défaillance a été détectée lors de la collecte des faits. Il est possible que tempdb ne soit pas disponible ou qu’une table système soit incohérente. Vérifiez les erreurs précédentes.

En outre, un message semblable à ce qui suit peut s’afficher dans le journal des erreurs SQL Server :

2007-05-26 07 :13 :49.21 spid58 DBCC a rencontré une page avec un LSN supérieur à la fin actuelle du journal LSN (<LSN>) pour sa base de données interne instantané. Impossible de lire la page (id de fichier :id de page), base de données '<nom de la base de données' (ID de base de données ID> de base de données), LSN = (<LSN>), type = 32, isInSparseFile = 1. Réexécutez cette commande DBCC.

Cause

Ce problème se produit si la DBCC CHECKDB commande ne peut pas effectuer les vérifications nécessaires pour confirmer la cohérence de la base de données. Ces vérifications n’ont pas pu être effectuées pour de nombreuses raisons. Par exemple, ce comportement peut se produire s’il existe des incohérences fondamentales dans la base de données, telles que des incohérences de métadonnées ou des instantané d’altération de la base de données. Pour plus d’informations sur la cause spécifique de cette erreur, examinez les différents états affichés dans le message d’erreur. Dans le scénario décrit dans la section Symptômes, le message d’état 216 indique que la DBCC CHECKDB commande a lu une page du instantané interne qui a un numéro séquentiel de journal (LSN) plus grand que la fin du journal LSN. Ce comportement peut se produire si vous restaurez des bases de données à l’aide de l’option CONTINUE_AFTER_ERROR .

Solution de contournement

Pour contourner ce problème, utilisez l’indicateur TABLOCK avec la DBCC CHECKDB commande . Cela permet à la DBCC CHECKDB commande de se terminer sans générer le message d’erreur.

Pour plus d’informations sur les indicateurs TABLOCK, visitez le site web Microsoft suivant : Indicateurs (Transact-SQL) - Table.