我需要帮助设置在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
做了我需要做的,然后重新上线。感谢所有为我写这些文章的人,让我把这些文章结合起来,解决我的问题。
其他回答
这对我来说很有效。
步骤1。右键单击数据库引擎,单击活动监视器,查看哪个进程正在连接。立即终止特定用户并执行查询。
步骤2。
USE [master];
GO
ALTER DATABASE [YourDatabaseNameHere] SET MULTI_USER WITH NO_WAIT;
GO
并刷新数据库。
您可以添加立即回滚更改的选项。
ALTER DATABASE BARDABARD
SET MULTI_USER
WITH ROLLBACK IMMEDIATE
GO
我实际上有一个问题,我的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中禁用它
当我不知道用于切换到单用户模式的特定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