目前,我开发的数据集中系统(小系统啦)中,每天晚上有不少与7个job运行。我采用的方式是大概测算一下 每个job运行的时间,然后相应打出富裕时间,例如某个凌晨3点半执行的进程,大概执行2个半小时,那么我在7点再执行后面的job,其间间隔3.5小时,多准备一小时备用。开始时运行都比较正常,使用一段时间之后,发现作业运行时间经常后延。一般情况下,每天的启动时间会后延几十秒,还算可以接受,但是有时会突发一场似的,后延几个小时,而且一旦当天在相同数据库用户下的前面的job运行延迟,那么后面的似乎都启动延迟。  经过一段时间监控,我发现有些启动延时,是由于job失败后进行重复尝试,fail多次,这样造成的启动时间就后延了。 举例来说,我的程序基本都是从远程取得数据,这样dblink一旦当时断掉,就会导致存储过程运行失败,然后job会重复尝试,如果当时的数据库连接断掉是突然发生的一过性的,那么job下次尝试就可以顺利解决,只是下次运行启动时间可能就发生改变了。我希望每个job的启动时间,能够固定下来。例如,如果我在用户aaa下,(前提是job1正常情况下肯定在02:00之前运行完毕)我定义为凌晨00:30运行job1,02:00点运行job2,那么  怎样保证job2可以在02:00一定运行起来?(因为我担心同在用户aaa下,不能同时运行两个test窗口,对于job1没有按时运行结束的情况下,怎么保证job2开始仍然按时运作?)

解决方案 »

  1.   

    variable a  number;
    execute dbms_job.submit(:a, '过程', to_date('2005-11-14 00:30:00'), 'sysdate+1');每天运行一次
      

  2.   

    variable a number;
    begin
      dbms_job.submit(:a,'过程',trunc(sysdate)+1/24*3.5,'trunc(sysdate)+1+1/24*3.5');
      submit;
    end;--每天凌晨3点半运行,次日不会受到时间的推移影响。
      

  3.   

    谢谢上面两位啦,但是我目前遇到的job顺延,经常由于同一个用户下的几个job,前面的作业没有在规定时间执行完(网络阵发连接故障或者其他异常影响),导致后面的启动时间延时了。
    楼上两位的办法,可以保证同一用户下的  第一个job到3点没有运行完,第二个仍然可以在3点启动么?
      

  4.   

    可以做到。另外,你可以多开几个进程,这样可以多个JOB同时跑
      

  5.   

    谢谢子豚的关注,弱弱地问一下:你说的多开进程,在pl/sql developer怎么处理呢?是不是需要著名不同的user?然后同时让多个user执行起来job?请指教,谢谢!
      

  6.   

    这个需要 DBA设置参数,而且需要重新启动数据库才有效书不在旁边,我 也不记得那个东西了,以前只是瞧过一眼而已.你上GOOGLE看看
      

  7.   

    我打开OEM看,是指job_queue_processes的具体值么?我这里现在是10,是不是戴白哦支持同时最多运行10个job?
      

  8.   

    晕菜,你不能做成一个job当一个job完成后再提交一个job执行呀.
      

  9.   

    将interval 设置为trunc(sysdate+1)+2/24 就可以保证在每天2点执行