DBCC: база данных не может быть заблокирована исключительно для выполнения операции

Я бегу DBCC CHECKDB ([MyDb]) WITH NO_INFOMSGS, ALL_ERRORMSGS, PHYSICAL_ONLY

И через 20 секунд происходит сбой с ошибкой:

Msg 5030, Sev 16, State 12, Line 1: База данных не может быть заблокирована исключительно для выполнения операции. [SQLSTATE 42000]

Msg 7926, Sev 16, State 1, Line 1: Проверка заявления отменена. Невозможно проверить базу данных, так как не удалось создать моментальный снимок базы данных и не удалось заблокировать базу данных или таблицу. См. Books Online для получения подробной информации о том, когда ожидается такое поведение и какие обходные пути существуют. Также смотрите предыдущие ошибки для более подробной информации. [SQLSTATE 42000]

База данных составляет 1 ТБ, SQL Server 2005.

Зачем DBCC нужна эксклюзивная блокировка базы данных? Как я могу сделать чек?

ДОБАВЛЕНО: DBCC работает успешно, когда я уничтожаю все соединения с базой данных, а затем запускаю проверки. sp_who2 показывает пользователей, обращающихся к БД с веб-серверов с использованием провайдера.Net SQLClient

Служба SQL Server работает под учетной записью Windows, которая является локальным администратором.

5 ответов

Решение

В итоге я создал снимок и запустил на нем DBCC.

Скорее всего, учетная запись службы SQL не имеет прав для создания необходимых файлов снимков.

В активной базе данных очень маловероятно, что CHECKDB сможет получить блокировку базы данных X, необходимую для выполнения проверок выделения, поэтому я изменил тайм-аут блокировки, чтобы он составлял всего 20 секунд (IIRC).

Спасибо

Я написал подробный пост в блоге, чтобы избавиться от этой ошибки.

  1. Отключить соединение. (Для этого: File > Disconnect Object Explorer)
  2. Подключить соединение. (Для этого: File > Connect Object Explorer)
  3. Откройте окно "Новый запрос" и выполните следующую команду: use master (Примечание. Приведенная выше команда сделает вашу текущую базу данных ведущей, что важно, прежде чем мы запустим следующую последовательность команд.)
  4. Скопируйте и вставьте следующую последовательность команд в окно запроса. Замените слово "MyDatabaseName" именем базы данных, к которой вы пытаетесь получить эксклюзивный доступ.

ALTER DATABASE MyDatabaseName SET SINGLE_USER с опцией ROLLBACK

ALTER DATABASE MyDatabaseName УСТАНОВИТЕ SINGLE_USER С ROLLBACK ПОСЛЕ 30

ALTER DATABASE MyDatabaseName УСТАНОВИТЬ SINGLE_USER WITH NO_WAIT

ALTER DATABASE MyDatabaseName SET MULTI_USER WITH ROLLBACK IMMEDIATE;

Теперь вы закончили, и теперь вы можете попробовать команду или операцию, которую вы пытались выполнить ранее, которая давала вам Database could not be exclusively locked to perform the operation ошибка.

Я не уверен, что первопричина останавливает создание снимков; но ты пробовал бежать DBCC CheckDB с Tablock вариант посмотреть, работает ли он? ( Книги онлайн прямо говорится tablock опция "включает кратковременную монопольную (X) блокировку базы данных".) Но по крайней мере это не делает снимки, и DBCC CheckDB может преуспеть в этот раз с этой опцией. Другой вариант - это не критичная система, и вы можете позволить себе простои; попробуйте изменить его в однопользовательский режим и снова запустить DBCC ИЛИ восстановить его где-нибудь еще и выполнить DBCC, если у вас есть тестовая среда.

Ваш парень должен быть блогом Пола Рэндала для всех вещей CheckDB.

Иногда возникает проблема, когда в скрытом снимке базы данных заканчивается свободное место. Поскольку он реализован с использованием альтернативных потоков существующих файлов данных, моментальный снимок базы данных занимает место в том же месте, что и существующие файлы данных. Если проверяемая база данных имеет большую нагрузку на обновление, все больше и больше страниц помещаются в снимок базы данных, что приводит к ее росту. В ситуации, когда на томах, на которых размещается база данных, недостаточно места, это может означать, что в скрытом снимке базы данных заканчивается свободное место, и DBCC CHECKDB останавливается с ошибкой. Пример этого показан здесь (ошибки могут варьироваться в зависимости от точной точки, в которой моментальному снимку базы данных не хватает места):

Попробуйте эту ссылку

http://sqlism.blogspot.com/2014/10/a-database-snapshot-cannot-be-created.html

Другие вопросы по тегам