Oracle-任务调度(DBMS_Scheduler)

Dbms_Scheduler

Oracle 10g 之前,可以使用dbms_job来管理定时任务:

dbms_job.submit(job=>outjob,what=>'pro_name;',next_date=>sysdate,inteval=>'sysdate+1/24');

10g 之后,Oracle 引入了dbms_scheduler 和 program ,在功能方面,它比dbms_job提供了更强大的功能和灵活的机制/管理。

使用dbms_scheduler 创建一个定时任务有两种形式:
  • 创建一个scheduler来定义计划,一个program来定义任务内容,在创建一个job,为这个job指定上面的scheduler和program
  • 直接创建job,在参数里面直接指定计划和任务内容
要执行dbms_scheduler需要create job 权限
select * from dba_sys_privs where grantee=upper('t1'); --dba权限
grant create job to t1  --授权
  • 示例
--建立测试表
create table test_t1(id integer,create_date date);
--建立存储过程
create or replace procedure test_p1
is
v_maxid test_t1.id%type:=1;
begin
  select nvl(max(id),0) into v_maxId from test_t1;
  insert into test_t1 values(v_maxid,sysdate);
  commit; 
end test_p1;
--建立作业
declare 
  v_count int:=0;
begin
   select count(*) into v_count from user_scheduler_jobs where job_name=upper('test_job1');
   if v_count>0 then
       dbms_scheduler.drop_job(upper('test_job1'));
   end if;
   
    dbms_scheduler.create_job(
   job_name=>'test_job1',  --必选  任务名称
   job_type => 'STORED_PROCEDURE',--必须 任务类型【存储过程,匿名块等】
   job_action=>'TEST_P1',--必须 任务内容,与job_type配合使用
   start_date => sysdate, --可选  首次执行时间,为空时表示立即执行
   repeat_interval=>'FREQ=MINUTELY;INTERVAL=1', --可选,执行频率,为空时表示只执行一次
   --【FREQ=minutely; 表示间隔单位,可选值Yearly,monthly,weekly,datly,hourly,minutely,secondly】
   enabled=>true);  --可选  是否启用任务,注意:这里是enabled;
end;
posted @ 2023-06-15 10:39  丹心石  阅读(828)  评论(0编辑  收藏  举报