Sql-Server-2005
重置/強制 SQL 代理下次執行日期
我需要在一段時間內測試 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
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';
但是,我還沒有嘗試過,因此請謹慎使用。