Ошибка ALTER DATABASE из-за невозможности размещения блокировки в базе данных
мне нужно перезапустить базу данных, потому что некоторые процессы не работают. Мой план-отключить его и снова включить.
Я пытаюсь сделать это в SQL Server Management Studio 2008:
use master;
go
alter database qcvalues
set single_user
with rollback immediate;
alter database qcvalues
set multi_user;
go
Я получаю эти ошибки:
Msg 5061, Level 16, State 1, Line 1
ALTER DATABASE failed because a lock could not be placed on database 'qcvalues'. Try again later.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.
Msg 5061, Level 16, State 1, Line 4
ALTER DATABASE failed because a lock could not be placed on database 'qcvalues'. Try again later.
Msg 5069, Level 16, State 1, Line 4
ALTER DATABASE statement failed.
что я делаю не так?
9 ответов
после того, как вы получите ошибку, запустите
EXEC sp_who2
искать базу данных в списке. Возможно, соединение не было прервано. Если вы нашли какие-либо подключения к базе данных, запустите
KILL <SPID>
здесь <SPID>
является SPID для сеансов, подключенных к базе данных.
попробуйте свой скрипт после удаления всех подключений к базе данных.
к сожалению, у меня нет причин, почему вы видите проблему, но вот ссылка это показывает, что проблема возникла в другом месте.
мне удалось воспроизвести эту ошибку, выполнив следующие действия.
подключение 1 (оставьте на пару минут)
CREATE DATABASE TESTING123
GO
USE TESTING123;
SELECT NEWID() AS X INTO FOO
FROM sys.objects s1,sys.objects s2,sys.objects s3,sys.objects s4 ,sys.objects s5 ,sys.objects s6
соединения 2 и 3
set lock_timeout 5;
ALTER DATABASE TESTING123 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
попробуйте это, если это "экономикой" ...
http://learnmysql.blogspot.com/2012/05/database-is-in-transition-try-statement.html
USE master
GO
ALTER DATABASE <db_name>
SET OFFLINE WITH ROLLBACK IMMEDIATE
...
...
ALTER DATABASE <db_name> SET ONLINE
в SQL Management Studio перейдите в Security - > Logins и дважды щелкните свой логин. Выберите роли сервера в левом столбце и убедитесь, что установлен флажок sysadmin.
в моем случае я вошел в учетную запись без этой привилегии.
HTH!
убийство идентификатора процесса отлично сработало для меня. При запуске команды "EXEC sp_who2" над новым окном запроса... и отфильтровать результаты для" занятой "базы данных, убив процессы с помощью команды "убить" удалось сделать трюк. После этого все снова заработало.
просто добавить мои два цента. Я поставил себя в ту же ситуацию, при поиске минимальных необходимых привилегий входа в БД для успешного выполнения инструкции:
ALTER DATABASE ... SET SINGLE_USER WITH ROLLBACK IMMEDIATE
Кажется, что оператор ALTER завершает успешно, при выполнении с администратор login, но для этого требуется часть очистки соединений, при выполнении под логином, который имеет" только " ограниченные разрешения, такие как:
ALTER ANY DATABASE
P. S. Я потратил часов пытаясь выяснить, почему " ALTER DATABASE.."не работает при выполнении под логином, который имеет роль dbcreator + изменить любую базу данных привилегии. Вот мой поток MSDN!
Я знаю, это старый пост, но недавно я столкнулся с очень похожей проблемой. К сожалению, я не смог использовать ни одну из команд alter database, потому что исключительная блокировка не могла быть размещена. Но мне так и не удалось найти открытое соединение с БД. В конце концов мне пришлось принудительно удалить состояние работоспособности базы данных, чтобы заставить ее восстанавливаться, а не восстанавливаться.
Я добавлю это здесь, если кому-то повезет, как мне.
при рассмотрении sp_who2 список процессов, обратите внимание на процессы, которые выполняются не только для базы данных, но и для мастер. В моем случае проблема, которая блокировала базу данных, была связана с хранимой процедурой, которая запустила xp_cmdshell.
проверьте, есть ли у вас какие-либо процессы в убить/отмотка государство мастер база данных
SELECT *
FROM sys.sysprocesses
WHERE cmd = 'KILLED/ROLLBACK'
Если у вас такая же проблема, просто команда KILL, вероятно, не поможет. Вы можете перезапустить SQL server или лучше найти cmd.exe под Windows обрабатывает на SQL server OS и убивает его.
в редких случаях (например, после тяжелой транзакции) запущенный системный процесс контрольной точки, удерживающий блокировку файла в файле базы данных, предотвращает переход в многопользовательский режим.