1、先写了一个任务 prodcedures
create or replace procedure prc_job is
begin
merge into eas.T_DUC_BreedingContract v1 using (SELECT TRUNC(SYSDATE)-TRUNC(FBEGINDATE) age, FID FROM
eas.T_DUC_BreedingContract ) v2 on (v1.fid =v2.fid and ( v1.CFACTUALEXECUTQTY is null or v1.CFACTUALEXECUTQTY=0 ) ) when matched then update set v1.CFDAYAGE=v2.age ;
commit ;
end prc_job;
2、再写一个定时任务
begin
sys.dbms_job.submit(job => :job,
what => 'prc_job;',
next_date => to_date('20-12-2018 09:03:22', 'dd-mm-yyyy hh24:mi:ss'),
interval => 'sysdate+1/(24*60)');
commit;
end;
/
3、查看定时任务
select t.* from user_jobs t
4、执行定时任务
begin
dbms_job.run(23);
end;
注意事项: 如果是oracle 中的定时任务为能按时执行记得查看参数
select sid from dba_jobs_running;
select name,value from v$parameter where name ='job_queue_processes';
alter system set job_queue_processes=6
4、小结
a、job_queue_processes参数决定了job作业能够使用的总进程数。
b、当该参数为0值,任何job都不会被执行,建议合理设置该值且至少大于1。
c、对于job运行时间也应该尽量合理的设置间隔以及启动时间。
d、如果同一时间内运行的Job数很多,过小的参数值导致job不得不进行等待。而过大的参数值则消耗更多的系统资源。
f、对于存在依赖关系的job,尽可能将其进行合并到一个job中,如使用chain等。