Oracle定时任务dbms_job

调用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) 

猜你喜欢

转载自blog.csdn.net/qq_34759280/article/details/82427056