SQL Server 2008 R2 陷入单用户模式

Posted

技术标签:

【中文标题】SQL Server 2008 R2 陷入单用户模式【英文标题】:SQL Server 2008 R2 Stuck in Single User Mode 【发布时间】:2014-07-07 10:41:31 【问题描述】:

在本地数据库上执行了数据库部署(来自 VS SQL Server 数据库项目),但失败了,数据库处于单用户模式的状态(部署以单用户模式运行) .

当我从 SSMS 连接到它并尝试以下操作时:

ALTER DATABASE MyDatabase
SET MULTI_USER;
GO

我得到错误:

目前无法更改数据库“MyDatabase”的状态或选项。数据库处于单用户模式,并且当前有一个用户连接到它。

我尝试使数据库脱机,SSMS 告诉我成功,但它似乎并没有真正做任何事情。到目前为止,我只能通过删除并重新创建数据库来解决这个问题(这没关系,因为它只是一个本地测试数据库)。不过,我希望能够重置状态。

如何说服 SQL Server 将此数据库从单用户模式中移除?

【问题讨论】:

【参考方案1】:

首先在主数据库中运行以下查询

exec sp_who

如果找不到罪魁祸首,试试

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

然后通过以下查询杀死所有使用您的数据库的进程:

KILL spid

然后运行以下查询:

USE Master
ALTER DATABASE YourDatabase SET MULTI_USER

【讨论】:

如果你在 sp_who 输出中找不到任何可疑的条目,这个查询帮助了我 - SELECT request_session_id FROM sys.dm_tran_locks WHERE resource_database_id = DB_ID('YourDatabase') @earthling42:我将您的(非常有用的)查询添加到答案中 我陷入了类似的状态。但我有几个 spid 已连接或处于等待状态。我意识到,一旦我终止现有连接,使用数据库的服务器(应用程序)正在创建连接,而我的控制台永远不会以这种方式获得连接。因此,我必须先关闭所有此类服务器,以免它们争用连接。只有这样我才能成功运行提到的查询并恢复。 像魅力一样工作!【参考方案2】:

试试下面的命令

先运行这三个命令

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】:

这个回答是here,代码是:

use master
ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

--do you stuff here 

ALTER DATABASE YourDatabase SET MULTI_USER

【讨论】:

我不认为这是同一个问题 - 数据库不允许这些状态 您是否将 master 替换为您的数据库名称?另外,您对要更改的数据库有管理员权限吗? 补充一下,这不是正确答案。一旦数据库处于单用户模式并且被会话占用,alter database 命令将不会成功。需要先杀死占用db的会话,然后才能将db切换为multi_user模式。【参考方案4】:

使用 DAC (Dedicated Admin Connection)。确保您首先启用它 在 SSMS 中输入管理员:对于服务器名称 连接到主 ALTER DATABASE SET MULTI_USER

【讨论】:

【参考方案5】:

要强制更新使用“立即回滚”

ALTER DATABASE [DATABASE_NAME] SET MULTI_USER  with rollback immediate

【讨论】:

这不起作用。同样的错误。

以上是关于SQL Server 2008 R2 陷入单用户模式的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2008 R2 用户权限

sql server 2012 r2怎么设置新用户

SQL Server 2008 R2 Express 权限——不能创建数据库或修改用户

安装SQL Server 2008 R2

在 SQL Server 2008 R2 中为特定数据库用户设置最大查询数

sql server 2008 r2执行维护计划时出现错误