我需要设置将SINGLE_USER
模式恢复为的数据库的帮助MULTI_USER
。每次我跑步
ALTER DATABASE BARDABARD
SET MULTI_USER;
GO
我收到此错误:
目前无法更改数据库“ BARDABARD”的状态或选项。
数据库处于单用户模式,并且当前有用户连接到该数据库。
它必须处于非SINGLE_USER
模式才能将其设置为另一种模式,但是当数据库处于mode时,我不能将其设置为任何其他SINGLE_USER
模式。
我需要设置将SINGLE_USER
模式恢复为的数据库的帮助MULTI_USER
。每次我跑步
ALTER DATABASE BARDABARD
SET MULTI_USER;
GO
我收到此错误:
目前无法更改数据库“ BARDABARD”的状态或选项。
数据库处于单用户模式,并且当前有用户连接到该数据库。
它必须处于非SINGLE_USER
模式才能将其设置为另一种模式,但是当数据库处于mode时,我不能将其设置为任何其他SINGLE_USER
模式。
Answers:
“用户当前已连接”可能是SQL Server Management Studio窗口本身。尝试选择master数据库,然后ALTER
再次运行查询。
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
我实际上遇到了一个问题,即我的数据库几乎被进程和与它们之间的竞争条件所锁定,等到我刷新一个执行的命令并再次将其锁定时,我才不得不将以下命令重新运行在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 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
如果您仍然遇到问题,请参考这里:
作为最后的替代方法 -如果您已尝试了上述所有操作,并且感到绝望,则可以尝试停止SQL Server实例并重新启动它
当我不知道用于更改为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
使用主GO将@sql声明为varchar(20),将@spid声明为int
从master..sysprocesses中选择@spid = min(spid),其中dbid = db_id('DB_NAME')和spid!= @@ spid
而(@spid不为null)开始打印'杀死进程'+ cast(@spid as varchar)+'...'set @sql ='kill'+ cast(@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; 走
如果上述方法不起作用,请在“安全性-登录”中找到该spid的登录名并将其禁用。
只需转到数据库属性, 然后将“单用户”模式更改为“多用户”
注意:如果对您不起作用,请进行Db备份并再次还原,然后再次执行上述方法
*单身= SINGLE_USER
多个= MULTI_USER
受限= RESTRICTED_USER
进入单用户模式后,客户端只能与SQL Server建立一个连接,请记住“对象资源管理器”占用了一个(单独的)连接,因此,如果您尝试在查询中运行多用户语句窗口,您将收到错误消息,即在单用户模式下无法建立另一个连接。
对我而言,这不是问题,就我而言,很少有自动流程(每几秒钟)持续建立连接,因此,一旦我将数据库置于单用户模式并断开了自己的连接,其中之一建立/占用连接的进程(在我可以开始还原操作之前)。一旦我终止了这些连接-它们将重新连接,当我运行Restore命令时,我会得到一个错误,即连接已被占用。
为了解决这个问题,我必须在一个查询窗口中全部编写kill
语句,更改User-Mode
语句和Restore
操作,当我一次全部运行它们时,瞧!有效。
希望这对其他人有帮助。
我搜索了一段时间的解决方案,最后提出了以下解决方案,
通常,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
这应该工作。编码愉快!!
谢谢!!
master
),也似乎查询窗口可能已附加到数据库。如果仍然让您头疼,请关闭所有其他查询窗口,然后在剩下的一个窗口的下拉列表中选择或选择一些无害的系统数据库。master
tempdb