Oracle中job的建立:
create table date_log(create_date date constraint create_date_pk primary key);
create or replace procedure create_date_log_row
is
begin
insert into date_log(create_date)values(sysdate);
end;
/
定期調用create_date_log_row 預存程序相date_log 表中插入資料
Job_queue_processes=2 :執行job時候引起的進程數 (最小值是0,最大值是36) 0表示不運行 job
job_queue_interval=30 :範圍在1~3600之間,單位是秒,定期喚醒進程,判斷有沒有要執行的job,這裡時間是30秒
alter system set Job_queue_processes=0;
alter system set Job_queue_processes=5;
dbms_job.submit(:jobno,'create_date_log_row',trunc(sysdate)+1/24,'trunc(sysdate)+1/24+1')
jobno:job編號
create_date_log_row :要執行的預存程序名
trunc(sysdate)+1/24 :下次執行的時間
'trunc(sysdate)+1/24+1' :每次間隔時間
job:dbms_job.remove(jobno); 移去job號
job:dbms_job.what(jobno,what);修改job號
dbms_job.next_date(job,next_date) :修改下次執行的時間
dbms_job.interval(job,interval) :修改間隔時間
job:dbms_job.broken(job,true) :停止job
job:dbms_job.broken(job,false,next_date) next_date:下次執行時間,如果不填則馬上啟動job
job:dbms_job.run(jobno);
第一步:建立任務
SQL>VAR job1 number; --儲存job號碼
SQL>begin
dbms_job.submit(:job1,'create_date_log_row;',sysdate,'sysdate+1/1440');
commit;
end;
SQL>PRINT job1;
select * from date_log;
--查看job參數的值
select last_date,last_sec,next_date,next_sec,interval,broken from user_jobs;
--停止正在啟動並執行job
exec dbms_job.broken(46,true);
commit;
select broken from user_jobs where job=46;
--啟動job
exec dbms_job.broken(46,false);
commit;
--
select next_date,next_sec from user_jobs;
修改下次執行時間:
exec dbms_job.next_date(5,sysdate+2/(24*60));
commit;
-- 修改執行的頻率
exec dbms_job.interval(5,sysdate+3/(24*60));
commit;
--移去job
job:dbms_job.remove(46);
--執行時間設定:
每天午夜12點 'trunc(sysdate+1)'
每天早上8點30分 'trunc(sysdate+1)+(1*60+30)/(24*60)'
每星期二中午12點 'next_day(trunc(sysdate),"tuesday")+ 12/24'
每個月第一天的晚上11點 'trunc(last_day(sysdate)+1)'
每個季度最後一天的晚上11點 'trunc(add_months(sysdate+2/24,3),'Q')-1/24'
每星期六和日早上6點10分 'trunc(least(next_day(sysdate"SATURDAY"),NEXT_DAY(SYSDATE,"SUNDAY")))+(6*60+10)/(24*60)'