Scheduler Job 测试

2020-09-03 00:00:00 创建 执行 生产 存储过程 例子

Scheduler Job 用于创建job并实现job的调度,也就是什么时候开始,以什么频率执行job中定义的行为,比如定时对数据清理,历史数据备份等等

其中job_type可以是STORED_PROCEDUREPLSQL_BLOCK,EXECUTABEL(可执行脚本) 这里我们通过一个例子说明如何创建PLSQL_BLOCK 类型

Scheduler Job,这个例子来自MOS的一篇文章,这里稍作简化。感兴趣可以看这篇文章(Doc ID 2577681.1


1 创建用户,生产系统往往用户已经存在,需要注意赋予相应的权限

create user user33 identified by user33 default tablespace users temporary tablespace temp;

grant connect, resource to user33;

alter user user33 quota unlimited on users;

grant create job, create any job, execute any procedure to user33;


2 创建测试表

create table user33.tab33 (dept_no number, dept_name varchar2(30) not null, primary key (dept_no));

insert into user33.tab33 values (01, 'Administration');

insert into user33.tab33 values (02, 'Payroll');

insert into user33.tab33 values (03, 'Support');

insert into user33.tab33 values (04, 'Marketing');

insert into user33.tab33 values (05, 'Sales');

commit;


3 创建存储过程,通过这个存储过程创建一个job,这个job的任务就是在执行收集测试表的统计信息,时间是执行存储过程的时间

create or replace procedure user33.create_job_proc

is

begin

dbms_scheduler.create_job (

job_name=>'user33.job43',

job_type => 'PLSQL_BLOCK',

job_action => 'begin dbms_stats.gather_table_stats(''user33'',''tab33''); end;',

start_date => to_timestamp_tz(sysdate, 'YYYY-MM-DD HH24:MI:SS TZH:TZM'),

repeat_interval => null,

end_date        => null,

auto_drop => false,

enabled => false);


dbms_scheduler.enable( 'user33.job43' );

end create_job_proc;

/



4 执行job

USER33@orcl1> exec create_job_proc;


PL/SQL procedure successfully completed.


Elapsed: 00:00:00.12


这里仅仅通过一个例子演示实现方法,这个例子执行job一次。而生产需求往往业务更复杂,更灵活需要明确调度时间和频率,这个需要根据具体需要来设计实现。

我们在实际巡检中,遇到如下问题:

1 01555 涉及的Select语句需要调优

2 插入字段超过定义值(跟具体SQL、表和数据有关)

3 主键冲突 

4 存储过程对象不存在



相关文章