SQL死锁...现在在单用户模式下

n34*_*nda 8 sql sql-server sql-server-2008

几个数据库今天早上在单用户模式下运行时产生错误.由于以下错误,我无法做任何事情:(

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.
Run Code Online (Sandbox Code Playgroud)

尝试以下操作时收到该错误(使用主数据库作为系统管理员):

ALTER DATABASE dbname
SET MULTI_USER;
GO 
Run Code Online (Sandbox Code Playgroud)

为了它,我尝试重新启动SQL Server,我已经尝试杀死任何进程,我甚至尝试过自己重置单个用户:

ALTER DATABASE dbname
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
Run Code Online (Sandbox Code Playgroud)

正在运行的作业旨在复制数据库并立即将其置于单用户模式以尝试使其更快.

无论如何我可以删除锁?

cro*_*sek 17

有同样的问题.这对我有用:

set deadlock_priority high; -- could also try "10" instead of "high" (5)
alter database dbname set multi_user; -- can also add "with rollback immediate"
Run Code Online (Sandbox Code Playgroud)

从想法/解释:

HTTP://myadventuresincoding.wordpress.com/2014/03/06 ...

HTTP://www.sqlservercentral.com/blogs/pearlknows/2014/04/07/...


n34*_*nda 5

好的,我会自己回答.

我不得不使用以下内容:

sp_who
Run Code Online (Sandbox Code Playgroud)

它显示了当前连接的用户和会话的详细信息,然后我记得有关活动监视器,它显示了相同的东西......无论如何,这导致我离开我的办公桌到一些与我的愿望保持数据库连接的bugger .. .

无论如何,一旦我关闭了PC(通过拔掉它......当之无愧)我可以运行SQL将其修改为MULTI_USER模式(使用系统管理员用户):

USE Master
GO

ALTER DATABASE dbname
SET MULTI_USER;
GO
Run Code Online (Sandbox Code Playgroud)

对于那些关心的人来说,这可以用来立即将DB设置为SINGLE_USER:

ALTER DATABASE dbname
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
Run Code Online (Sandbox Code Playgroud)

更多详细信息,如果您知道可以使用的进程ID kill pid:

kill 62
Run Code Online (Sandbox Code Playgroud)

请记住,SSMS也会为您的用户创建一个流程,在我的情况下,由于另一个流程而被拒绝.

编辑:根据Per Bobby的建议,我们可以使用:

sp_Who2 
Run Code Online (Sandbox Code Playgroud)

这可以向我们显示哪个进程被其他进程阻止.

  • 如果使用sp_Who2,则可以在"BlkBY"类别中找出哪个进程被哪个进程阻止.只是一个FYI. (2认同)