Не удалось изменить базу данных, так как не удалось установить блокировку в базе данных
мне нужно перезапустить базу данных, потому что некоторые процессы не работают. Мой план состоит в том, чтобы взять его в автономном режиме и обратно в интернете снова.
Я пытаюсь сделать это в 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 перейдите в раздел Безопасность - > логины и дважды щелкните свой логин. Выберите роли сервера в левом столбце и убедитесь, что установлен флажок sysadmin.
в моем случае я был зарегистрирован в учетной записи без этой привилегии.
НТН!
убийство идентификатор процесса работал хорошо для меня. При выполнении команды "EXEC sp_who2" над новым окном запроса... и фильтровать результаты для" занятой " базы данных, убивая процессы с помощью команды "убить" удалось сделать трюк. После этого все снова работает.
просто добавить мои два цента. Я поставил себя в ту же ситуацию, при поиске минимально необходимых привилегий входа в БД для успешного запуска оператора:
ALTER DATABASE ... SET SINGLE_USER WITH ROLLBACK IMMEDIATE
Кажется, что оператор ALTER завершает успешно, при выполнении с администратор вход, но он требует очистки соединения часть, при выполнении под именем пользователя, который имеет" только " ограниченные разрешения, такие как:
ALTER ANY DATABASE
P. S. Я потратил часов пытаясь выяснить, почему " изменить базу данных.."не работает при выполнении под логином, который имеет роль dbcreator + изменить любую базу данных привилегии. Вот мой MSDN thread!
Я знаю, что это старый пост, но я недавно столкнулся с очень похожей проблемой. К сожалению, я не смог использовать ни одну из команд alter database, потому что исключительная блокировка не могла быть размещена. Но я так и не смог найти открытое соединение с БД. В конце концов мне пришлось принудительно удалить состояние работоспособности базы данных, чтобы принудительно привести ее в состояние восстановления, а не в восстановление.
Я добавлю это здесь, если кому-то повезет, как мне.
при рассмотрении sp_who2 список процессов, обратите внимание на процессы, которые выполняются не только для базы данных, но и для мастер. В моем случае проблема, которая блокировала базу данных, была связана с хранимой процедурой, которая запустила xp_cmdshell.
проверьте, есть ли у вас какие-либо процессы в убить/отмотка государство мастер база данных
SELECT * FROM sys.sysprocesses WHERE cmd = 'KILLED/ROLLBACK'
Если у вас такая же проблема, просто команда KILL, вероятно, не поможет. Вы можете перезапустить SQL server, или лучше найти cmd.exe под Windows обрабатывает на ОС SQL server и убивает его.