我需要帮助设置在SINGLE_USER模式恢复到MULTI_USER的数据库。每次我奔跑
ALTER DATABASE BARDABARD
SET MULTI_USER;
GO
我得到这个错误:
目前不能更改数据库'BARDABARD'的状态或选项。 数据库处于单用户模式,当前有用户连接到数据库。
它需要在非SINGLE_USER模式下将其设置为另一种模式,但当它是SINGLE_USER模式时,我不能将数据库设置为任何其他模式。
我需要帮助设置在SINGLE_USER模式恢复到MULTI_USER的数据库。每次我奔跑
ALTER DATABASE BARDABARD
SET MULTI_USER;
GO
我得到这个错误:
目前不能更改数据库'BARDABARD'的状态或选项。 数据库处于单用户模式,当前有用户连接到数据库。
它需要在非SINGLE_USER模式下将其设置为另一种模式,但当它是SINGLE_USER模式时,我不能将数据库设置为任何其他模式。
当前回答
我实际上有一个问题,我的db几乎被进程和竞争条件锁定,当我得到一个命令执行刷新时,他们再次锁定…我不得不在SSMS中背靠背地运行以下命令,让我离线,从那里我做了我的恢复,并恢复在线,这两个查询在哪里:
第一个跑:
USE master
GO
DECLARE @kill varchar(8000) = '';
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), spid) + ';'
FROM master..sysprocesses
WHERE dbid = db_id('<yourDbName>')
EXEC(@kill);
然后紧接着(在第二个查询窗口中):
USE master ALTER DATABASE <yourDbName> SET OFFLINE WITH ROLLBACK IMMEDIATE
做了我需要做的,然后重新上线。感谢所有为我写这些文章的人,让我把这些文章结合起来,解决我的问题。
其他回答
我实际上有一个问题,我的db几乎被进程和竞争条件锁定,当我得到一个命令执行刷新时,他们再次锁定…我不得不在SSMS中背靠背地运行以下命令,让我离线,从那里我做了我的恢复,并恢复在线,这两个查询在哪里:
第一个跑:
USE master
GO
DECLARE @kill varchar(8000) = '';
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), spid) + ';'
FROM master..sysprocesses
WHERE dbid = db_id('<yourDbName>')
EXEC(@kill);
然后紧接着(在第二个查询窗口中):
USE master ALTER DATABASE <yourDbName> SET OFFLINE WITH ROLLBACK IMMEDIATE
做了我需要做的,然后重新上线。感谢所有为我写这些文章的人,让我把这些文章结合起来,解决我的问题。
SQL Server 2012:
右键单击DB > Properties > Options >[向下滚动]State > RestrictAccess >选择Multi_user,然后单击OK。
拖鞋!
你不能这样做,因为数据库在单一模式下。好的,但你应该知道:当你打开sql management studio时,它不知道数据库上的任何用户,但当你点击数据库时,它认为你是单个用户,你的命令不工作。 只要这样做:关闭管理工作室,然后重新打开。新的查询窗口无需选择任何数据库编写命令脚本。
USE [master];
GO
ALTER DATABASE [tuncayoto] SET MULTI_USER WITH NO_WAIT;
GO
使f5 wolla一切正常!
最好是直接登录到服务器上,而不是使用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实例并重新启动它
我在谷歌上搜索了一段时间,最终找到了下面的解决方案,
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
这应该有用。编码快乐! !
谢谢! !