将数据库从单用户模式设置为多用户

我需要帮助设置数据库在单SINGLE USER模式下恢复到MULTI USER 。 每次跑步

 ALTER DATABASE BARDABARD SET MULTI_USER; GO 

我得到这个错误:

目前无法更改数据库“BARDABARD”的状态或选项。

数据库处于单用户模式,并且当前正在连接一个用户。

它需要在非单SINGLE USER模式下设置为另一种模式,但在单SINGLE USER模式下,我无法将数据库设置为其他任何模式。

“用户当前连接到它”可能是SQL Server Management Studio窗口本身。 尝试select主数据库并再次运行ALTER查询。

该错误消息通常意味着还有其他进程连接到数据库。 尝试运行以查看哪些已连接:

 exec sp_who 

这将返回你的过程,然后你应该能够运行:

 kill [XXX] 

其中[xxx]是你试图杀死的进程的spid

然后你可以运行你的上面的语句。

祝你好运。

您可以添加选项以立即回滚您的更改。

 ALTER DATABASE BARDABARD SET MULTI_USER WITH ROLLBACK IMMEDIATE GO 

SQL Server 2012:

右键单击DB > Properties > Options > [Scroll down] State > RestrictAccess > select Multi_user ,然后单击确定。

瞧!

我有同样的问题,并通过以下步骤修复 – 参考: http : //giladka8.blogspot.com.au/2011/11/database-is-in-single-user-mode-and.html

 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 56 => kill the number in spid field GO exec sp_dboption 'dbname', 'single user', 'FALSE' GO 

这对我来说工作得很好。

步骤1.右键单击数据库引擎,单击活动监视器,查看哪个进程正在连接。 杀死该特定用户并立即执行查询。

第2步。

 USE [master]; GO ALTER DATABASE [YourDatabaseNameHere] SET MULTI_USER WITH NO_WAIT; GO 

并刷新数据库。

实际上我遇到了一个问题,那就是我的数据库几乎被进程和它们的竞争条件所locking,到时候我得到一个刷新的命令,并且再次locking了它…我必须背靠背地运行以下命令在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 

做了我所需要的,然后把它重新在线上。 感谢所有为我编写这些作品的人合并解决我的问题。

最好直接login到服务器而不是使用SQL Management Studio

确保您login的帐户是您要设置为MULTI_USER的数据库的dbowner。 如果可以,请以sa身份login(使用SQL Server身份validation)

如果您的数据库被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-im-stuck-in-single-user-mode-and-can-t-get-out/

作为最后的select – 如果你已经尝试了上面的所有东西,而且越来越绝望,你可以尝试停止SQL服务器实例并重新启动它

当我不知道用于更改为singleuser模式的特定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 

这对我来说工作得很好

  1. 做一个备份
  2. 创build新的数据库并将备份恢复到它
  3. 然后,属性>选项> [向下滚动]状态>限制访问>select多用户,然后单击确定
  4. 删除旧的数据库

希望这项工作对所有人谢谢Ramesh库马尔

如果上述不起作用,请查找spid的login名并在“安全 – login”中将其禁用

  1. 试过一切都没有工作
  2. 远程login到该服务器,因为我们要杀死所有的连接
  3. 运行下面的代码不止一次,直到它返回完成,没有“杀死进程”testing了
  4. 使用下面的代码下面的代码重新激活它

使用主GO声明@sql作为varchar(20),@spid作为int

从master..sysprocesses中select@spid = min(spid),其中dbid = db_id('DB_NAME')和spid!= @@ spid

(@spid不为空)开始打印'杀死进程'+强制转换(@spid为varchar)+'…'设置@sql ='杀死'+强制转换(@spid as varchar)exec(@sql)

 select @spid = min(spid) from master..sysprocesses where dbid = db_id('DB_NAME') and spid != @@spid end 

然后把它带回来

ALTER DATABASE DB_NAME SET MULTI_USER; 走

我很容易解决了这个问题

  1. 右键单击数据库名称重命名它

  2. 修改完成后,右键点击数据库名称 – >属性 – >选项 – >滚动到RestrictAccess的底部(SINGLE_USER到MULTI_USER)

  3. 现在您可以再次将数据库重命名为旧名称。

在使用SQL Server 2014的3次以上,我有一个数据库转换为单用户模式,没有我改变任何东西。 它一定是在数据库创build过程中发生的。 以上所有的方法从来没有工作,因为我总是收到一个错误,数据库是单用户模式,无法连接到。

我得到的唯一工作是重新启动SQL Server Windows服务。 这允许我连接到数据库并进行必要的更改或删除数据库并重新开始。

只需进入数据库属性并将SINGLE USER模式更改为MULTI USER

在这里输入图像说明

注:如果它不适合你,然后采取DB备份和恢复再次做上述方法

* Single = SINGLE_USER

多重= MULTI_USER

受限= RESTRICTED_USER