ALTER DATABASE失败,因为锁不能放在数据库上
我需要重新启动数据库,因为一些进程不工作。 我的计划是将其脱机并重新联机。
我正在尝试在Sql Server Management Studio 2008中执行此操作:
use master; go alter database qcvalues set single_user with rollback immediate; alter database qcvalues set multi_user; go
我收到这些错误:
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.
我究竟做错了什么?
得到错误后,运行
EXEC sp_who2
在列表中查找数据库。 有可能连接没有终止。 如果find到数据库的任何连接,请运行
KILL <SPID>
其中<SPID>
是连接到数据库的会话的SPID。
在删除与数据库的所有连接后尝试脚本。
不幸的是,我没有理由为什么看到这个问题,但是这里有一个链接,表明这个问题已经发生在其他地方了。
我设法通过执行以下重现此错误。
连接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
连接2和3
set lock_timeout 5; ALTER DATABASE TESTING123 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
尝试这个,如果它是“过渡期”…
http://learnmysql.blogspot.com/2012/05/database-is-in-transition-try-statement.html
USE master GO ALTER DATABASE <db_name> SET OFFLINE WITH ROLLBACK IMMEDIATE ... ... ALTER DATABASE <db_name> SET ONLINE
在SQL Management Studio中,转到安全性 – >login,然后双击您的login。 从左列中select“服务器angular色”,并validation是否已选中sysadmin。
在我的情况下,我login了一个没有这个权限的帐户。
HTH!
杀死进程ID对我来说工作得很好。 当在一个新的查询窗口上运行“EXEC sp_who2”命令…并过滤“繁忙”数据库的结果时,使用“KILL”命令终止进程成功了。 之后,所有的工作再次。
只是为了增加我的两分钱。 我已经把自己陷入了同样的情况,同时search数据库login成功运行所需的最低限度的特权声明:
ALTER DATABASE ... SET SINGLE_USER WITH ROLLBACK IMMEDIATE
看来,ALTER语句成功完成时,用sysadminlogin执行,但它需要连接清理的一部分,当执行的login“只”有限权限如:
ALTER ANY DATABASE
PS我花了几个小时试图弄清楚为什么“ALTER DATABASE ..”在具有dbcreatorangular色+ ALTER ANY DATABASE特权的login名下执行时不起作用。 这是我的MSDN主题 !
我知道这是一个旧post,但我最近遇到了一个非常类似的问题。 不幸的是,我无法使用任何alter database命令,因为排他锁无法放置。 但是我从来没有find一个开放的连接到数据库。 我最终不得不强制删除数据库的健康状态,强制它恢复到恢复状态。