ORACLE定时任务举例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37879830/article/details/78980901

1.编写自己的存储过程

create or replace procedure update_job_sal is

v_sql    varchar2(1000);

begin

v_sql:='truncate table t';

execute immediate v_sql;

insert into t (username,sal) values('aa',100);

update t_job_sal a set sal=(select sal from t b where a.username=b.username);

end;

2.创建定时任务

declare      
 
  job1 number;
begin
  dbms_job.submit(job1,'update_job_sal;',SYSDATE,'TRUNC(LAST_DAY(SYSDATE)+5)');   
  --每月5号0晨执行过程
  commit;
end;

declare
    variable job number;
begin
    sys.dbms_job.submit(job => :job,
    what => 'prc_name;',
    next_date => to_date('22-11-2013 09:09:41', 'dd-mm-yyyy hh24:mi:ss'),
    interval => 'sysdate+1/86400');--每天86400秒钟,即一秒钟运行prc_name过程一次
    commit;
end;

系统会自动分配一个任务号jobno,可以通过查询user_jobs ,all_jobs,dba_jobs得到

3.查询定时任务

select JOB,BROKEN,WHAT,INTERVAL from user_jobs

4.手动执行定时任务

begin    
      dbms_job.run(253); 
end;

即忽略设定的时间间隔直接执行what中指定的任务

5.修改定时任务

修改要执行的操作:  dbms_job.what(jobno,what); 
修改下次执行时间:dbms_job.next_date(job,next_date); 
       修改间隔时间:dbms_job.interval(job,interval); 
                  停止job:  dbms.broken(job,broken,nextdate); 
                  启动job:   dbms_job.run(jobno); 

6.删除定时任务

begin  
       dbms_job.remove(253);  --user_jobs表中的定时任务job值
       commit;  
end;
7.补充说明

1)参数解释:

dbms_job.submit( job1, —-job号  
                           'your_procedure;',—-执行的存储过程, ';'不能省略 
                           next_date, —-下次执行时间  

                           'interval' —-每次间隔时间,interval以天为单位

); 

程序主体有四个参数,分别意为:job1是计划任务号,任务创建后用来接收任务号,'your_procedure'是计划任务名,如果是多个计划任务,就都用分号隔开,第三个sysdate意为立即执行此任务,第四个参数是间隔时间的设置


2)执行时间设定举例:

每分钟执行 Interval => TRUNC(sysdate,'mi') + 1 / (24*60) 

每天定时执行 :每天的凌晨2点执行 Interval => TRUNC(sysdate) + 1 +2 / (24) 

每周定时执行:每周一凌晨2点执行 Interval => TRUNC(next_day(sysdate,2))+2/24 --星期一,一周的第二天 

每月定时执行:每月1日凌晨2点执行 Interval =>TRUNC(LAST_DAY(SYSDATE))+1+2/24 

每季度定时执行 :每季度的第一天凌晨2点执行 Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24 

每半年定时执行:每年7月1日和1月1日凌晨2点 Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24 

每年定时执行:每年1月1日凌晨2点执行 Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+2/24 

8.数据库参数

初始化相关参数job_queue_processes

job_queue_process表示oracle能够并发的job的数量,当job_queue_process值为0时表示全部停止oracle的job。

1)查看job_queue_processes参数
方法一:
show parameter job_queue_process;
方法二:
select * from v$parameter where name='job_queue_processes';

2)修改job_queue_processes参数
alter system set job_queue_processes = 10;

3)user_jobs表结构


字段(列)          类型                 描述
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            下一次定时运行任务的时间




猜你喜欢

转载自blog.csdn.net/weixin_37879830/article/details/78980901