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 ответов
Скорее всего, учетная запись службы SQL не имеет прав для создания необходимых файлов снимков.
В активной базе данных очень маловероятно, что CHECKDB сможет получить блокировку базы данных X, необходимую для выполнения проверок выделения, поэтому я изменил тайм-аут блокировки, чтобы он составлял всего 20 секунд (IIRC).
Спасибо
Я написал подробный пост в блоге, чтобы избавиться от этой ошибки.
- Отключить соединение. (Для этого:
File > Disconnect Object Explorer
) - Подключить соединение. (Для этого:
File > Connect Object Explorer
) - Откройте окно "Новый запрос" и выполните следующую команду:
use master
(Примечание. Приведенная выше команда сделает вашу текущую базу данных ведущей, что важно, прежде чем мы запустим следующую последовательность команд.) - Скопируйте и вставьте следующую последовательность команд в окно запроса. Замените слово "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