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
相关产品推荐
相关产品推荐

