起因:死锁检查作业(更应该说是阻塞检查作业)将作业A kill掉,实际阻塞情况并不严重。刚好作业A运行的时间点,死锁检查作业也会运行,于是想修改作业A的计划调度以避开与死锁检查作业同时运行。作业A的计划调度修改后,发现作业B的计划调度也跟着改变了(根据随笔获取指定时间区间作业运行情况查看得出)。
查看作业A、B详细信息,发现两个作业的schedule_id相同。为什么会出现这种情况,可能是利用作业A生成的脚本创建作业B时,仅仅修改了作业名称、作业步骤,而作业调度还是使用作业A的,因此两个作业共用了一个计划调度。
影响:修改任一作业的计划调度会影响另一作业的计划调度,对执行时间有特别要求的作业会有影响。
解决方案:语句检查是否存在共用计划调度的作业
1 --语句检查是否存在共用计划调度的作业 2 select top 100 a.name,b.schedule_id,c.schedule_uid,c.name from msdb.dbo.sysjobs a 3 inner join msdb.dbo.sysjobschedules b 4 on a.job_id=b.job_id 5 inner join msdb.dbo.sysschedules c 6 on b.schedule_id=c.schedule_id 7 inner join ( 8 select schedule_id from msdb.dbo.sysjobschedules 9 group by schedule_id 10 having COUNT(*)>1) d 11 on b.schedule_id=d.schedule_id 12 order by schedule_id
对于存在共用计划调度的作业,可删除调度再创建新调度。