我需要帮助设置在SINGLE_USER模式恢复到MULTI_USER的数据库。每次我奔跑

ALTER DATABASE BARDABARD
SET MULTI_USER;
GO

我得到这个错误:

目前不能更改数据库'BARDABARD'的状态或选项。 数据库处于单用户模式,当前有用户连接到数据库。

它需要在非SINGLE_USER模式下将其设置为另一种模式,但当它是SINGLE_USER模式时,我不能将数据库设置为任何其他模式。


当前回答

我在谷歌上搜索了一段时间,最终找到了下面的解决方案,

SSMS通常在幕后使用到数据库的多个连接。

在更改访问模式之前,您需要终止这些连接。(我用EXEC(@kill)做过;在下面的代码模板中。)

然后,

运行以下SQL将数据库设置为MULTI_USER模式。

USE master
GO
DECLARE @kill varchar(max) = '';
SELECT @kill = @kill + 'KILL ' + CONVERT(varchar(10), spid) + '; '
FROM master..sysprocesses 
WHERE spid > 50 AND dbid = DB_ID('<Your_DB_Name>')
EXEC(@kill);

GO
SET DEADLOCK_PRIORITY HIGH
ALTER DATABASE [<Your_DB_Name>] SET MULTI_USER WITH NO_WAIT
ALTER DATABASE [<Your_DB_Name>] SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO

要切换回单用户模式,您可以使用:

ALTER DATABASE [<Your_DB_Name>] SET SINGLE_USER

这应该有用。编码快乐! !

谢谢! !

其他回答

如果上面的不起作用,找到spid的登录名并在Security - Logins中禁用它

转到数据库属性 并将单用户模式改为多用户模式

注意: 如果它不工作,然后采取数据库备份和恢复,再做上述方法

* 单身= SINGLE_USER

多个= MULTI_USER

限制= RESTRICTED_USER

当我不知道用于切换到单用户模式的特定SPID时,下面的代码为我工作。

use master
GO

select 
    d.name, 
    d.dbid, 
    spid, 
    login_time, 
    nt_domain, 
    nt_username, 
    loginame
from sysprocesses p 
    inner join sysdatabases d 
        on p.dbid = d.dbid
where d.name = 'dbname'
GO

kill 52 -- kill the number in spid field
GO

exec sp_dboption 'dbname', 'single user', 'FALSE'
GO

我在谷歌上搜索了一段时间,最终找到了下面的解决方案,

SSMS通常在幕后使用到数据库的多个连接。

在更改访问模式之前,您需要终止这些连接。(我用EXEC(@kill)做过;在下面的代码模板中。)

然后,

运行以下SQL将数据库设置为MULTI_USER模式。

USE master
GO
DECLARE @kill varchar(max) = '';
SELECT @kill = @kill + 'KILL ' + CONVERT(varchar(10), spid) + '; '
FROM master..sysprocesses 
WHERE spid > 50 AND dbid = DB_ID('<Your_DB_Name>')
EXEC(@kill);

GO
SET DEADLOCK_PRIORITY HIGH
ALTER DATABASE [<Your_DB_Name>] SET MULTI_USER WITH NO_WAIT
ALTER DATABASE [<Your_DB_Name>] SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO

要切换回单用户模式,您可以使用:

ALTER DATABASE [<Your_DB_Name>] SET SINGLE_USER

这应该有用。编码快乐! !

谢谢! !

最好是直接登录到服务器上,而不是使用SQL Management Studio

确保您要设置为MULTI_USER的数据库的登录帐户为dbowner。如果可以,以sa身份登录(使用SQL server身份验证)

如果你的数据库被IIS使用,停止网站和使用它的应用程序池-这可能是连接的进程,阻止你设置为MULTI_USER

USE MASTER
GO

-- see if any process are using *your* database specifically

SELECT * from master.sys.sysprocesses
WHERE spid > 50 -- process spids < 50 are reserved by SQL - we're not interested in these
AND dbid=DB_ID ('YourDbNameHere')

-- if so, kill the process:

KILL n -- where 'n' is the 'spid' of the connected process as identified using query above

-- setting database to read only isn't generally necessary, but may help:

ALTER DATABASE YourDbNameHere
SET READ_ONLY;
GO

-- should work now:

ALTER DATABASE Appswiz SET MULTI_USER WITH ROLLBACK IMMEDIATE

如果你还有问题,请参考这里:

http://www.sqlservercentral.com/blogs/pearlknows/2014/04/07/help-i-m-stuck-in-single-user-mode-and-can-t-get-out/

作为最后的选择-如果你已经尝试了上面的所有方法,并且你已经绝望了,你可以尝试停止SQL server实例并重新启动它