天天看點

【翻譯自mos文章】job 不能自動運作--這是另外一個mos文章,本文章有13個解決方法

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就無法自動運作的。

繼續閱讀