于2017-11-10 需要设置每天下午五点钟自动跑的批处理,新增的job,调用核心package。。
创建job:
variable job1 number;
begin
sys.dbms_job.submit(job => :job1,
what => 'PKG_LS.p_submit(2);',--执行的package
next_date => sysdate,--下一次执行的时间,第一次开始执行的时间
interval => 'ROUND(SYSDATE)+17/24');--固定执行的时间
commit;
end;
/
n/24 是小时
n/1440是分钟
修改job:
1:修改下次执行的时间:
exec dbms_job.next_date(job,next_date);
2:修改interval:
exec dbms_job.interval(job_id,null,null,interval);
3:修改job内容
exec job:dbms_job.what(jobno,what);
4:change:
exec dbms_job.change(398,'PKG_LS.p_submit(2);'
,sysdate,'round(SYSDATE)+17/24')
执行job:
exec dbms_job.run(395)
删除job:
exec dbms_job.broken(1233,true) --true表示停止 false表示暂停
exec dbms_job.remove(1233) --删除job
查看警告日志的位置:
show parameter background_dump_dest
查看job运行的状态
select * from user_scheduler_running_jobs where job_name = '?' order by log_id desc;
select * from dba_scheduler_running_jobs where log_id = ?
如何诊断job执行失败
1. 看job有没有机会执行
确保init.ora中job_queue_processes参数是否被设为>0的值.
show parameter job_queue_processes
2. 看是否执行job出错.
查看alert.log获取出错信息.
3. 看是否job所调用的procedure/package出错.
这个需要你自己在procedure/package中自己书写记录错误日志的代码.
4. 经常查看你的DBA_JOBS看看,相应的job是不是broken了,
BROKEN: Y: no attempt is made to run this job
N: an attempt is made to run this job
A job can be broken in two ways:
Oracle has failed to successfully execute the job after sixteen attempts. The job has been explicitly marked as broken by using the procedure DBMS_ JOB.BROKEN.
在尝试(默认)16次后还是不能成功执行,该job会被oracle自动标记为broken=y
或者你可以手动运行看看,有什么错误提示。
EXECUTE DBMS_JOB.RUN(JOB_ID);