Message d’erreur lorsque vous exécutez des commandes DBCC CHECK dans SQL Server : « la base de données ne peut pas être verrouillée exclusivement pour effectuer l’opération »

N° de bogue : 489609 (SQLBUDT)

Symptômes

Dans le de Microsoft SQL Server, vous pouvez recevoir un message d’erreur lorsque vous exécutez une des commandes DBCC suivantes :

  • DBCC CHECKDB

  • DBCC CHECKTABLE

  • DBCC CHECKALLOC

  • DBCC CHECKCATALOG

  • DBCC CHECKFILEGROUP

Le message d’erreur contient le texte suivant :

Msg 5030, niveau 16, état 12, ligne 1, la base de données n’a pas pu être verrouillé exclusivement pour effectuer l’opération.
Msg 7926, niveau 16, état 1, ligne 1
L’instruction de vérification est abandonnée. La base de données n’a pas pu être vérifié comme un instantané de la base de données n’a pas pu être créé et la base de données ou la table ne peut pas être verrouillé. Pour plus d’informations lorsque ce comportement est normal et les solutions de contournement, consultez la documentation en ligne. Consultez également les erreurs précédentes pour plus de détails.


Si vous avez planifié les tâches du plan de maintenance qui effectuent des contrôles d’intégrité de base de données, un message d’erreur semblable au suivant peut être enregistré dans le fichier journal pour le plan correspondant :

Microsoft (r) Server Maintenance utilitaire (Unicode) Version 9.0.2047
Rapport a été généré sur «ComputerName».
Plan de maintenance : PlanForReadOnlyDb
Durée : 00:00:52
État : Avertissement : Échec de l’une ou plusieurs tâches...
Détails :
Base de données tâche vérifier l’intégrité (nom_ordinateur)
Vérifie l’intégrité de la base de données sur nom_ordinateur
Bases de données : AdventureWorks, msdb, PassDb, ventes, test1 inclure les index
Début de la tâche :
DateTime.
Fin de la tâche :
DateTime.
Failed:(-1073548784) l’exécution de la requête « DBCC CHECKDB WITH NO_INFOMSGS
"a échoué avec l’erreur suivante : « la base de données a pu pas être verrouillée exclusivement pour effectuer l’opération. L’instruction de vérification est abandonnée. La base de données n’a pas pu être vérifié comme un instantané de la base de données n’a pas pu être créé et la base de données ou la table ne peut pas être verrouillé. Pour plus d’informations lorsque ce comportement est normal et les solutions de contournement, consultez la documentation en ligne. "Consultez également les erreurs précédentes pour plus de détails. » Causes d’erreurs possibles : problèmes liés à la propriété ne pas correctement requête, « ResultSet », paramètres non définis correctement ou connexion non établie correctement.

Cause

Ce problème se produit si les conditions suivantes sont remplies :

  • Au moins une autre connexion utilise la base de données sur lequel vous exécutez la commande DBCC CHECK.

  • La base de données contient au moins un groupe de fichiers comme étant en lecture seule.

À partir de SQL Server 2005, les commandes DBCC CHECK créer et utilisent une capture instantanée de base de données interne pour des raisons de cohérence lors de la commande effectue toutes les vérifications. S’il existe un groupe de fichiers en lecture seule dans la base de données, la capture instantanée de base de données interne n’est pas créée. Pour continuer à effectuer les vérifications, la commande DBCC CHECK essaie d’acquérir un verrou de base de données EX. Si d’autres utilisateurs sont connectés à cette base de données, cette tentative d’acquérir un verrou EX échoue. Par conséquent, vous recevez un message d’erreur.

Résolution

Pour résoudre ce problème, suivez ces étapes au lieu d’exécuter la commande DBCC CHECK par rapport à la base de données :

  1. Créer une capture instantanée de base de données de la base de données pour lequel vous souhaitez effectuer les vérifications. Pour plus d’informations sur la création d’une capture instantanée de base de données, consultez la rubrique « Création d’une capture instantanée de base de données (Transact-SQL) » dans la documentation en ligne de SQL Server.

  2. Exécutez la commande DBCC CHECK sur la capture instantanée de base de données.

  3. Supprimer la capture instantanée de base de données une fois la commande DBCC CHECK terminée.

État

Microsoft a confirmé l'existence de ce problème dans les produits Microsoft répertoriés dans la section « S'applique à ».

Plus d'informations

Pour plus d’informations sur l’utilisation de la commande DBCC CHECK sur la capture instantanée de base de données interne, consultez la rubrique « DBCC (Transact-SQL) » dans la rubrique « DBCC interne de base de données utilisation des snapshots » dans la documentation en ligne de SQL Server 2005.

Pour reproduire ce problème, exécutez les commandes suivantes dans SQL Server :

-- Open a new query that is named conn1, and then create a new database.
CREATE DATABASE DBTESTE3
GO
-- Add a new file group.
ALTER DATABASE DBTESTE3 ADD FILEGROUP FGTESTE
GO
-- Add a file to the new file group.
ALTER DATABASE DBTESTE3 ADD FILE (NAME=DBTESTE3_Data2, FILENAME='C:\DBTESTE3_Data2.ndf')
TO FILEGROUP FGTESTE
GO
-- Change the file group to read-only.
ALTER DATABASE DBTESTE3 MODIFY FILEGROUP FGTESTE READONLY
GO

-- Run the DBCC CHECK command in the conn1 query.
DBCC CHECKDB (DBTESTE3)

-- The DBCC CHECK command runs correctly. However, you may receive the following message:
"DBCC CHECKDB will not check SQL Server catalog or Service Broker consistency because a database snapshot could not be created or because WITH TABLOCK was specified."

-- Open a new query window that is named conn2, and then set the database as DBTESTE3. This action opens a connection to the DBTESTE3 database.

-- Return to the conn1 query, and run the DBCC command again.

DBCC CHECKDB (DBTESTE3)
-- Notice the error message that is mentioned in the "Symptoms" section.

Besoin d’aide ?

Développez vos compétences
Découvrez des formations
Accédez aux nouvelles fonctionnalités en avant-première
Rejoindre Microsoft Insider

Ces informations vous ont-elles été utiles ?

Nous vous remercions pour vos commentaires.

Merci pour vos commentaires. Il serait vraisemblablement utile pour vous de contacter l’un de nos agents du support Office.

×