Oracle作業job 沒有自動調度起來
問題有一同事報過來說有兩個job已經近一周沒有自動調起了讓我幫忙解決
檢查
()在生產庫中檢查其他的job都能自動調度
()select * from all_jobs where job in(); 檢查正常並無異常 (dba_jobs或PL/SQL Developer DBMS_Jobs 也可查看)
()select * from dba_jobs_running where job in(); 在其列表中
結論進程掛死未完成導致不能自動調度!
解決先備份兩job的內容再將job刪除然後將進程殺掉並重建
()利用上面查出job運行列表中的sid 如 並查出哪些進程需要殺掉查詢語句如下
select call superkill(||asid||||aSERIAL#||); KILL_SID
kill ||APROCESS||;KILL_PIDASIDASERIAL#ASTATUS ASCHEMANAMEAUSERNAMEAMACHINEOSUSERAPROCESSAPROGRAMATERMINAL
ASERVICE_NAMEALOGON_TIME AOWNERID
DSQL_TEXTDSQL_FULLTEXT
from gv$session a v$sql d
where aSQL_ADDRESS=dADDRESS(+)
and (aSCHEMANAME = REPORT or aUSERNAME= REPORT)
and asid=
order by aMACHINE;
殺進程
()上面的superkill如下
create or replace procedure systemsuperkill(SESSION_ID BINARY_INTEGERSERIAL_NUM
BINARY_INTEGER) is
begin
execute immediate alter system disconnect session ||SESSION_ID||||SERIAL_NUM||
immediate ;
EXCEPTION
WHEN OTHERS
THEN
RAISE;
end superkill;
()也可直接 alter system kill session sidserial#;
上面兩個原理都差不多
()重建job
如job: 的重建
begin
sysdbms_jobisubmit(job =>
what => declare
vc_out varchar();
begin
SP_SAP_NEWINCOME_ALL(to_char(SYSDATEyyyymmdd)to_char(SYSDATEyyyymmdd));
pkg_dic_day_report_Dic_day_all_report_(to_char(SYSDATEyyyymmdd));
pkg_dic_day_report_DiC_Day_Move_Busi(vc_outto_char(SYSDATEyyyymmdd));
pkg_dic_day_report_DiC_Pst_YW(vc_outto_char(SYSDATEyyyymmdd));
end;
next_date => trunc(SYSDATE)++/
interval => trunc(SYSDATE)++/);
commit;
end;
/
第二天檢查兩job都已正常自動調度
From:http://tw.wingwit.com/Article/program/Oracle/201311/16661.html