我必须提交票证以更改作业调度,因此我尝试通过 tsql 脚本更新 msdb..sysschedules,而不是浏览 GUI。我总是通过 GUI 立即看到更改。不过,我第一次使用这种方法时,更改需要一天的时间才能传播。最近时间更长了。我怀疑代理/调度程序中缓存了一些东西,但我找不到关于如何在生产系统上以最少侵入性的方式刷新它的文档。我希望像禁用/启用作业这样的基本功能会触发刷新,但它什么也没做,我宁愿在 T-SQL 中使用我的票证发出一些东西,以确保使用更改。当没有任何事情发生时,我已要求重新启动代理,以查看它是否有效,但理想情况下会更喜欢不那么侵入性的东西。这是一个 2014 年的实例。
示例脚本:
USE msdb;
update s set
s.freq_subday_interval=3
from msdb..sysjobs j
left join msdb..sysjobschedules js on j.job_id = js.job_id
left join msdb..sysschedules s on js.schedule_id = s.schedule_id
where j.name ='SomeDb.RunMeEvery3MinsBusta';
- - 编辑 - - -
我想从我在下面测试过的答案中获取,它似乎立即级联。只是想让它更有活力。
declare @jobid nvarchar(50), @scheduleid int
select @jobid=j.job_id,@scheduleid=s.schedule_id from msdb..sysjobs j
left join msdb..sysjobschedules js on j.job_id = js.job_id
left join msdb..sysschedules s on js.schedule_id = s.schedule_id
where j.name ='test';
EXEC msdb.dbo.sp_attach_schedule @job_id=@jobid,@schedule_id=@scheduleid
EXEC msdb.dbo.sp_update_schedule @schedule_id=@scheduleid,
@freq_subday_interval=1
GO
您可以使用以下脚本来更改时间表:
您可以使用以下脚本找到要更改计划的作业的 job_id:
要查找 schedule_id,请使用以下脚本:
这里
job_id
取自 table 的先前脚本sysjobs
。我已指定此作业在每天凌晨 2:45 运行,您也可以指定其他选项。
上面的脚本是将作业类型更改为每周,在星期六下午 3:30 运行。
以上希望有所帮助。
Learning_DBAdmin 的回答暗示,不支持您所做的事情。直接修改系统表,即。您应该使用为我们提供的接口,即代理存储过程。
FWIW,如果您阅读源代码,例如 sp_update_jobschedule,您会发现对 sp_sqlagent_notify 的调用。然而,由于上述原因,这没有记录在案。