今天做了个测试,想看下如果正在运行的定时JOB被broken后会怎样,我原以为定时job会停止继续起job,而正在运行的job会继续跑完,但是测试结果我只猜对了一半。
1.建立定时job
declare
job number;
begin
dbms_job.submit(job,'FOR i IN 1..500000 LOOP
insert into a (id,m_name) values (1,''aaaa'');
END LOOP;
COMMIT;',sysdate+1/1440,'sysdate+1/1440');
COMMIT;
end;
2. 查看dba_jobs_running,当job正在跑的时候broken job
BEGIN
DBMS_JOB.broken(49,TRUE);
COMMIT;
END;
3.查看Dba_Jobs中job情况
SELECT t.LAST_SEC,t.THIS_SEC,t.NEXT_SEC,t.BROKEN,t.FAILURES,t.*
FROM Dba_Jobs t WHERE t.LOG_USER='ORACLE' AND t.JOB=49;
4. 查看dba_jobs_running,发现启动的job还在运行
到这里还都在我的预算中,当正在运行的job跑完,我再次查询这个job时,发现它竟然自己又重新启动了!!!!
所以大家准备停止定时JOB去做些与JOB内容互斥的操作时就要小心了,一定要等到JOB跑完后再停止,不要被它被骗了。。。。。。。