zoukankan      html  css  js  c++  java
  • zbb20170804 oracle jobs user_jobs

    jobs

    --理解成一个可以定时帮你执行一些存储过程的东西就叫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分钟执行一次):
    
    在sql>后执行:
    
    variable jobno number;
    begin
     dbms_job.submit(:jobno,'proce_t;', sysdate, 'sysdate+1/24/60');
     commit;
    end;
    /
    
    提交后提示:
    
    pl/sql procedure successfully completed
    jobno
    ---------
    25
    
    四、跟踪任务的情况(查看任务队列):
    
    sql> select job, next_date, next_sec, failures, broken from user_jobs;
     
     job next_date next_sec failures broken
    ---------- ----------- ---------------- ---------- ------
     25 2012/9/14 1 10:59:46 0 n
    
    说明任务已创建成功。
    
    执行select * from t;查看定时任务的结果。可以看出定时任务是正常执行了的。
    
    五、停止定时任务
    
    1、查看定时任务的job号。
    
    sql> select job, next_date, next_sec, failures, broken from user_jobs; 
     
     job next_date next_sec failures broken
    ---------- ----------- ---------------- ---------- ------
     25 2012/9/14 1 11:01:48 0 n
    
    2、停止一个已启动的定时任务:
    
    begin
     dbms_job.broken(25, true, sysdate);
     commit;
    end;
    /
    
    表示停止job为25的任务。
    
    执行后显示如下:
    
    pl/sql procedure successfully completed
    
    3、查看定时任务是否已停止成功
    
    sql> select job, next_date, next_sec, failures, broken from user_jobs; 
     
     job next_date next_sec failures broken
    ---------- ----------- ---------------- ---------- ------
     25 4000/1/1 00:00:00 0 y
    
    broken值为y,表示定时任务已停止。
    
    六、启动定时任务
    
    1、查看停止定时任务
    
    sql> select job, next_date, next_sec, failures, broken from user_jobs; 
     
     job next_date next_sec failures broken
    ---------- ----------- ---------------- ---------- ------
     25 4000/1/1 00:00:00 0 y
    
    broken值为y,表示定时任务已停止。
    
    2、启动定时任务
    
    begin
     dbms_job.run(25);
     commit;
    end;
    /
    
    3、查看定时任务是否已启动
    
    sql> select job, next_date, next_sec, failures, broken from user_jobs;
     
     job next_date next_sec failures broken
    ---------- ----------- ---------------- ---------- ------
     25 2012/9/14 1 11:06:17 0 n
    
    broken值为n,表示定时任务启动成功。
    
    七、查看进程数
    
    show parameter job_queue_processes;
    
    必须大于0,否则执行下面的命令修改:
    
    alter system set job_queue_processes=10;
    
    八、再创建一个任务(每5分钟执行一次):
    
    variable jobno number;
    begin
     dbms_job.submit(:jobno, 'proce_t;', sysdate, 'sysdate+1/24/12'); --interval是以天为单位的
     commit;
    end;
    /
    
    九、 执行
    
    select job,next_date,next_sec,failures,broken from user_jobs;
    
    结果:
    
    sql> select job,next_date,next_sec,failures,broken from user_jobs; 
     
     job next_date next_sec failures broken
    ---------- ----------- ---------------- ---------- ------
     26 2012/9/14 1 11:12:08 0 n
     25 2012/9/14 1 11:07:18 0 n
    
    十、总结
    
    关于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:159:1510:15…:trunc(sysdate,'hh')+(60+15)/(24*60) 。
  • 相关阅读:
    公用表表达式(CTE)的递归调用
    c# 如何让tooltip显示文字换行
    实战 SQL Server 2008 数据库误删除数据的恢复
    SQL SERVER数据库中 是否可以对视图进行修改删除
    asp.net中实现文件批量上传
    sql server 2008学习2 文件和文件组
    sql server 2008学习3 表组织和索引组织
    sql server 2008学习4 设计索引的建议
    sql server 2008学习10 存储过程
    .net 调用 sql server 自定义函数,并输出返回值
  • 原文地址:https://www.cnblogs.com/super-admin/p/7283289.html
Copyright © 2011-2022 走看看