Scheduler Job 测试
Scheduler Job 用于创建job并实现job的调度,也就是什么时候开始,以什么频率执行job中定义的行为,比如定时对数据清理,历史数据备份等等
其中job_type可以是STORED_PROCEDURE、PLSQL_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 存储过程对象不存在
相关文章