已禁用Managed Backup仍生成.xel文件,如何彻底停止?
彻底停止SQL Server 2019中Managed Backup关联的.xel扩展事件文件生成
1. 检查并停止相关扩展事件会话
Managed Backup的扩展事件会话可能仍在后台运行,即使你已禁用功能。执行以下SQL查询找出目标会话:
SELECT name, state_desc FROM sys.dm_xe_sessions WHERE name LIKE '%ManagedBackup%' OR name LIKE '%Azure%Backup%';
如果查询结果中存在状态为RUNNING的会话,先停止它:
ALTER EVENT SESSION [会话名称] ON SERVER STATE = STOP;
同时禁用会话的自动启动,避免SQL Server重启后再次运行:
ALTER EVENT SESSION [会话名称] ON SERVER WITH (STARTUP_STATE = OFF);
2. 清理数据库级别的Managed Backup配置
即使实例级Managed Backup已禁用,部分数据库可能仍保留独立配置。执行以下查询查看当前配置:
EXEC msdb.dbo.managed_backup.sp_get_backup_configuration;
针对仍启用备份的数据库,执行命令禁用:
EXEC msdb.dbo.managed_backup.sp_backup_config_basic @database_name = '目标数据库名', @enable_backup = 0;
如果需要批量清理所有用户数据库的配置,可使用游标脚本:
DECLARE @db_name NVARCHAR(128); DECLARE db_cursor CURSOR FOR SELECT name FROM sys.databases WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb'); OPEN db_cursor; FETCH NEXT FROM db_cursor INTO @db_name; WHILE @@FETCH_STATUS = 0 BEGIN EXEC msdb.dbo.managed_backup.sp_backup_config_basic @database_name = @db_name, @enable_backup = 0; FETCH NEXT FROM db_cursor INTO @db_name; END CLOSE db_cursor; DEALLOCATE db_cursor;
3. 禁用/删除Managed Backup相关SQL Server代理作业
Managed Backup会自动创建代理作业(如ManagedBackupMasterJob、ManagedBackupWorkerJob),这些作业可能持续触发扩展事件。先查询现有相关作业:
SELECT name, enabled FROM msdb.dbo.sysjobs WHERE name LIKE '%ManagedBackup%';
禁用作业(保留用于后续可能恢复):
EXEC msdb.dbo.sp_update_job @job_name = '作业名称', @enabled = 0;
或直接删除作业:
EXEC msdb.dbo.sp_delete_job @job_name = '作业名称';
4. 验证停止效果
完成上述操作后,等待1-2小时,检查SQL Server默认日志文件夹(通常路径为C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log),确认是否还有新的.xel文件生成。也可通过以下SQL查询确认会话输出路径及状态:
SELECT s.name AS session_name, t.target_name, c.value AS file_path FROM sys.dm_xe_sessions s JOIN sys.dm_xe_session_targets t ON s.address = t.event_session_address JOIN sys.dm_xe_object_columns oc ON t.target_name = oc.object_name JOIN sys.dm_xe_session_object_columns c ON t.event_session_address = c.event_session_address AND oc.column_name = c.column_name WHERE oc.column_name = 'filename' AND s.name LIKE '%ManagedBackup%';
内容的提问来源于stack exchange,提问作者EntDBA
相关产品推荐
相关产品推荐

