调用Oracle的dbms_job包中的存储过程,将任务加入到任务队列中:
a、创建job: dbms_job.submit(job,what,next_date,interval);
b、删除job: dbms_job.remove(job);
c、修改要执行的操作: job:dbms_job.what(job, what);
d、修改下次执行时间:dbms_job.next_date(job, next_date);
e、修改间隔时间:dbms_job.interval(job, interval);
f、启动job: dbms_job.run(job);
g、停止job: dbms_job.broken(job, broken, nextdate); –broken为boolean值
h、改变job的作业内容、运行时间及时间间隔信息:dbms_job.chang(job,what,next_date,interval)
格式:
variable job_l number;
begin
dbms_job.submit(job,what,next_date,interval);
commit;
end;
/
● job:输出变量,是此任务在任务队列中的编号, 系统自动赋值。也可以采用isubmit来手动指定
● what:执行的任务的名称及其输入参数,可以是sql语句块、存储过程等;
● next_date:任务下一次执行的时间;
● interval:任务执行的时间间隔。
例如:新建job立即执行proce_lh脚本,每天00:30执行一次
variable jobno number;--如不申明变量会报错!
begin
dbms_job.submit(:jobno,'proce_lh;',sysdate,'TRUNC(sysdate+1)+30/(24*60)');
commit;
end;
/
或者
variable job_l number;
begin
sys.dbms_job.submit(job => :job_l,
what => 'proce_lh;',--这里分号不能少!!!
next_date => to_date('06-09-2018 00:30:00', 'dd-mm-yyyy hh24:mi:ss'),
interval => 'sysdate+0.5');
commit;
end;
/
注意:新建job必须要声明变量,不声明会报错:
也可使用PLSQL图形化新建job
点击应用即可,可查看SQL语句
user_jobs视图查看创建的job信息
字段 (列) 类型 描述
job number 任务的唯一标示号
log_user varchar2(30) 提交任务的用户
priv_user varchar2(30) 赋予任务权限的用户
schema_user varchar2(30) 对任务作语法分析的用户模式
last_date date 最后一次成功运行任务的时间
last_sec varchar2(8) 如hh24:mm:ss格式的last_date日期的小时,分钟和秒
this_date date 正在运行任务的开始时间,如果没有运行任务则为null
this_sec varchar2(8) 如hh24:mm:ss格式的this_date日期的小时,分钟和秒
next_date date 下一次定时运行任务的时间
next_sec varchar2(8) 如hh24:mm:ss格式的this_date日期的小时,分钟和秒
跟踪任务的情况:select job,next_date,nect_sec,failures,broken from user_jobs;
SQL> select job,LOG_USER,LAST_DATE,LAST_SEC,NEXT_DATE,NEXT_SEC,TOTAL_TIME,BROKEN,INTERVAL from user_jobs where job=83;
JOB LOG_USER LAST_DATE LAST_SEC NEXT_DATE NEXT_SEC TOTAL_TIME BROKEN INTERVAL
---------- --------------- ----------- ----------- ---------------- ----------- ---------------- ---------- ------ --------------------------------
83 BOMS301 2018/9/5 17 17:50:19 2018/9/6 0: 00:30:00 0 N TRUNC(sysdate+1)+30/(24*60)
停止一个已经启动定时任务
begin
dbms_job.broken(25,true,sysdate);
commit;
end;
/
或者
exec dbms_job.broken(25,true,sysdate);
commit;
其他操作类似
查看进程数
show parameter job_queue_processes;
job_queue_processes表示oracle能够并发的job的数量,当job_queue_processes值为0值表示停止所有的job
值为0时修改:
alter system set job_queue_processes=10;
执行时间
描述 |
Interval参数值 (部分需要验证一下) |
每天午夜12点 |
'TRUNC(SYSDATE + 1)' |
每天早上8点30分 |
'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)' |
每星期二中午12点 |
'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24' |
每个月第一天的午夜12点 |
'TRUNC(LAST_DAY(SYSDATE ) + 1)' |
每个季度最后一天的晚上11点 |
'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24' |
每分钟执行一次 |
'SYSDATE+1/1440' |
Toad中提供的:
每天:trunc(sysdate+1)
每周:trunc(sysdate+7)
每月:trunc(sysdate+30)
每个星期日:next_day(trunc(sysdate),'星期日')
每天6点:trunc(sysdate+1)+6/24
半个小时:sysdate+30/(24*60)