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 Express 权限——不能创建数据库或修改用户