SQL Server 2008 R2被卡在单用户模式下

58

在本地数据库上执行了一个来自VS SQL Server数据库项目的DB部署,但失败了,导致数据库被留在了单用户模式(部署运行为单用户模式)。

当我从SSMS连接到它并尝试像下面这样做的时候:

ALTER DATABASE MyDatabase
SET MULTI_USER;
GO

我遇到了以下错误:

不能在此时更改数据库“MyDatabase”的状态或选项。该数据库处于单用户模式,并且当前有一个用户连接到它。

我尝试将数据库脱机,但是 SSMS 告诉我这样做成功了,但实际上似乎没有做任何事情。到目前为止,我只能通过删除并重新创建数据库来解决这个问题(这还算可以,因为它只是一个本地测试数据库)。然而,我想能够重置状态。

如何让 SQL Server 将此数据库退出单用户模式?

5个回答

187

在主数据库中第一次运行以下查询

exec sp_who

如果你找不到罪犯,试着

SELECT request_session_id FROM sys.dm_tran_locks 
WHERE resource_database_id = DB_ID('YourDatabase')

然后使用以下查询杀死所有正在使用你的数据库的进程:

Then kill all process that use your database with following query:

KILL spid

那么运行以下查询:

USE Master
ALTER DATABASE YourDatabase SET MULTI_USER

8
如果您在sp_who输出中找不到任何可疑的条目,可以尝试运行以下查询 - SELECT request_session_id FROM sys.dm_tran_locks WHERE resource_database_id = DB_ID('YourDatabase')。 - earthling42
1
@earthling42:我把你(非常有用的)查询添加到答案中了。 - GôTô
我曾经陷入了类似的状态。但是我有几个处于连接或等待状态的spid。我意识到,使用数据库的服务器(应用程序)在我杀死一个现有连接时会创建连接,并且以这种方式我的控制台永远不会获得连接。因此,我必须首先关闭所有这样的服务器,以便它们不争夺连接。只有这样,我才能成功运行所提到的查询并恢复。 - Rajeev Ranjan

4

请尝试以下命令

首先运行以下三个命令

USE [master] 
SET DEADLOCK_PRIORITY HIGH
exec sp_dboption MyDBName, 'single user', 'FALSE';

请执行以下两个命令:
ALTER DATABASE MyDBName SET MULTI_USER WITH NO_WAIT
ALTER DATABASE MyDBName SET MULTI_USER WITH ROLLBACK IMMEDIATE

3
这个问题在这里得到了解答,代码如下:
use master
ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

--do you stuff here 

ALTER DATABASE YourDatabase SET MULTI_USER

1
我不相信那是同一个问题 - 数据库都不允许这两个语句。 - Paul Michaels
你把master替换成了你的数据库名字了吗?另外,你在想要修改的数据库上有管理员权限吗? - Tristan
1
仅仅添加这并不是正确的答案。一旦数据库处于单用户模式被会话占用,alter database 命令将无法成功执行。你需要先终止占用数据库的会话,然后才能将数据库更改为多用户模式。 - jyao
这是唯一一个对我有效的。 - C. Graham

0

使用DAC (Dedicated Admin Connection)。确保您已经启用了它。 在SSMS中输入admin:作为服务器名称, 连接到主服务器后,执行ALTER DATABASE SET MULTI_USER命令。


-1

若要强制更新,请使用 "with rollback immediate"。

ALTER DATABASE [DATABASE_NAME] SET MULTI_USER  with rollback immediate

这个不行。同样的错误。 - Kon Rad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接