zoukankan      html  css  js  c++  java
  • Otracle数据库定时任务--dbms_job

    一、dbms_job涉及到的知识点

     1、创建job:

    variable jobno number;
    dbms_job.submit(:jobno, --job号 
     'your_procedure;'--执行的存储过程, ';'不能省略 
     next_date, --下次执行时间 
     'interval' --每次间隔时间,interval以天为单位
    );

    –系统会自动分配一个任务号jobno。

    2、删除job:

    dbms_job.remove(jobno);

    3、修改要执行的操作:

     job:dbms_job.what(jobno, what); 

    4、修改下次执行时间:

    dbms_job.next_date(jobno, next_date);

    5、修改间隔时间:

    dbms_job.interval(jobno, interval);

    6、启动job:

     dbms_job.run(jobno);

    7、停止job: 

    dbms.broken(jobno, broken, nextdate); –broken为boolean值
    

    二、初始化相关参数job_queue_processes

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

    2、查看job_queue_processes参数

    方法一:

    show parameter job_queue_process;
    

    方法二:

    select * from v$parameter where name='job_queue_processes'; 

    3、修改job_queue_processes参数

    alter system set job_queue_processes = 10;
    

    三、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 下一次定时运行任务的时间

    以下使用一个案例来演示dbms_job的使用

    一、在plsql中创建表:  

    create table t(
     id varchar2(30),
     name varchar2(30)
    );
    

    二、在plsql中创建存储过程:  

    create or replace procedure proce_t is
    begin
     insert into t(id, name) values('1', to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'));
     commit;
    end proce_t;
    /
    

    三、创建job任务(1分钟执行一次):  

     

    begin
      sys.dbms_job.change(job => 27,
                          what => 'proce_t;',
                          next_date => to_date('22-11-2018 16:28:00', 'dd-mm-yyyy hh24:mi:ss'),
                          interval => 'TRUNC(sysdate,''mi'') + 1/(24*60)');
      commit;
    end;
    /

    四、跟踪任务的情况(查看任务队列):

    select job, next_date, next_sec, failures, broken from user_jobs;
    

    五、停止定时任务  

      begin
        dbms_job.broken(25, true, sysdate);
        commit;
      end;
      /

    六、启动定时任务  

    begin
     dbms_job.run(25);
     commit;
    end;
    /
    

     其他知识

    1.存job信息的表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 下一次定时运行任务的时间
    NEXT_SEC VARCHAR2(8) 如HH24:MM:SS格式的next_date日期的小时,分钟和秒
    TOTAL_TIME NUMBER 该任务运行所需要的总时间,单位为秒
    BROKEN VARCHAR2(1) 标志参数,Y标示任务中断,以后不会运行
    INTERVAL VARCHAR2(200) 用于计算下一运行时间的表达式
    FAILURES NUMBER 任务运行连续没有成功的次数
    WHAT  VARCHAR2(2000) 执行任务的PL/SQL块

    2.INTERVAL参数常用值示例

    1. 每天午夜12点            ''TRUNC(SYSDATE + 1)''     
    2. 每天早上8点30分         ''TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)''     
    3. 每星期二中午12点         ''NEXT_DAY(TRUNC(SYSDATE ), ''''TUESDAY'''' ) + 12/24''     
    4. 每个月第一天的午夜12点    ''TRUNC(LAST_DAY(SYSDATE ) + 1)''     
    5. 每个季度最后一天的晚上11点 ''TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), ''Q'' ) -1/24''     
    6. 每星期六和日早上6点10分    ''TRUNC(LEAST(NEXT_DAY(SYSDATE, ''''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)''    
    7. 每3秒钟执行一次             'sysdate+3/(24*60*60)'   
    8. 每2分钟执行一次           'sysdate+2/(24*60)'   
    9.   
    10. 1:每分钟执行  
    11. Interval => TRUNC(sysdate,'mi') + 1/ (24*60) --每分钟执行  
    12. interval => 'sysdate+1/(24*60)'  --每分钟执行  
    13. interval => 'sysdate+1'    --每天  
    14. interval => 'sysdate+1/24'   --每小时  
    15. interval => 'sysdate+2/24*60' --每2分钟  
    16. interval => 'sysdate+30/24*60*60'  --每30秒  
    17. 2:每天定时执行  
    18. Interval => TRUNC(sysdate+1)  --每天凌晨0点执行  
    19. Interval => TRUNC(sysdate+1)+1/24  --每天凌晨1点执行  
    20. Interval => TRUNC(SYSDATE+1)+(8*60+30)/(24*60)  --每天早上8点30分执行  
    21. 3:每周定时执行  
    22. Interval => TRUNC(next_day(sysdate,'星期一'))+1/24  --每周一凌晨1点执行  
    23. Interval => TRUNC(next_day(sysdate,1))+2/24  --每周一凌晨2点执行  
    24. 4:每月定时执行  
    25. Interval =>TTRUNC(LAST_DAY(SYSDATE)+1)  --每月1日凌晨0点执行  
    26. Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24  --每月1日凌晨1点执行  
    27. 5:每季度定时执行  
    28. Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q')  --每季度的第一天凌晨0点执行  
    29. Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q') + 1/24  --每季度的第一天凌晨1点执行  
    30. Interval => TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24  --每季度的最后一天的晚上11点执行  
    31. 6:每半年定时执行  
    32. Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24  --每年7月1日和1月1日凌晨1点  
    33. 7:每年定时执行  
    34. Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24  --每年1月1日凌晨1点执行  
  • 相关阅读:
    [转]asp.net页面缓存技术
    UL和LI在div中的高度的IE6下兼容性
    jquery制作的横向图片滚动带横向滚动条TackerScroll
    电脑可以上网,但是qq登陆不上去?
    Introduction to discrete event system学习笔记4.6
    Introduction to Discrete event system学习笔记4.9
    Introduction to discrete event systemsstudy 4.5
    Symbolic synthesis of obserability requirements for diagnosability B.Bittner,M.Bozzano,A.Cimatti,and X.Olive笔记4.16
    Introduction to discrete event system学习笔记4.8pm
    Introduction to discrete event system学习笔记 4.8
  • 原文地址:https://www.cnblogs.com/tanlei-sxs/p/9948383.html
Copyright © 2011-2022 走看看