设为首页 收藏本站
查看: 684|回复: 0

[经验分享] ORACLE数据库定时任务—DBMS_JOB

[复制链接]

尚未签到

发表于 2016-7-26 12:03:14 | 显示全部楼层 |阅读模式
oracle系统包——dbms_job用法(oracle定时任务)


用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务。

一、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:15,9:15,10:15…:trunc(sysdate,'hh')+(60+15)/(24*60)。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-249675-1-1.html 上篇帖子: [简单]poi 创建word 2007表格(oracle) 下篇帖子: ORACLE 10G OCA 042 笔记(二)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表