目前,我开发的数据集中系统(小系统啦)中,每天晚上有不少与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开始仍然按时运作?)
execute dbms_job.submit(:a, '过程', to_date('2005-11-14 00:30:00'), 'sysdate+1');每天运行一次
begin
dbms_job.submit(:a,'过程',trunc(sysdate)+1/24*3.5,'trunc(sysdate)+1+1/24*3.5');
submit;
end;--每天凌晨3点半运行,次日不会受到时间的推移影响。
楼上两位的办法,可以保证同一用户下的 第一个job到3点没有运行完,第二个仍然可以在3点启动么?