标签: sql sql-server sql-server-2008 blocking
这种情绪可以在您的测试环境中轻松复制。打开SSMS并连接到您的服务器。打开连接到MYTEST数据库的新查询选项卡(我假设MYTEST在线)。 不要对此选项卡执行任何操作。打开连接到同一数据库的新选项卡。在新标签页中输入以下代码
USE master GO ALTER DATABASE MYTEST SET OFFLINE
您的代码将被您从第一个标签中运行的进程阻止。(请参阅活动监视器)。 即使第一个选项卡中没有与进程相关的任务,为什么阻止执行?
答案 0 :(得分:2)
您需要告诉SQL将每个连接都踢出去
ALTER DATABASE MYTEST SET OFFLINE WITH ROLLBACK IMMEDIATE
这是by design:与数据库的连接具有共享数据库锁定,无论是否执行。
WITH <termination>::= 指定在数据库从一种状态转换为另一种状态时何时回滚未完成的事务。如果省略terminate子句,则ALTER DATABASE语句将无限期地等待数据库上是否存在任何锁定。只能指定一个终止子句,它遵循SET子句。
WITH <termination>::=
<termination>::=
指定在数据库从一种状态转换为另一种状态时何时回滚未完成的事务。如果省略terminate子句,则ALTER DATABASE语句将无限期地等待数据库上是否存在任何锁定。只能指定一个终止子句,它遵循SET子句。
只需运行sp_lock(或任何新的dmv :-),你就会看到它们