ALTER DATABASE失败,因为无法将锁定放在数据库上

JOE*_*EET 124 sql ssms sql-server-2008

我需要重新启动数据库,因为某些进程无法正常工作.我的计划是让它脱机并重新上线.

我试图在Sql Server Management Studio 2008中执行此操作:

use master;
go
alter database qcvalues
set single_user
with rollback immediate;
alter database qcvalues
set multi_user;
go
Run Code Online (Sandbox Code Playgroud)

我收到这些错误:

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

我究竟做错了什么?

bob*_*obs 287

收到错误后,运行

EXEC sp_who2
Run Code Online (Sandbox Code Playgroud)

在列表中查找数据库.连接可能没有终止.如果找到与数据库的任何连接,请运行

KILL <SPID>
Run Code Online (Sandbox Code Playgroud)

<SPID>连接到数据库的会话的SPID 在哪里.

删除所有与数据库的连接后,请尝试使用脚本.

不幸的是,我没有理由为什么你会看到这个问题,但这里有一个链接,表明问题已在其他地方发生.

http://www.geakeit.co.uk/2010/12/11/sql-take-offline-fails-alter-database-failed-because-a-lock-could-not-error-5061/

  • 然而`KILL 87`有效.让我困惑了一下.SQL 2008 R2 (2认同)
  • @MartinSmith我想我知道为什么:我遇到了同样的问题,在sp_who2下出现了一个挥之不去的连接导致脱机停止.结果是ssms中的一个开放的编辑行窗口.我相信这里发生的是编辑行窗口是一个保持打开的查询,其中包含可编辑的结果集.SQL Server具有此功能,可替代更新语句.在关闭此特定ssms窗口时,立即完成挂起离线. (2认同)

Mar*_*ith 5

我设法通过执行以下操作重现此错误.

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

连接2和3

set lock_timeout 5;

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