MS SQL Server 2022服务器审核无法禁用及删除问题求助
解决SQL Server服务器审核(Server Audit)无法禁用/删除的阻塞问题
第一步:定位并终止阻塞会话
先查询找出阻塞ALTER SERVER AUDIT操作的会话:
SELECT blocking_session_id, session_id, command, wait_type, wait_time, resource_description FROM sys.dm_exec_requests WHERE command LIKE '%ALTER SERVER AUDIT%' OR blocking_session_id <> 0;
若查询结果中blocking_session_id不为0,直接终止该阻塞会话(确认无重要事务后执行):
KILL <blocking_session_id>;
第二步:检查审核目标资源占用
查看审核的目标配置与状态:
SELECT name, status_desc, audit_file_path, on_failure_desc FROM sys.server_audits WHERE name = 'System Logins';
- 若为文件目标:检查
audit_file_path对应的文件是否被其他进程(如日志阅读器、备份工具)占用,关闭占用进程后重试禁用操作。 - 若为Windows事件日志目标:确认事件日志服务正常运行,且日志未达到存储上限导致写入阻塞。
第三步:通过DAC(专用管理员连接)执行操作
如果单用户模式无效,使用DAC连接执行禁用/删除操作,DAC不受常规会话限制:
- 在SSMS的服务器名称输入框中填写
ADMIN:<你的SQL Server实例名>,完成登录。 - 执行命令:
ALTER SERVER AUDIT [System Logins] WITH (STATE = OFF); GO DROP SERVER AUDIT [System Logins]; GO
第四步:极端情况:手动清理系统元数据(谨慎操作)
以上方法均失败时,备份系统数据库后尝试以下操作:
- 停止SQL Server服务。
- 通过命令行启动单用户模式(路径根据你的实例调整):
sqlservr.exe -m -dC:\Program Files\Microsoft SQL Server\MSSQLXX.MSSQLSERVER\MSSQL\DATA\master.mdf
- 用sqlcmd连接实例,执行清理:
USE master; GO DELETE FROM sys.server_audits WHERE name = 'System Logins'; GO
- 重启SQL Server服务至正常模式。
内容的提问来源于stack exchange,提问作者Alex Zhyk
相关产品推荐
相关产品推荐

