通过 Management Studio 将数据库设置为 multi_user

set database to multi_user through management studio

我不得不将我的数据库设置为 single_user 模式以允许 dbcc checkdb 修复,现在我无法将我的数据库恢复为 multi_user。我在针对 master 数据库的查询 window 中尝试了以下命令,但它没有按照另一个 Stack overflow post:

的建议工作
USE [master]; 
GO 

ALTER DATABASE mydb SET MULTI_USER WITH ROLLBACK IMMEDIATE; 
GO

我收到以下错误:

Msg 5064, Level 16, State 1, Line 2 Changes to the state or options of database 'mydb' cannot be made at this time. The database is in single-user mode, and a user is currently connected to it.
Msg 5069, Level 16, State 1, Line 2 ALTER DATABASE statement failed.

如果我右键单击数据库并尝试选择属性,则会出现错误,提示它已在使用中。

如有任何帮助,我们将不胜感激。

首先尝试选择 master 数据库和运行 alter 命令。

如果它不起作用,则存在一些打开的数据库连接,您可以检查并终止进程

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

尝试终止现有连接并在同一批中设置 MULTI_USER:

USE master; 
GO
DECLARE @sql nvarchar(MAX);
SELECT @sql = ' KILL ' + CAST(session_id as varchar(5))
    FROM sys.dm_exec_sessions
    WHERE database_id = DB_ID(N'mydb');
SET @sql = @sql + N' ALTER DATABASE mydb SET MULTI_USER;';
EXEC sp_executesql @sql;
GO

要获取绑定到数据库的会话,我 运行:

SELECT request_session_id 来自 sys.dm_tran_locks 其中 resource_database_id = DB_ID('mydb')

这产生了 55 的 processid

然后我运行:

杀死 55 去

而且我能够使用以前不起作用的 alter multi_user 行

您收到此错误的最可能原因是您仍然打开用于将数据库设置为单用户的原始会话。如果您在将数据库设置为单用户的同一会话中执行上述 SQL,它将起作用。