无法定位运行失败的SQL Server备份作业,求排查方法
未知master/msdb备份作业排查方案
1. SQL实例层面排查
- 捕获运行中的备份会话
备份作业运行时执行以下查询,可直接获取发起方的主机名、程序名、登录账号及执行的语句:SELECT r.session_id, s.login_name, s.host_name, s.program_name, r.command, t.text AS executing_sql FROM sys.dm_exec_requests r JOIN sys.dm_exec_sessions s ON r.session_id = s.session_id CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t WHERE r.command LIKE 'BACKUP%' - 查历史备份记录
通过msdb系统表查询历史备份的发起信息:SELECT bs.database_name, bs.backup_start_date, bs.user_name, bs.machine_name, bmf.physical_device_name FROM msdb.dbo.backupset bs JOIN msdb.dbo.backupmediafamily bmf ON bs.media_set_id = bmf.media_set_id WHERE bs.database_name IN ('master','msdb') ORDER BY bs.backup_start_date DESC - 查默认跟踪日志
SQL Server默认跟踪会记录备份操作,可通过以下查询回溯历史备份的发起方信息:DECLARE @trace_path NVARCHAR(256) SELECT @trace_path = path FROM sys.traces WHERE is_default = 1 SELECT EventClass, TextData, ApplicationName, LoginName, SPID, StartTime, HostName FROM fn_trace_gettable(@trace_path, DEFAULT) WHERE EventClass IN (115,116) AND (TextData LIKE '%BACKUP DATABASE%master%' OR TextData LIKE '%BACKUP DATABASE%msdb%') ORDER BY StartTime DESC - 定时捕获操作:若作业为固定时间触发,可提前开启扩展事件会话或SQL Server Profiler,过滤所有BACKUP相关事件,捕获完整调用信息。
2. Windows操作系统层面排查
- 检查隐藏任务计划:打开任务计划程序,进入「任务计划程序库」,在「查看」菜单勾选「显示隐藏任务」,遍历所有账号下的定时任务,重点排查运行身份为SYSTEM、SQL服务账号、管理员账号的备份相关任务。
- 解析事件日志详情:找到「Windows Logs > Application」中对应的备份报错事件,查看详情中的进程ID(PID)、程序路径、安全标识,执行命令
tasklist /fi "pid eq <实际PID>"定位运行程序。 - 排查第三方服务:检查Windows服务列表,排查非系统默认的备份类服务、自定义脚本托管服务。
3. Azure资源层面排查
- 确认Recovery Vault备份策略:检查对应恢复保管库的SQL备份策略,确认是否配置了系统数据库独立备份规则,排除旧版本规则残留。
- 检查VM扩展:进入Azure VM的「扩展 + 应用」页面,排查是否存在除Recovery Service扩展之外的其他备份类扩展。
- 查Azure活动日志:筛选对应VM近7天的操作记录,排查是否有自动化账号、服务主体发起的备份类调用。
内容的提问来源于stack exchange,提问作者mluker
相关产品推荐
相关产品推荐

