job 不能自動運作--這是另外一個mos文章
參考原文:
Jobs Not Executing Automatically (Doc ID 313102.1)
适用于:
Oracle Database - Enterprise Edition - Version 9.2.0.3 to 10.2.0.4 [Release 9.2 to 10.2]
Information in this document applies to any platform.
症狀:
job已經很長時間沒有自動運作了。
如果強制執行(exec dbms_job.run(<enter here job number>);), 這些job是能成功執行的。
原因:
按照如下步驟檢查job無法自動執行的原因:
1) instance處于RESTRICTED SESSIONS 模式?
select instance_name,logins from v$instance;
If logins=RESTRICTED, then:
alter system disable restricted session;
--->注意,正常情況下,logins應該傳回: ALLOWED
2)JOB_QUEUE_PROCESSES=0
show parameter job_queue_processes
一定要讓job_queue_processes這個參數大于零。
3)隐含參數_SYSTEM_TRIG_ENABLED=FALSE
col parameter format a25
col value format a15
select a.ksppinm parameter,b.ksppstvl value from x$ksppi a,x$ksppcv b
where a.indx=b.indx and ksppinm='_system_trig_enabled';
如果 _system_trig_enabled=false, 那麼執行如下指令改為true
alter system set "_system_trig_enabled"=TRUE scope=both;
4)job 被broken了 ?
select job,broken from dba_jobs where job=<job_number>;
如果job被broken了,那麼請檢查alert日志和trace file 來診斷broken的原因。
5)job 帶commit關鍵字了?
一定要保證 commit 出現在submit job之後
DECLARE X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
(
job => X
,what => 'dbms_utility.analyze_schema
(''SCOTT'',''COMPUTE'',NULL,NULL,NULL);'
,next_date => to_date('08/06/2005 09:35:00','dd/mm/yyyy hh24:mi:ss')
,no_parse => FALSE
);
COMMIT; --->注意:這個COMMIT一定得有。
END;
/
如果強制執行job是ok的(比如這麼執行 exec dbms_jobs.run(<job_no>);),那麼很可能是缺少一個commit
6)os 已經啟動超過497天
檢查資料庫伺服器作業系統是否已經啟動超過497天。
對于linux,unix而言,請使用uptime來檢查。
如果uptime的結果大于497天,并且job不能自動執行,那麼就遇到了未公開的bug3427424(Jobs may stop running after 497 days uptime)
該bug 在9026 和10gR2上被修複(fix)
7)dba_jobs_running
檢查dba_jobs_running視圖确認,該job是否依然在運作。
8) LAST_DATE and NEXT_DATE (在dba_jobs這個視圖中)
檢查相關job的 LAST_DATE 和 NEXT_DATE 列的内容。
select Job,Next_date,Last_date from dba_jobs where job=<job_number>;
如果NEXT_DATE 是正常的,但是LAST_DATE 是null的,那麼該job 永遠不會自動執行。
9) NEXT_DATE and INTERVAL(在dba_jobs這個視圖中)
檢查 NEXT_DATE 是否随interval 的設定在變化
select Job,Interval,Next_date,Last_date from dba_jobs where job=<job_number>;
10)對JOB_QUEUE_PROCESSES切換值
停止并重新開機cjq 程序
alter system set job_queue_processes=0 ;
--<等待一會以保證cjq程序停止>
alter system set job_queue_processes=4 ;
參考bug2649244 (該bug 在9015, 9203, 10201中被修複)
11)檢查不成功的shutdown
一個shutdown immediate 可能被取消(conceled),因為active session 阻止 database 的關閉。
請檢查alert 日志,檢視最後兩次的shutdown immediate,是否有如下的資訊:
SHUTDOWN: Active sessions prevent database close operation
請參考:
Note 434690.1 - Database Jobs Do Not Run After a Failed 'Shutdown Immediate'
12) DBMS_IJOB (該package 未在文檔上記載)
Either restart the database or try the following:
exec dbms_ijob.set_enabled(true);
Ref: Bug 3505718 (Closed, Not a Bug)
13)檢查 視圖 DBA_SCHEDULER_GLOBAL_ATTRIBUTE 的 CURRENT_OPEN_WINDOW 屬性值
If a window is open ,close it (e.g.):
ATTRIBUTE_NAME VALUE
--------------------------------- ----------------------------
CURRENT_OPEN_WINDOW WEEKNIGHT_WINDOW
SQL> exec DBMS_SCHEDULER.close_window ('WEEKNIGHT_WINDOW');
解決方案:
不再翻譯。該解決方案是針對os已經啟動126天之後,job就無法自動運作的。