我需要帮助设置在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

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

谢谢! !

其他回答

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

我实际上有一个问题,我的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

做了我需要做的,然后重新上线。感谢所有为我写这些文章的人,让我把这些文章结合起来,解决我的问题。

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

什么都试过了,都没用 远程登录那台服务器,因为我们要切断所有连接 多次运行下面的代码,直到它返回已完成且不再有“kill process”测试为止 再次使用下面的代码重新激活它

使用master GO声明@sql为varchar(20), @spid为int 从master..sysprocesses中选择@spid = min(spid) db_id('DB_NAME')和spid != @@spid 当(@spid不是空)开始 打印' kill process ' + cast(@spid as varchar) + '…' Set @sql = 'kill ' + cast(@spid为varchar) exec (@sql) 选择 @spid = min(spid) 从 主人. . sysprocesses 在哪里 dbid = db_id('DB_NAME') 和spid != @@spid结束

然后把它活着带回来

修改数据库db_name去

我和当地的数据库出了点问题。

我能够通过停止SQL server来解决这个问题,然后启动SQL server,然后使用SSMS UI将DB属性更改为Multi_User。

当我试图恢复备份时,数据库进入“单用户”模式。在尝试恢复之前,我没有创建目标数据库的备份(SQL 2017)。这样你每次都能成功。

停止SQL Server,启动SQL Server,然后运行上述脚本或使用用户界面。