使用dbms_scheduler包创建定时任务

本文使用dbms_scheduler的create_job创建执行存储过程的定时任务

  • 创建一个job
    • job_type指定'STORED_PROCEDURE'
    • job_action中填入要执行的存储过程名字
    • start_date指定起始时间,用于计算后续执行的时间
    • repeat_interval说明时间间隔,可以参考Calendaring Syntax
BEGIN
dbms_scheduler.create_job(
        job_name       => 'test_scan',
        job_type       => 'STORED_PROCEDURE',
        job_action     => 'p_task_scan_used_test',
        start_date     =>  sysdate,
        repeat_interval=>  'FREQ=MINUTELY;INTERVAL=10');
END;
  • 创建后通过系统视图检查
select * from user_scheduler_jobs;
  • 取消AUTO_DROP
    默认会在任务正确执行完成后删除任务,此处修改该属性不删除。
begin
dbms_scheduler.set_attribute(
         name      => 'test_scan',
         attribute => 'AUTO_DROP',
         value     => FALSE);
end;
  • 执行时传入参数

    • 设置参数个数
  begin
  dbms_scheduler.set_attribute(
           name      => 'mac_scan',
           attribute => 'NUMBER_OF_ARGUMENTS',
           value     => 2);
  end;
  • 设置参数值
  begin
  dbms_scheduler.SET_JOB_ARGUMENT_VALUE (
      job_name => 'test_scan',
      argument_position => 1,
      argument_value => '1000');
  end;
      
  begin
  dbms_scheduler.SET_JOB_ARGUMENT_VALUE (
      job_name => 'test_scan',
      argument_position => 2,
      argument_value => '5000');
  end;
  • 测试job是否可以正确执行
select * from user_scheduler_job_run_details;
select * from user_scheduler_job_log;
  • 启动定时任务
begin
    dbms_scheduler.enable(
        name =>  'test_scan');
end;

至此,定时任务部署完毕。
-- EOF --

原文地址:https://www.cnblogs.com/shenfeng/p/dbms_scheduler_create_job.html