Ale*_*ith 5 sql-server-2005 sql-server-agent
我需要在一段时间内测试 SQL 代理,因此需要经常将系统时钟更改为未来(并返回)......别担心它只是我的本地机器而不是服务器:-)
问题是当我再次将它设置回当前日期时间时,下一次运行日期仍然会听到未来的时间。
例如,如果我将时钟设置为未来,并且作业设置为每分钟运行一次,并且上次运行是在 11/01/2080 01:01:00,那么下次运行是 11/01/2080 01:02: 00,即使我把时钟调回到现在。
可以理解,这是 SQL Server 的正常行为。有没有办法轻松重置下一次运行日期?
我试过手动运行作业,但它对下一次运行时间没有影响。
在 Aaron 完成了出色的工作之后,我发现执行下面的 ReloadJobSchedules 列中的结果可以解决问题。出于某种原因,我无法通过手动更新 msdb.dbo.sys.sysjobschedules.next_run_date 来获得刷新到正确的下一次运行日期的计划。
SELECT j.name AS JobName
,sch.name AS ScheduleName
,'EXECUTE msdb..sp_update_jobschedule @job_name = ''' + j.name + ''', @name = ''' + sch.name + '''' AS ReloadJobSchedules
FROM msdb.dbo.sysjobschedules s
INNER JOIN
msdb.dbo.sysschedules sch
ON s.schedule_id = sch.schedule_id
INNER JOIN
msdb.dbo.sysjobs j
ON s.job_id = j.job_id
WHERE sch.[enabled] = 1
ORDER BY
j.name
Run Code Online (Sandbox Code Playgroud)
好吧,msdb..sysjobschedules
如果您不想等待 20 分钟让后台线程自行更正,则可以手动更新(如本答案所述)。
UPDATE msdb.dbo.sysjobschedules
SET next_run_date = CONVERT(INT, CONVERT(CHAR(8), GETDATE(), 112))
WHERE CONVERT(CHAR(4), next_run_date) > '2020';
Run Code Online (Sandbox Code Playgroud)
但是,我还没有尝试过,所以请谨慎使用。