最近新建了一个JOB,原本定义的是每天晚上22:00执行,但查程序的执行记录一直都是每天的凌晨开始执行的。
1、原本以为是job_queue_processes的原因,毕竟那个时间段执行的job还是比较多的,因此昨天把参数改大了些,今天再次查看,但是仍旧是原本的情况。
2、将程序单独拿出来运行,程序是没有问题的,因此问题只有可能出在job的参数设置上,而控制JOB下次执行时间的是this date 和 interval,而interval的设置为
TRUNC(sysdate)+22/24,对于每天循环执行的这个job显然在这里决定下次执行时间的是interval。
3、为仔细弄清楚原因,因此模拟了一个job类似的环境。新建一个job,定义每天运行时间为16:00,interval为TRUNC(sysdate)+16/24,到了16:00查看job,发现job一直运行失败,因此可以得出结论是参数interval设置有问题。
4、总结后得出原因,对于原job,根据参数interval可以得出下次运行时间是当天22:00,但是当22:00启动JOB后,会出现一种情况,interval得到的next date小于this date,所以job会一直失败,直到凌晨00:00,会出现next date大于this date时,job才会正常执行。
因此正确的interval应该是TRUNC(sysdate)+46/24而非TRUNC(sysdate)+22/24
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14131447/viewspace-694432/,如需转载,请注明出处,否则将追究法律责任。