SQL deadlocking..в однопользовательском режиме
пара баз данных произвела ошибку сегодня утром во время работы в однопользовательском режиме. Из-за следующей ошибки я ничего не могу сделать :(
Msg 1205, Level 13, State 68, Line 1
Transaction (Process ID 62) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Я получаю эту ошибку при попытке следующего (используя базу данных Master в качестве администратора Sys):
ALTER DATABASE dbname
SET MULTI_USER;
GO
ради этого я попытался перезапустить SQL Server, я попытался убить любые процессы, и я даже попытался сбросить одного пользователя сам:
ALTER DATABASE dbname
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
работа, которая была запуск был разработан, чтобы скопировать базу данных и поместить ее в однопользовательский режим немедленно, чтобы попытаться сделать его быстрее.
в любом случае я могу снять замки?
2 ответов
была та же проблема. Это сработало для меня:
set deadlock_priority high; -- could also try "10" instead of "high" (5)
alter database dbname set multi_user; -- can also add "with rollback immediate"
из идей/объяснение:
http://myadventuresincoding.wordpress.com/2014/03/06...
http://www.sqlservercentral.com/blogs/pearlknows/2014/04/07/...
хорошо, я отвечу сам.
Я должен был использовать следующие:
sp_who
который отображал детали текущих подключенных пользователей и сеансов, я тогда вспомнил о мониторе активности, который показывает тот же самый материал...В любом случае, это привело меня от моего стола к какому-то жукеру, который поддерживал связь с базой данных против моей воли...
в любом случае, как только я выключил компьютер (отключив его...заслужил это), я мог бы запустить SQL, чтобы изменить его в MULTI_USER
режим (с помощью пользователя системного администратора):
USE Master
GO
ALTER DATABASE dbname
SET MULTI_USER;
GO
FYI для тех, кто заботится, это можно использовать, чтобы сразу установить DB в SINGLE_USER
:
ALTER DATABASE dbname
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
дополнительные сведения, если вы знаете идентификатор процесса, вы можете использовать kill pid
:
kill 62
Bare в виду SSMS создает процесс для вашего пользователя, а также, в моем случае это было отклонено из-за другого.
EDIT: в соответствии с рекомендациями Бобби мы можем использовать:
sp_Who2
это может показать нам какой процесс блокируется другим процессом.