oracle系统包——dbms job用法(oracle定时任务)
2015-10-30 14:26
531 查看
用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务。
一、dbms_job涉及到的知识点
1、创建job:
variablejobnonumber;
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参数
方法一:
showparameterjob_queue_process;
方法二:
select*fromv$parameterwherename='job_queue_processes';
3、修改job_queue_processes参数
altersystemsetjob_queue_processes=10;
三、user_jobs表结构
字段(列)类型描述
jobnumber任务的唯一标示号
log_uservarchar2(30)提交任务的用户
priv_uservarchar2(30)赋予任务权限的用户
schema_uservarchar2(30)对任务作语法分析的用户模式
last_datedate最后一次成功运行任务的时间
last_secvarchar2(8)如hh24:mm:ss格式的last_date日期的小时,分钟和秒
this_datedate正在运行任务的开始时间,如果没有运行任务则为null
this_secvarchar2(8)如hh24:mm:ss格式的this_date日期的小时,分钟和秒
next_datedate下一次定时运行任务的时间
以下使用一个案例来演示dbms_job的使用
一、在plsql中创建表:
二、在plsql中创建存储过程:
三、创建job任务(1分钟执行一次):
在sql>后执行:
提交后提示:
四、跟踪任务的情况(查看任务队列):
说明任务已创建成功。
执行select*fromt;查看定时任务的结果。可以看出定时任务是正常执行了的。
五、停止定时任务
1、查看定时任务的job号。
2、停止一个已启动的定时任务:
表示停止job为25的任务。
执行后显示如下:
pl/sqlproceduresuccessfullycompleted
3、查看定时任务是否已停止成功
broken值为y,表示定时任务已停止。
六、启动定时任务
1、查看停止定时任务
broken值为y,表示定时任务已停止。
2、启动定时任务
3、查看定时任务是否已启动
broken值为n,表示定时任务启动成功。
七、查看进程数
showparameterjob_queue_processes;
必须大于0,否则执行下面的命令修改:
altersystemsetjob_queue_processes=10;
八、再创建一个任务(每5分钟执行一次):
九、执行selectjob,next_date,next_sec,failures,brokenfromuser_jobs;
结果:
十、总结
关于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)。
一、dbms_job涉及到的知识点
1、创建job:
variablejobnonumber;
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参数
方法一:
showparameterjob_queue_process;
方法二:
select*fromv$parameterwherename='job_queue_processes';
3、修改job_queue_processes参数
altersystemsetjob_queue_processes=10;
三、user_jobs表结构
字段(列)类型描述
jobnumber任务的唯一标示号
log_uservarchar2(30)提交任务的用户
priv_uservarchar2(30)赋予任务权限的用户
schema_uservarchar2(30)对任务作语法分析的用户模式
last_datedate最后一次成功运行任务的时间
last_secvarchar2(8)如hh24:mm:ss格式的last_date日期的小时,分钟和秒
this_datedate正在运行任务的开始时间,如果没有运行任务则为null
this_secvarchar2(8)如hh24:mm:ss格式的this_date日期的小时,分钟和秒
next_datedate下一次定时运行任务的时间
以下使用一个案例来演示dbms_job的使用
一、在plsql中创建表:
1 2 3 4 | create table t( idvarchar2(30), name varchar2(30) ); |
1 2 3 4 5 6 | create or replace procedure proce_t is begin insert into t(id, name ) values ( '1' ,to_char(sysdate, 'yyyy-mm-ddhh24:mi:ss' )); commit ; end proce_t; / |
在sql>后执行:
1 2 3 4 5 6 | variablejobnonumber; begin dbms_job.submit(:jobno, 'proce_t;' ,sysdate, 'sysdate+1/24/60' ); commit; end; / |
1 2 3 4 | pl/sqlproceduresuccessfullycompleted jobno --------- 25 |
1 2 3 4 5 | sql> select job,next_date,next_sec,failures,broken from user_jobs; jobnext_datenext_secfailuresbroken ----------------------------------------------------- 252012/9/14110:59:460n |
执行select*fromt;查看定时任务的结果。可以看出定时任务是正常执行了的。
五、停止定时任务
1、查看定时任务的job号。
1 2 3 4 5 | sql> select job,next_date,next_sec,failures,broken from user_jobs; jobnext_datenext_secfailuresbroken ----------------------------------------------------- 252012/9/14111:01:480n |
1 2 3 4 5 | begin dbms_job.broken(25, true ,sysdate); commit ; end ; / |
执行后显示如下:
pl/sqlproceduresuccessfullycompleted
3、查看定时任务是否已停止成功
1 2 3 4 5 | sql> select job,next_date,next_sec,failures,broken from user_jobs; jobnext_datenext_secfailuresbroken ----------------------------------------------------- 254000/1/100:00:000y |
六、启动定时任务
1、查看停止定时任务
1 2 3 4 5 | sql> select job,next_date,next_sec,failures,broken from user_jobs; jobnext_datenext_secfailuresbroken ----------------------------------------------------- 254000/1/100:00:000y |
2、启动定时任务
1 2 3 4 5 | begin dbms_job.run(25); commit ; end ; / |
1 2 3 4 5 | sql>selectjob,next_date,next_sec,failures,brokenfromuser_jobs; jobnext_datenext_secfailuresbroken ----------------------------------------------------- 25 2012 / 9 / 14 1 11 : 06 : 17 0 n |
七、查看进程数
showparameterjob_queue_processes;
必须大于0,否则执行下面的命令修改:
altersystemsetjob_queue_processes=10;
八、再创建一个任务(每5分钟执行一次):
1 2 3 4 5 6 | variablejobnonumber; begin dbms_job.submit(:jobno, 'proce_t;' ,sysdate, 'sysdate+1/24/12' ); --interval是以天为单位的 commit ; end ; / |
结果:
1 2 3 4 5 6 | sql>selectjob,next_date,next_sec,failures,brokenfromuser_jobs; jobnext_datenext_secfailuresbroken ----------------------------------------------------- 262012/9/14111:12:080n 252012/9/14111:07:180n |
关于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)。
相关文章推荐
- Oracle默认初始化用户密码
- Oracle 存储过程
- EBS form日历可选范围设置(calendar.setup )介绍
- dataguard 中standby有大量gap解决方法
- Oracle 存储过程(procedure)和函数(Function)的区别(转载)
- Oracle序列
- 理解RHEL上安装oracle的配置参数 :/etc/security/limits.conf, /etc/profile, /etc/pam.d/login
- oracle遇到的各种问题
- ORA-12170:TNS:连接超时解决办法
- oracle 中要查询某天数据 to_date(createdt,'yyyy-MM-dd')=to_date('2010-11-25','yyyy-MM-dd'); 用这种语
- Oracle round()函数与trunc()函数区别介绍
- oracle恢复备份数据
- [转]Oracle中存储过程和函数的区别
- Java全新高大尚HTML5 bootstrap ace后台框架源码springmvc mybatis(oracle 和 mysql)
- Oracle数据库操作相关命令
- SQLSERVER读取ORACLE缺少数据,OPENQUERY只能读取一条数据
- Oracle日期时间函数大全
- Oracle 差异增量和累计增量备份
- oracle中exp,imp的使用详解
- Oracle 手动创建数据库步骤详解