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

时间:2014-06-05 08:58:47

标签: 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.

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

ALTER DATABASE dbname
SET MULTI_USER;
GO 

为此我试过重启SQL Server,我试过杀死任何进程,我甚至试过自己重置单个用户:

ALTER DATABASE dbname
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO

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

无论如何我可以移除锁?

3 个答案:

答案 0 :(得分:16)

答案 1 :(得分:5)

好的,我会自己回答。

我必须使用以下内容:

sp_who

显示了当前连接的用户和会话的详细信息,然后我记得有关Activity Monitor的内容显示了同样的东西......无论如何,这导致我离开我的办公桌去了一些与我保持数据库连接的bugger祝愿......

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

USE Master
GO

ALTER DATABASE dbname
SET MULTI_USER;
GO

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

ALTER DATABASE dbname
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO

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

kill 62

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

编辑:根据Per Bobby的推荐,我们可以使用:

sp_Who2 

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

答案 2 :(得分:0)

当相关系统进程处于死机状态时。
SPID 15和SPID 29-都是后台SysProcesses。

这在以下情况下有帮助:

--------- START OF CMDs--------   
SET DEADLOCK_PRIORITY HIGH ---- could also try "10" instead of "high" (5)  
GO  
ALTER DATABASE <dbname> SET SINGLE_USER WITH ROLLBACK IMMEDIATE  
GO  
ALTER DATABASE <dbname> SET MULTI_USER  
GO   
-------------------------- END OF CMDs ------------------  

Blocking Case with an User DB RESTORE process putting DB in Single_User