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都已正常自动调度