请教oracle job queue问题 各位大侠好:
这几天小弟一直很郁闷,为什么同样的存储过程,通过oracle job queue设置在不同的时间执行时,一个成功,而另一个不成功。下面是job queue的设置情况:select a.job,a.last_date,a.last_sec,a.next_date,a.next_sec,
a.broken,a.interval,a.failures,a.what,a.misc_env
from user_jobs a where a.job in (1, 22);JOB: 22
LAST_DATE: 2007-8-7 8:12:42
LAST_SEC: 08:12:42
NEXT_DATE: 2007-8-9 7:00:00
NEXT_SEC: 07:00:00
BROKEN: N
INTERVAL: trunc(sysdate)+1+7/24
FAILURES: 0
WHAT: stoptuanxianusers;
MISC_ENV: 0102000200000000JOB: 1
LAST_DATE: 2007-8-8 21:30:06
LAST_SEC: 21:30:06
NEXT_DATE: 2007-8-9 21:30:00
NEXT_SEC: 21:30:00
BROKEN: N
INTERVAL: trunc(sysdate+1)+21/24+numtodsinterval(30,'MINUTE')
FAILURES: 0
WHAT: stoptuanxianusers;
MISC_ENV: 0102000200000000job1 和job22都是执行存储过程stoptuanxianusers,只不过job1定在每晚21:30执行,job22定在每天早上7:00,但根据这几天的观察,每晚21:30的job1正常执行,而每天早上7:00的job22没有一次执行过,user_jobs中的failures字段每也没值,这说明没有失败吧?那为什么不成功呢?是我设置的interval不对了?
这几天小弟一直很郁闷,为什么同样的存储过程,通过oracle job queue设置在不同的时间执行时,一个成功,而另一个不成功。下面是job queue的设置情况:select a.job,a.last_date,a.last_sec,a.next_date,a.next_sec,
a.broken,a.interval,a.failures,a.what,a.misc_env
from user_jobs a where a.job in (1, 22);JOB: 22
LAST_DATE: 2007-8-7 8:12:42
LAST_SEC: 08:12:42
NEXT_DATE: 2007-8-9 7:00:00
NEXT_SEC: 07:00:00
BROKEN: N
INTERVAL: trunc(sysdate)+1+7/24
FAILURES: 0
WHAT: stoptuanxianusers;
MISC_ENV: 0102000200000000JOB: 1
LAST_DATE: 2007-8-8 21:30:06
LAST_SEC: 21:30:06
NEXT_DATE: 2007-8-9 21:30:00
NEXT_SEC: 21:30:00
BROKEN: N
INTERVAL: trunc(sysdate+1)+21/24+numtodsinterval(30,'MINUTE')
FAILURES: 0
WHAT: stoptuanxianusers;
MISC_ENV: 0102000200000000job1 和job22都是执行存储过程stoptuanxianusers,只不过job1定在每晚21:30执行,job22定在每天早上7:00,但根据这几天的观察,每晚21:30的job1正常执行,而每天早上7:00的job22没有一次执行过,user_jobs中的failures字段每也没值,这说明没有失败吧?那为什么不成功呢?是我设置的interval不对了?
begin
dbms_job.next_date(22,trunc(sysdate)+1+7/24);
end;
/
begin
dbms_job.interval(22,'trunc(sysdate)+1+7/24');
end;
/
commit;从昨天执行修改后的next_date和next_sec值看来,我设置的interval应该是正确的啊。
variable job_no2 number;
begin
dbms_job.submit(:job_no2,'stoptuanxianusers;',trunc(sysdate)+6/24+numtodsinterval(55,'MINUTE'),'trunc(sysdate)+1+6/24+numtodsinterval(55,''MINUTE'')');
end;
/
commit;
begin
dbms_job.submit(:job_no2,'stoptuanxianusers;',trunc(sysdate)+7/24,'trunc(sysdate)+1+7/24');
end;
/
commit;
查询job信息显示如下:
JOB 41
LAST_DATE:null
LAST_SEC: null
NEXT_DATE:2007-8-10 6:55:00
NEXT_SEC: 06:55:00
BROKEN: N
INTERVAL: trunc(sysdate)+1+6/24+numtodsinterval(55,'MINUTE')
FAILURES: null
WHAT: stoptuanxianusers;
MISC_ENV: 0102000200000000JOB 42
LAST_DATE:null
LAST_SEC: null
NEXT_DATE:2007-8-10 7:00
NEXT_SEC: 7:00:00
BROKEN: N
INTERVAL: trunc(sysdate)+1+7/24
FAILURES: null
WHAT: stoptuanxianusers;
MISC_ENV: 102000200000000
这些信息显示新job提交正确。时间过了07:00之后,我再次查询job信息显示如下JOB 41
LAST_DATE:2007-8-10 6:55:07
LAST_SEC: 06:55:07
NEXT_DATE:2007-8-11 6:55:00
NEXT_SEC: 06:55:00
BROKEN: N
INTERVAL: trunc(sysdate)+1+6/24+numtodsinterval(55,'MINUTE')
FAILURES: 0
WHAT: stoptuanxianusers;
MISC_ENV: 0102000200000000JOB: 42
LAST_DATE:2007-8-10 7:00
LAST_SEC: 7:00:09
NEXT_DATE:2007-8-11 7:00
NEXT_SEC: 7:00:00
BROKEN: N
INTERVAL: trunc(sysdate)+1+7/24
FAILURES: 0
WHAT: stoptuanxianusers;
MISC_ENV: 102000200000000从新设置任务的运行结果看来,新的job已经的在预定时间正确正常运行了!
那么为什么之前的job22不能正常执行呢?现在基本上可以判定为第一次提交job时对job的相关设置有误,导致第一次没有正常执行,之后修改也不起作有了。而这又给我们大家提出了另外一个问题:为什么第一次设置next_date和interval出错后,再通过dbms_job的next_date和interval对该job的参数进行重新设置后,没有起到实际作用呢?