我需要禁用服务器上运行的所有作业。我运行了以下代码:
declare @t table (schedule_id int, [name] varchar(300))
update msdb.dbo.sysschedules
set enabled = 0
output inserted.schedule_id, inserted.name into @t
from msdb.dbo.sysjobs j
join msdb.dbo.sysjobschedules js
on j.job_id = js.job_id
join msdb.dbo.sysschedules s
on js.schedule_id = s.schedule_id
where j.[name] not like 'DB -%' and j.[name] not like 'sys%' and j.[name] not like 'Maintenance%'
select * from @t
当我从 SQL 代理 GUI 或通过 SQL 检查给定作业及其相关计划时,我可以看到计划被禁用。但是,这些作业仍在运行,如果我检查 msdb.dbo.sysjobschedules,我可以看到未来的下一次运行日期。
我在网上看到的唯一事情表明有一个后台线程需要刷新才能接受此更改?这样做,我需要运行 sp_sqlagent_refresh_job (没有帮助),或者重新启动服务器。
我可以重新启动服务器,但我很好奇是否有其他人看到过这种行为,知道原因,知道如何以另一种方式修复它。