You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server数据库陷入单用户模式问题求助

解决SQL Server单用户模式下无法访问数据库的问题

别慌,这种情况在DBA日常操作里真的挺常见——单用户模式下会话意外断开,导致数据库相当于被“锁死”,连sp_who2都查不到相关会话也正常,咱们用SQL Server的专用管理员连接(DAC)就能搞定,一步步来:

步骤1:通过专用管理员连接(DAC)登录SQL Server

DAC是SQL Server留给管理员的应急通道,哪怕数据库处于单用户模式,它也能突破限制建立连接:

  • 如果用SSMS操作:在「服务器名称」输入框里填 ADMIN:你的服务器名\实例名,然后用Windows或SQL身份验证登录;
  • 如果用命令行(更稳妥,避免SSMS的额外会话干扰):打开命令提示符,执行:
    sqlcmd -S ADMIN:YourServerName\InstanceName -E
    
    (-E代表用Windows身份验证,要是用SQL账号,换成-U 用户名 -P 密码即可)

步骤2:定位占用目标数据库的会话

登录DAC后,执行以下SQL找到关联目标数据库的所有会话(记得把YourDatabaseName换成实际的数据库名):

SELECT 
    session_id, 
    login_name, 
    program_name
FROM sys.dm_exec_sessions
WHERE database_id = DB_ID('YourDatabaseName');

这里能查到所有和该数据库绑定的会话,包括一些sp_who2可能漏掉的系统会话。

步骤3:杀掉占用会话

对查到的每个session_id(注意别杀自己当前的DAC会话)执行 kill 命令:

KILL 123; -- 替换成你查到的实际session_id

步骤4:将数据库改回多用户模式

最后执行这条命令,立即切换回多用户模式,同时强制回滚所有未提交的事务,确保切换顺利:

ALTER DATABASE YourDatabaseName SET MULTI_USER WITH ROLLBACK IMMEDIATE;

后续操作提醒

以后再设置单用户模式时,建议直接加上WITH ROLLBACK IMMEDIATE,避免会话断开后锁库:

ALTER DATABASE YourDatabaseName SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

内容的提问来源于stack exchange,提问作者user7488971

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:22:49