Oracle定时任务Job

-->创建测试用表  
    CREATE TABLE tb_job  
    (  
       job_name    VARCHAR2 (5),  
       update_dt   VARCHAR2 (20)  
    );  
      
-->添加多个Oracle job来并发执行  
    DECLARE  
       job_name   VARCHAR2 (20);  
    BEGIN  
       DBMS_OUTPUT.put_line ('Current sysdate is ' || TO_CHAR (SYSDATE, 'yyyymmdd hh24:mi:ss'));  
      
       FOR i IN 1 .. 5  
       LOOP  
          job_name := 'JOB_' || TO_CHAR (i);  
          sys.DBMS_SCHEDULER.create_job (  
             job_name          => job_name,  
             start_date        => sysdate+1/1440,  
             repeat_interval   => 'freq = minutely; interval=1',  
             end_date          => NULL,  
             job_class         => 'DEFAULT_JOB_CLASS',  
             job_type          => 'PLSQL_BLOCK',  
             job_action        =>   '    
    begin  
    INSERT INTO tb_job  
          SELECT '''  
                                 || job_name  
                                 || ''', TO_CHAR (SYSDATE, ''yyyymmdd hh24:mi:ss'') FROM DUAL;  
    dbms_lock.sleep(60);  
    commit;  
    end;  
    ',  
             enabled           => true,  
             comments          => 'my test job');  
       END LOOP;  
    END;  
      
    -->job执行的情况,可以看到5个job被逐一执行  
    -->尽管我们定义时的NEXT_RUN_DATE相差1秒,而此时job的执行后则每一个相差1分钟  
    -->job_1与job_5相差4分多钟,这是由于我们定义了dbms_lock.sleep(60)为1分钟  
    -->其次可以看出由于只有一个job进程,因此每一个job是一个一个被执行  
    SQL> select * from tb_job;  
      
    JOB_N UPDATE_DT  
    ----- --------------------  
    JOB_1 20130319 12:21:33  
    JOB_2 20130319 12:22:35  
    JOB_3 20130319 12:23:37  
    JOB_4 20130319 12:24:39  
    JOB_5 20130319 12:25:41  
    -->移除job  
    DECLARE  
       job_name   VARCHAR2 (10);  
    BEGIN  
       FOR i IN 1 .. 5  
       LOOP  
          job_name := 'JOB_' || TO_CHAR (i);  
          sys.DBMS_SCHEDULER.drop_job (job_name, force => TRUE);  
       END LOOP;  
    END;      
    -->移除测试表  
    SQL> drop table tb_job purge;  
      
  
a、job_queue_processes参数决定了job作业能够使用的总进程数。
b、当该参数为0值,任何job都不会被执行,建议合理设置该值且至少大于1。
c、对于job运行时间也应该尽量合理的设置间隔以及启动时间。
d、如果同一时间内运行的Job数很多,过小的参数值导致job不得不进行等待。而过大的参数值则消耗更多的系统资源。
f、对于存在依赖关系的job,尽可能将其进行合并到一个job中,如使用chain等。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值