重置/强制 SQL 代理下次运行日期

Ale*_*ith 5 sql-server-2005 sql-server-agent

我需要在一段时间内测试 SQL 代理,因此需要经常将系统时钟更改为未来(并返回)......别担心它只是我的本地机器而不是服务器:-)

问题是当我再次将它设置回当前日期时间时,下一次运行日期仍然会听到未来的时间。

例如,如果我将时钟设置为未来,并且作业设置为每分钟运行一次,并且上次运行是在 11/01/2080 01:01:00,那么下次运行是 11/01/2080 01:02: 00,即使我把时钟调回到现在。

可以理解,这是 SQL Server 的正常行为。有没有办法轻松重置下一次运行日期?

我试过手动运行作业,但它对下一次运行时间没有影响。

Pix*_*ted 6

在 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)


Aar*_*and 5

好吧,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)

但是,我还没有尝试过,所以请谨慎使用。