Сообщение об ошибке при выполнении команды DBCC ПРОВЕРИТЬ в SQL Server: «базы данных не удалось заблокировать монопольно для выполнения операции»

Применимо к: Microsoft SQL Server 2005 Developer EditionMicrosoft SQL Server 2005 Enterprise EditionMicrosoft SQL Server 2005 Enterprise X64 Edition

Номер ошибки: 489609 (SQLBUDT)
Номер ошибки: 489609 (SQL BU отслеживания дефектов)ошибка #: 65670 (Content Maintenance)

Симптомы


В Microsoft SQL Server может появиться сообщение об ошибке при выполнении команды DBCC:
  • ИНСТРУКЦИЯ DBCC CHECKDB
  • ИНСТРУКЦИЯ DBCC CHECKTABLE
  • ИНСТРУКЦИЯ DBCC CHECKALLOC
  • DBCC CHECKCATALOG
  • ИНСТРУКЦИЯ DBCC CHECKFILEGROUP
Сообщение об ошибке содержит следующий текст:
Сообщение 5030, уровень 16, состояние 12, 1 строки базы данных не удалось заблокировать монопольно для выполнения операции.
Сообщение 7926, уровень 16, состояние 1, строка 1
Инструкция проверки прервана. Не удалось вернуть базу данных не удалось создать моментальный снимок базы данных и базы данных или таблицы не может быть заблокирован. Дополнительные сведения, когда возникает данная ситуация и какие существуют обходные пути. Также см. Дополнительные сведения.

Если запланированные задачи плана обслуживания, которые выполняют проверку целостности базы данных в файл журнала для соответствующего плана может записать сообщение об ошибке, подобное приведенному ниже:

Версия программы (Юникод) обслуживание Microsoft(R) сервера 9.0.2047
Отчет был сформирован на «имя_компьютера».
План обслуживания: PlanForReadOnlyDb
Длительность: 00:00:52
Состояние: Предупреждение: не удалось выполнить одну или несколько задач.
Подробности:
Проверьте задача проверки целостности базы данных (имя компьютера)
Проверить целостность базы данных на имя_компьютера
Базы данных: AdventureWorks, в базе данных msdb, PassDb, продажи, test1 включить индексы
Начало задачи:
Даты и времени.
Окончание задачи:
Даты и времени.
При выполнении запроса «DBCC CHECKDB параметр WITH NO_INFOMSGS Failed:(-1073548784)
«Ошибка со следующей ошибкой: «базы данных не удалось заблокировать монопольно для выполнения операции. Инструкция проверки прервана. Не удалось вернуть базу данных не удалось создать моментальный снимок базы данных и базы данных или таблицы не может быть заблокирован. Дополнительные сведения, когда возникает данная ситуация и какие существуют обходные пути. Также см. Дополнительные сведения.» Возможные причины сбоя: проблемы с запроса, «ResultSet» свойства заданы неправильно, параметры установлены неправильно или соединение не установлено правильно.

Причина


Эта проблема возникает, если выполняются следующие условия:
  • Хотя бы одно подключение используется база данных, в которой команда команда DBCC CHECK.
  • База данных содержит по крайней мере одну группу файлов, помечены как доступные только для чтения.
Начиная с SQL Server 2005, команда DBCC CHECK команды Создать и использовать моментальный снимок внутренней базы данных для сохранения согласованности при команда выполняет все проверки. Если группы только для чтения файл существует в базе данных, моментальный снимок внутренней базы данных не создается. Чтобы продолжить проверку, команда команда DBCC CHECK пытается получить блокировку базы данных EX. Если к базе данных подключены другие пользователи, это попытка получить блокировку EX завершается неудачей. Таким образом появляется сообщение об ошибке.

Решение


Чтобы устранить эту проблему, выполните следующие действия, вместо выполнения команды DBCC ПРОВЕРИТЬ в базе данных.
  1. Создание моментального снимка базы данных, базы данных, для которого требуется выполнить проверку. Дополнительные сведения о способах создания моментального снимка базы данных приведены в разделе «Создание моментального снимка базы данных (Transact-SQL)» в электронной документации по SQL Server.
  2. Выполните команду проверки DBCC для моментального снимка базы данных.
  3. После завершения команды DBCC ПРОВЕРЬТЕ удалите моментальный снимок базы данных.

Статус


Корпорация Майкрософт подтверждает, что это проблема продуктов Майкрософт, перечисленных в разделе "Относится к".

Дополнительные сведения


Дополнительные сведения об использовании команды проверки DBCC моментальный снимок внутренней базы данных приведены в разделе «DBCC (Transact-SQL)» в разделе «DBCC внутреннего использования базы данных моментальных снимков» в электронной документации по SQL Server 2005.

Чтобы воспроизвести эту проблему, выполните следующие команды в 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.