2011-02-15 43 views
0

可以轻松地在您的测试环境中重现此诉讼。打开SSMS并连接到你的服务器。打开连接到MYTEST数据库的新查询选项卡(我假设MYTEST在线)。 不要对此标签执行任何操作。打开连接到相同数据库的新选项卡。在您的新标签SSMS选项卡中的阻止

USE master 
GO 
ALTER DATABASE MYTEST 
SET OFFLINE 

您的代码将头阻止你从你的第一个标签运行过程中键入下面的代码。(请参阅活动监视器)。 即使在第一个选项卡中没有任何与进程相关的任务,为什么执行被阻止?

回答

2

你需要告诉SQL踢每一个连接了

ALTER DATABASE MYTEST 
SET OFFLINE 
WITH ROLLBACK IMMEDIATE 

这是by design:到数据库的连接已共享数据库锁定,是否执行或不。

<termination>::=

指定当数据库从一种状态转变为另一种时回滚未完成的事务。如果省略了终止子句,那么如果数据库上存在任何锁定,ALTER DATABASE语句将无限期地等待。只能指定一个终止子句,并遵循SET子句。

只要运行sp_lock(或任何新的DMV是:-),你会看到他们

+1

ROLLABCK需要改变回滚,以避免“有语法错误”的消息。 – 2011-02-15 14:32:17

相关问题