Mensaje de error cuando ejecuta cualquiera de los comandos DBCC CHECK en SQL Server: "la base de datos podría no estar bloqueada en modo exclusivo para llevar a cabo la operación"

Se aplica a: Microsoft SQL Server 2005 Developer EditionMicrosoft SQL Server 2005 Enterprise EditionMicrosoft SQL Server 2005 Enterprise X64 Edition

Nº de error: 489609 (SQLBUDT)

Síntomas


En Microsoft SQL Server, puede recibir un mensaje de error al ejecutar cualquiera de los siguientes comandos DBCC:
  • DBCC CHECKDB
  • DBCC CHECKTABLE
  • DBCC CHECKALLOC
  • DBCC CHECKCATALOG
  • DBCC CHECKFILEGROUP
El mensaje de error contiene el texto siguiente:
Msg 5030, nivel 16, estado 12, línea 1, la base de datos no se pudo bloquear exclusivamente para realizar la operación.
Msj 7926, nivel 16, estado 1, línea 1
Instrucción de comprobación anulada. No se pudo comprobar la base de datos que no se pudo crear una instantánea de base de datos y no se pudo bloquear la base de datos o una tabla. Consulte los libros en pantalla para obtener detalles sobre cuándo se espera este comportamiento y qué soluciones existen. También consulte los errores anteriores para obtener más detalles.

Si ha programado las tareas del plan de mantenimiento que realizan comprobaciones de integridad de base de datos, puede escribirse un mensaje de error similar al siguiente en el archivo de registro para el plan correspondiente:

Versión de utilidad (Unicode) de mantenimiento de Microsoft (r) Server 9.0.2047
Se generó el informe en "ComputerName".
Plan de mantenimiento: PlanForReadOnlyDb
Duración: 00:00:52
Estado: Advertencia: error en una o más tareas..
Detalles:
Comprobar integridad de base de datos tarea (ComputerName)
Comprobar integridad de base de datos en nombreDeEquipo
Bases de datos: AdventureWorks, msdb, PassDb, Sales, Prueba1 incluir índices
Inicio de la tarea:
Fecha y hora.
Finalización de la tarea:
Fecha y hora.
Failed:(-1073548784) al ejecutar la consulta "DBCC CHECKDB WITH NO_INFOMSGS
"con el siguiente error:"la base de datos podría no ser bloqueada en modo exclusivo para llevar a cabo la operación. Instrucción de comprobación anulada. No se pudo comprobar la base de datos que no se pudo crear una instantánea de base de datos y no se pudo bloquear la base de datos o una tabla. Consulte los libros en pantalla para obtener detalles sobre cuándo se espera este comportamiento y qué soluciones existen. También consulte los errores anteriores para obtener más información. " Razones posibles del error: problemas con la consulta, propiedad no está establecida correctamente "ResultSet", parámetros no está configurados correctamente o conexión no establecida correctamente.

Causa


Este problema se produce si se cumplen las condiciones siguientes:
  • Al menos una otra conexión está utilizando la base de datos con el que se ejecuta el comando DBCC CHECK.
  • La base de datos contiene al menos un grupo de archivos que está marcado como de sólo lectura.
A partir de SQL Server 2005, los comandos DBCC CHECK crean y utilizar una instantánea de base de datos interna por motivos de coherencia cuando el comando realiza las comprobaciones. Si existe un grupo de archivos de sólo lectura en la base de datos, no se crea la instantánea de base de datos interna. Para poder realizar las comprobaciones, el comando DBCC CHECK intenta adquirir un bloqueo de base de datos EX. Si otros usuarios están conectados a esta base de datos, se produce un error en este intento de adquirir un bloqueo EX. Por lo tanto, recibirá un mensaje de error.

Solución


Para resolver este problema, siga estos pasos en lugar de ejecutar el comando DBCC CHECK en la base de datos:
  1. Crear una instantánea de base de datos de la base de datos para el que desea realizar las comprobaciones. Para obtener más información acerca de cómo crear una instantánea de base de datos, vea el tema "Crear una instantánea de base de datos (Transact-SQL)" en los libros en pantalla de SQL Server.
  2. Ejecute el comando DBCC CHECK en la instantánea de base de datos.
  3. Quitar la instantánea de base de datos después de completa el comando DBCC CHECK.

Estado


Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".

Más información


Para obtener más información acerca de cómo el comando DBCC CHECK utiliza la instantánea de base de datos interna, vea el tema "DBCC (Transact-SQL)" en el tema "DBCC de interno uso de instantánea de base de datos" en libros en pantalla de SQL Server 2005.

Para reproducir este problema, ejecute los siguientes comandos en 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.