Oracle作业队列入门图文解说

    在 Oracle 中,是使用 “作业队列协调进程(CJQ0)” 这个协调数据库实例的作业队列的后台进程,来监视作业队列中的作业表(JOB$),并启动作业队列进程(Jnnn)。而当需要执行作业的时候,作业队列Jnnn 将会执行由 DBMS_JOBS 包创建的作业请求。

1 首先查看一下作业相关的信息;

Oracle作业队列入门图文解说_第1张图片





    当前没有作业,select * from user_jobs显示为空;


2 在sql developer中创建一个存储过程,用于插入一条数据到emp表;

create or replace procedure insert_emp as 
begin
insert into emp(empno,ename) values('8000','Simth');
end insert_emp;

Oracle作业队列入门图文解说_第2张图片


3 在sql plus中,连接到scott用户,查看一下存储过程; 新建的存储过程insert_emp已经出来了;

Oracle作业队列入门图文解说_第3张图片


4 根据网上资料,用系统包dbms_job的submit来提交一个作业,调度执行insert_emp; 

输入错误一次;

Oracle作业队列入门图文解说_第4张图片


5 再次输入,争取;

job1为作业编号;insert_emp是要执行的过程名;

按网上资料,sysdate+1/1440 为每分钟执行一次,那么sysdate+2/1440为每2分钟执行一次;

Oracle作业队列入门图文解说_第5张图片


函数包DBMS_JOB介绍
该包包含的过程有SUBMIT、REMOVE、CHANGE、WHAT、NEXT_DATE、INTERVAL、BROKEN、RUN


参数介绍
job是作业号,标识一个作业在数据库中具有唯一性质
broken表示该作业是否被标记为无效,true无效,false有效
next_date表示下一次执行该作业的时间,默认为当前日期和时间
what表示该作业要运行的一块PL/SQL代码块、存储过程
interval表示该作业重复执行的时间间隔
no_parse表示作业在提交或者执行时是否应进行语法分析,true不分析,false立即分析
my_call表示在当前状态下重新提交此作业的代码


过程介绍:
SUBMIT:正常提交一个作业,有五个参数:job、what、next_date、interval、no_parse
REMOVE:删除一个已计划运行的作业,有一个参数:job、what、next_date、interval、no_parse
CHANGE:用于改变作业的执行计划,有四个参数:job、what、next_date、interval
WHAT:重新设置作业的执行代码,有两个参数:job、what
NEXT_DATE:用于设置作用下一次被执行的时间,有两个参数:job、next_date
INTERVAL:用于设置作用下一次执行的时间间隔,有两个参数:job、interval
BROKEN:用于设置一个已提交的左右有效或无效,有三个参数:job、broken、next_date
RUN:强制执行一个作业,不管该作业是否有效,有一个参数:job
USER_EXPORT:返回一个命令,此命令用来安排一个存在的作业以便此作业重新提交,有两个参数:job、my_call


6 现在作业提交了,查看一下user_jobs表的情况,有东西了;23是系统分配的作业号;

Oracle作业队列入门图文解说_第6张图片


Oracle作业队列入门图文解说_第7张图片


7 执行该作业;

Oracle作业队列入门图文解说_第8张图片


8 过一会看emp表;果然加入了一条数据;如下图第一条;

Oracle作业队列入门图文解说_第9张图片


9 但是过一段时间再看emp表,并没有2分钟插入一条记录;为啥呢;

看一下user_jobs表的情况,如下图,执行失败次数16,broken为y - 即停止;

那么是因为每次插入相同的数据,数据库约束的原因,除了第一次,其他插入失败,达到16次Oracle就停止了该作业;

Oracle作业队列入门图文解说_第10张图片

    移除该作业,退出,休息去。


你可能感兴趣的:(数据库,原创教程)