朋友负责的一个系统突然不工作了,让我帮忙查一下原因。结果我抓了一个Profiler Trace发现根本没有找到要执行的语句,后来从SQL Server job中发现了这个功能是在Job完成的。
这个Job本来是2分钟运行一次,但是发现已经很久没运行了,手动运行了一下是正常的,为什么突然不工作了?而且发现所有的JOB都没有正常工作。我查了一下JOB的History发现记录竟然停在“1月4号”,而系统现在的时间是1月2号。原来这台机器被改过时间运行到1月4号,今天又改回到正常时间了。
原因:由于之前SQL Server计算的下次运行时间是在1月4号,而当前系统修改到正常时间后是1月2号,所以不会运行。用下面的代码查看了下次运行时间:
SELECT schedule_id,name, j.job_id,RIGHT('0'+CAST(next_run_time ASVARCHAR(6)),6)AS next_run_time,
next_run_date
FROM sysjobschedules j
innerjoin sysjobs s on s.job_id =j.job_id
where name ='jobname'
或者:
sp_help_jobschedule @job_name ='jobname'
证实了Next Run Date是1月4号的某个时间点。
解决办法:导出脚本,删除旧的JOB然后重建,之后正常工作。
目前还不知道有什么办法可以修改JOB下次运行时间(网上看到说用dbo.sp_sqlagent_notify可以,自己没有试过)。
本文转自 lzf328 51CTO博客,原文链接:
http://blog.51cto.com/lzf328/1347836