Oracle定时任务

Oracle定时任务

一、创建语句

declare
  job number;
BEGIN
  DBMS_JOB.SUBMIT(  
        JOB => job,  		/*自动生成JOB_ID*/  
        WHAT => 'proc_cam;',  
        NEXT_DATE => to_date('2022-03-14 15:40:00', 'yyyy-mm-dd hh24:mi:ss'),
        INTERVAL => 'sysdate+30/(24*60)' /*每隔30分钟执行一次*/
      );  
  commit;
end;

参数含义:

JOB:指定定时任务的 JOB_ID,上面代码指自动生成;

WHAT:需要执行的存储过程名称或SQL语句,多个以分号隔开,注意最后有个分号;

NEXT_DATE:初次执行时间;

INTERVAL:多久执行一次。

二、查询定时任务

当前用户定时任务

select * from user_jobs;

有权限访问的定时任务

select * from all_jobs;

整个数据库所有的定时任务

select * from dba_jobs;

查询上面例子创建的定时任务:select * from dba_jobs where what like '%proc_cam%';

三、任务时间间隔设计

指定两次任务执行的时间间隔

描述 interval 参数值
每天执行一次 'SYSDATE+1′
每小时执行一次 'SYSDATE+1/24'
每10分钟执行一次 'SYSDATE+10/(24*60)'
每30秒执行一次 'SYSDATE+30/(24*60*60)'
每个星期执行一次 'SYSDATE+7'

也可以指定具体时间

描述 参数值
每天6点 执行 'Trunc(Sysdate+1) + 6/24'
每天08:10:00 执行 'Trunc(Sysdate+1) + (8*60+10)/24*60'
每周一凌晨1点执行 ' TRUNC(next_day(sysdate,"星期一"))+1/24'
每月1日凌晨1点执行 ' TRUNC(LAST_DAY(SYSDATE))+1+1/24'

四、操作

手动执行定时任务

BEGIN
DBMS_JOB.RUN(1283); --1283为JOB任务的 ID
commit;
END;

停止定时任务

BEGIN
dbms_job.broken(1283,true,sysdate);        --1283为JOB任务的 ID,sysdate是指在指定时间停止
commit;
END;

删除定时任务

begin
  dbms_job.remove(1283);  --1283为JOB任务的 ID
  commit;
end;

修改定时任务的时间间隔

begin
  dbms_job.interval(1283,interval => 'TRUNC(SYSDATE)+1');  /*第一个参数为job的ID,第二个参数为interval: 计算下一次任务执行的时间表达式*/
  commit;
end;

修改下一次执行时间

begin
   dbms_job.next_date(1283,to_date('2022-03-15 12:00:00','yyyy-mm-dd hh24:mi:ss')); /*第一个参数:job的ID;第二个参数:要修改后的计算下一次执行的时间表达式*/
   commit;
end;

修改定时任务要执行的操作

begin
    dbms_job.what(1283,'testJob2();');   /* 第一个参数:job的ID;第二个参数:要更改的新操作名称(存储过程名称或SQL语句,必须存在)*/
commit;
end;
posted @ 2022-03-14 16:38  乐子不痞  阅读(2703)  评论(0编辑  收藏  举报
回到顶部