1

假设我有以下场景:在 SQL Server 代理中,有一个每天早上 6 点运行的计划作业,并且每天都运行良好。有一天,服务器在早上 5 点到早上 8 点出现故障,但是当服务器再次启动时,比计划运行的作业晚了 2 小时。

如何检查作业是否应该已经运行并指示某种“错过计划”状态?

方法:运行EXEC MSDB.DBO.SP_GET_COMPOSITE_JOB_INFO @job_id并检查last_run_time&是否last_run_time存在于 中[msdb].[dbo].[sysjobhistory],如果不存在则表示作业已安排但未运行。这种方法正确吗?

有什么建议/意见吗?

提前致谢。

4

1 回答 1

0

我只是想弄清楚这个看似 - 必须已经解决的问题 - 出来。似乎它并不像人们想象的那样普遍。无论如何,当我发现以下内容时,我正要开始自己写支票的旅程。它似乎有效,因为它抓住了我希望它在我的服务器上找到的工作。

你的方法的问题是,如果它是一个相当快的重复工作,或者它每天都运行但跳过了星期六,你在星期一检查。在我看来这样做是正确的,你需要进入频率并建立一个应该运行的表,然后去检查历史,看看它是否运行。下面的内容很长,需要时间来理解,但它似乎确实在这样做。

http://www.nuronconsulting.com/TemplateScripts_SQL_Agent_JobsJobScript_FindMissedJobs_sql.aspx

于 2014-03-12T18:01:27.200 回答