zoukankan      html  css  js  c++  java
  • ORACLE数据库定时任务—DBMS_JOB

    创建 DBMS_JOB 

    使用以下语句:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    VARIABLE jobno number;
    begin
      DBMS_JOB.SUBMIT(
        :jobno, --job号,ORACLE自动分配
        'your_procedure;',  --执行的存储过程或SQL语句,';'不能省略
        next_date, --下次执行时间
        'interval' --每次间隔时间,以天为单位
      );    
    commit;
    end;

    例子:

    作为示范,先创建一张简单的表:

    1
    2
    3
    CREATE TABLE T_TIME(
      JOB_TIME DATE not null
    );

    每分种为 T_TIME 表插入一条数据:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    VARIABLE jobno number;
    begin
      DBMS_JOB.SUBMIT(
        :jobno,
        'insert into T_TIME values (sysdate);',
        Sysdate,
        'sysdate+1/24/60'
      );    
    commit;
    end;

    每天删除前一天的数据:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    VARIABLE jobno number;
    begin
      DBMS_JOB.SUBMIT(
        :jobno,
        'delete T_TIME where JOB_TIME < sysdate-1;',
        Sysdate,
        'sysdate+1/24'
      );    
    commit;
    end;

    查看所有的 JOB

    1
    select from user_jobs;

    job : job
    what : 执行的存储过程或SQL语句
    failures : 失败次数
    broken : 状态

    停止 JOB

    1
    BEGIN DBMS_JOB.BROKEN(jobno, TRUE); END;

    参数 jobno 为对应的JOB号,如 BEGIN DBMS_JOB.BROKEN(2, TRUE); END;

    启动 JOB

    1
    BEGIN DBMS_JOB.run(jobno); END;

    参数 jobno 为对应的JOB号

    删除 JOB

    1
    BEGIN DBMS_JOB.remove(jobno); END;

    参数 jobno 为对应的JOB号

    修改 JOB

    修改运行的内容

    1
    2
    3
    4
    5
    BEGIN DBMS_JOB.what(
        jobno,   --对应的job号
        'your_procedure;'  --执行的存储过程或SQL语句,';'不能省略
    ); 
    END;

    修改时间间隔

    1
    2
    3
    4
    BEGIN DBMS_JOB.interval(
        jobno,   --对应的job号
        'interval' --每次间隔时间,以天为单位
    ); END;

    修改下一次执行时间

    1
    2
    3
    4
    BEGIN DBMS_JOB.next_date(
        jobno,   --对应的job号
        next_date, --下次执行时间
    ); END;

    关于 interval 的一些设置技巧

    关于job运行时间
    1:每分钟执行
    Interval => TRUNC(sysdate,'mi') + 1/(24*60)
    2:每天定时执行
    例如:每天的凌晨1点执行
    Interval => TRUNC(sysdate) + 1 +1/(24)
    3:每周定时执行
    例如:每周一凌晨1点执行
    Interval => TRUNC(next_day(sysdate,'星期一'))+1/24
    4:每月定时执行
    例如:每月1日凌晨1点执行
    Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
    5:每季度定时执行
    例如每季度的第一天凌晨1点执行
    Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
    6:每半年定时执行
    例如:每年7月1日和1月1日凌晨1点
    Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
    7:每年定时执行
    例如:每年1月1日凌晨1点执行
    Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'), 12)+1/24

    job的运行频率设置
    1.每天固定时间运行,比如早上8:10分钟:Trunc(Sysdate+1) + (8*60+10)/24*60
    2.Toad中提供的:
    每天:trunc(sysdate+1)
    每周:trunc(sysdate+7)
    每月:trunc(sysdate+30)
    每个星期日:next_day(trunc(sysdate),'星期日')
    每天6点:trunc(sysdate+1)+6/24
    半个小时:sysdate+30/(24*60)
    3.每个小时的第15分钟运行,比如:8:15,9:15,10:15…:trunc(sysdate,'hh')+(60+15)/(24*60)。

  • 相关阅读:
    toj 2975 Encription
    poj 1797 Heavy Transportation
    toj 2971 Rotating Numbers
    zoj 2281 Way to Freedom
    toj 2483 Nasty Hacks
    toj 2972 MOVING DHAKA
    toj 2696 Collecting Beepers
    toj 2970 Hackle Number
    toj 2485 Card Tric
    js页面定位,相关几个属性
  • 原文地址:https://www.cnblogs.com/thorn/p/5142883.html
Copyright © 2011-2022 走看看