目前,我的数据库处于单用户模式。当我试图扩展我的数据库,我得到一个错误:
数据库my_db不可访问。
此外,当我试图删除数据库时,我得到错误:
无法更改数据库'my_db'的状态或选项 这一次。数据库为单用户模式,用户为 当前连接到它。
如何退出单用户模式?我没有任何用户使用这个数据库。
当我尝试用IIS浏览我的网站时,我得到的错误是:
类的执行期间生成了未处理的异常 当前的web请求。关于起源和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。
我觉得这是单用户模式造成的。
目前,我的数据库处于单用户模式。当我试图扩展我的数据库,我得到一个错误:
数据库my_db不可访问。
此外,当我试图删除数据库时,我得到错误:
无法更改数据库'my_db'的状态或选项 这一次。数据库为单用户模式,用户为 当前连接到它。
如何退出单用户模式?我没有任何用户使用这个数据库。
当我尝试用IIS浏览我的网站时,我得到的错误是:
类的执行期间生成了未处理的异常 当前的web请求。关于起源和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。
我觉得这是单用户模式造成的。
当前回答
不确定这是否对任何人都有帮助,但我也有同样的问题,找不到阻碍我的过程。我关闭了SSMS并停止了所有访问本地实例的服务。然后,当我返回并运行exec sp_who2时,它显示了罪魁祸首。我杀死了进程,并能够让Multi_User工作,然后重新启动服务。我们让IIS每隔几分钟/秒就会搜索特定的包。
其他回答
今天早上我遇到了同样的问题。这原来是一个简单的问题。我打开了一个查询窗口,它被设置为对象资源管理器中的单用户数据库。sp_who2存储过程没有显示该连接。一旦我把它合上,我就能把它设置成
以防万一,如果有人无意中发现了这个线程,那么这里有一个防弹的解决方案,SQL Server卡在单用户模式
——获取需要终止的连接的进程ID (spid) —将'DBName'替换为数据库的实际名称
SELECT sd.[name], sp.spid, sp.login_time, sp.loginame
FROM sysprocesses sp
INNER JOIN sysdatabases sd on sp.dbid = sd.dbid
WHERE sd.[name] = 'DBName'
作为一种替代方法,你也可以使用命令" sp_who "来获取打开连接的" spid ":
或者用这个SP代替
exec sp_who
—然后执行以下命令,将[spid]和[DBName]替换为正确的值
KILL SpidToKillGoesHere
GO
SET DEADLOCK_PRIORITY HIGH
GO
ALTER DATABASE [DBName] SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO
今天我遇到了同样的问题,我的数据库从多用户模式改为单用户模式,这最终阻止了我发布数据库。
为了解决这个问题,我不得不关闭所有Visual Studio实例,并在Sql Server查询窗口中运行以下命令-
USE [Your_Database_Name]; ALTER DATABASE [Your_Database_Name] SET MULTI_USER GO
这个命令将数据库从单用户更改为多用户,之后,我成功地能够发布。
我们刚刚在SQL 2012中经历了这一点。 当我们终止将其设置为单个用户的原始会话时,复制进程跳入。但是sp_who2没有显示附加到DB的新进程。 关闭SSMS并重新打开允许我们在数据库上看到这个进程,然后我们可以立即关闭它并切换到multi_user模式,这是有效的。
我不知道这背后的逻辑,但它确实是SSMS中的一个错误,并且仍然在SQL 2012中表现出来。
另一种选择是:
使数据库脱机;在短信服务中,右键单击数据库,选择脱机,勾选“删除所有连接” 运行ALTER DATABASE [Your_Db] SET MULTI_USER