假设我有以下情况: 在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]
,如果它不存在,则表示作业已安排但未运行。这种方法是否正确?
有任何建议/意见吗?
提前致谢。
答案 0 :(得分:0)
我只是试图想象这个 - 必须已经解决问题了。似乎并不像人们想象的那样普遍存在需求。无论如何,当我找到下面的内容时,我正准备开始编写自己的支票。它似乎有效,因为它抓住了我希望它在我的服务器上找到的工作。
你的方法的问题是,如果它是一个相当快速的重复工作,或者它每天都会运行,但是在星期六跳过,你在周一检查。在我看来这样做是正确的,你需要进入频率并建立一个应该运行的时间表,然后检查历史记录并查看它是否运行。以下内容很长,需要时间才能理解,但似乎确实如此。
http://www.nuronconsulting.com/TemplateScripts_SQL_Agent_JobsJobScript_FindMissedJobs_sql.aspx