Мы пытались восстановить базу данных, но по какой-то причине не удалось. Теперь он застрял в однопользовательском режиме. Вот что я пробовал:
select d.name, d.dbid, spid, login_time, nt_domain, nt_username, loginame
from sysprocesses p inner join sysdatabases d on p.dbid = d.dbid
where d.name = 'mydb'
Он вернул один результат, и я убил его, используя kill 77
. Я где-то читал, что вы также должны убить id плюс один для хорошей меры, поэтому мы также запустили kill 78
. На этом этапе повторное выполнение запроса вернуло 0 соединений.
Я пробовал все это:
exec sp_dboption 'mydb', 'single user', 'FALSE';
SET DEADLOCK_PRIORITY HIGH
exec sp_dboption 'mydb', 'single user', 'FALSE';
ALTER DATABASE [mydb] SET MULTI_USER WITH NO_WAIT
ALTER DATABASE [mydb] SET MULTI_USER WITH ROLLBACK IMMEDIATE
Они все дают мне
Msg 5064, уровень 16, состояние 1, строка 1
В настоящее время невозможно изменить состояние или параметры базы данных mydb. База данных находится в однопользовательском режиме, и в настоящее время к ней подключен пользователь.
Я понимаю, что, возможно, я мог бы решить проблему, перезапустив службу sql или, возможно, перезагрузив сервер. Однако это производственный сервер, поэтому я бы предпочел его избегать.
Какие-либо предложения?
Взгляните на SPID
USE master
EXEC sp_who
Оттуда отработайте db и убейте соответствующую блокировку.
Переход из однопользовательского режима в многопользовательский
ALTER DATABASE 'DB NAME' SET MULTI_USER WITH ROLLBACK IMMEDIATE