我们的一个系统中写了很多存储过程,这些存储过程都是通过JOB定时执行的,可是运行一段时间后,发现有时候 JOB的定时时间会随机改变,请问高手这是什么原因呢?(小弟在线等待)

解决方案 »

  1.   

    如果制定的interval是sysdate + var的话, 时间是会慢慢的向后推迟的..将sysdate + var 改成 trunc(sysdate) + var的形式..
      

  2.   

    我也遇到同样的问题过,后来解决的方法是设置时间的上下限,如myDate>to_date(myDate,'yyyy-mm-dd hh24:mi:ss')-2 and myDate<=to_date(myDate,'yyyy-mm-dd hh24:mi:ss')而不是光用myDate>to_date(myDate,'yyyy-mm-dd hh24:mi:ss'),这样的话,记录的准确性也就有保证了,但是怎样解决JOB的执行时间往后推移,也没有什么办法。
      

  3.   

    执行时间往后推,是因为他的下次执行时间是从本次执行完以后开始计算的,如果你的任务每次需要执行5分钟,那么,你的Job就会每天往后推五分钟。
    你可以把下次执行时间改为   trunc(sysdate)+ 1 / 24  /3600 * 5
                                               天 小时  秒
      

  4.   

    这个是oracle job时间间隔机制的问题,oracle的时间间隔开始计算时间,是上一次job结束的时间,也就是第一次10:00执行,10:01结束完毕,时间间隔你设置为5分钟,那么第二次的job执行时间是10:06,并不是10:05,
    最好是加上trunc()之类的,比如每天上午10点一次,那么时间间隔:trunc(sysdate,'yyyymmdd')+ 10/24,但是一天多次的比较麻烦,没办法避免.