本文共 3509 字,大约阅读时间需要 11 分钟。
天萃荷净
分享一篇关于Oracle DBMS_SCHEDULER详细介绍与使用案例
1.通过DBMS_SCHEDULER.CREATE_JOB直接创建job
SQL> create table t_oracleplus (x_type varchar2(10),x_date date);
表已创建。
SQL> begin
2 DBMS_SCHEDULER.create_job (
3 job_name => 'f_create_job',
4 job_type => 'PLSQL_BLOCK',
5 job_action => '
6 begin
7 insert into t_oracleplus values(''job'',sysdate);
8 commit;
9 end;
10 ',
11 enabled => true,
12 start_date => SYSTIMESTAMP,
13 repeat_interval => 'SYSTIMESTAMP + 1/1440',
14 comments => 'oracleplus_create_job');
15 END;
16 /
SQL> select x_type,to_char(x_date,'yyyy-mm-dd hh24:mi:ss') from t_oracleplus;
X_TYPE TO_CHAR(X_DATE,'YYY
---------- -------------------
job 2012-06-19 19:52:11
job 2012-06-19 19:53:11
job 2012-06-19 19:54:11
这里的使用方法和dbms_jobs有几分类此,不过这个提供了加灵活的使用方法,比如可以执行匿名块,执行操作系统命令等
2.CREATE_JOB结合CREATE_PROGRAM
SQL> create or replace procedure p_oracleplus(in_type in varchar2)
2 is
3 begin
4 insert into t_oracleplus values(in_type,sysdate);
5 commit;
6 end;
7 /
过程已创建。
SQL> begin
2 DBMS_SCHEDULER.CREATE_PROGRAM(
3 program_name => 'x_program',
4 program_action => 'p_oracleplus',
5 program_type => 'STORED_PROCEDURE',
6 number_of_arguments => 1,
7 comments => 'oracleplus_PROGRAM',
8 enabled => false);
9 end;
10 /
PL/SQL 过程已成功完成。
SQL> begin
2 DBMS_SCHEDULER.define_program_argument(
3 program_name => 'x_program',
4 argument_position => 1,
5 argument_type => 'VARCHAR2',
6 default_value => 'program');
7 END;
8 /
PL/SQL 过程已成功完成。
SQL> exec DBMS_SCHEDULER.enable('x_program');
PL/SQL 过程已成功完成。
SQL> begin
2 DBMS_SCHEDULER.create_job(
3 job_name => 's_oracleplus_job',
4 program_name => 'x_program',
5 comments => 's_oracleplus_job',
6 repeat_interval => 'SYSTIMESTAMP + 1/1440',
7 auto_drop => false,
8 enabled => true);
9 end;
10 /
PL/SQL 过程已成功完成。
SQL> select x_type,to_char(x_date,'yyyy-mm-dd hh24:mi:ss') from t_oracleplus;
X_TYPE TO_CHAR(X_DATE,'YYY
---------- -------------------
job 2012-06-19 20:27:11
program 2012-06-19 20:27:09
program 2012-06-19 20:28:09
job 2012-06-19 20:28:11
这里可以看出来CREATE_PROGRAM是把CREATE_JOB中的部分参数给独立出来,使得更加灵活的控制,比如这里的使用从参数
3.CREATE_JOB结合CREATE_PROGRAM和CREATE_SCHEDULE
SQL> exec DBMS_SCHEDULER.drop_job('s_oracleplus_job');
PL/SQL 过程已成功完成。
SQL> truncate table t_oracleplus;
表被截断。
SQL> begin
2 DBMS_SCHEDULER.create_schedule(
3 repeat_interval => 'FREQ=MINUTELY;INTERVAL=1',
4 start_date => sysdate,
5 comments => 'oracleplus_sch',
6 schedule_name => 'X_SCH');
7 end;
8 /
PL/SQL 过程已成功完成。
SQL> begin
2 DBMS_SCHEDULER.create_job(
3 job_name => 't_oracleplus_job',
4 program_name => 'x_program',
5 comments => 't_oracleplus_job',
6 schedule_name => 'X_SCH',
7 auto_drop => false,
8 enabled => true);
9 end;
10 /
PL/SQL 过程已成功完成。
SQL> select x_type,to_char(x_date,'yyyy-mm-dd hh24:mi:ss') from t_oracleplus;
X_TYPE TO_CHAR(X_DATE,'YYY
---------- -------------------
job 2012-06-19 20:39:11
job 2012-06-19 20:37:11
job 2012-06-19 20:38:11
program 2012-06-19 20:39:01
program 2012-06-19 20:40:01
CREATE_SCHEDULE是把执行计划部分从CREATE_JOB独立处理,使得控制力度更大,更加灵活
补充说明:
1.还可以通过创建JOB_CLASS更加灵活的控制资源的使用情况,必须通过修改JOB_CLASS中的resource_consumer_group实现资源控制,service对应到数据库的service可以实现rac中在哪个节点执行等等
2.使用DBMS_SCHEDULER.set_attribute来修改相关属相如:
EXEC DBMS_SCHEDULER.set_attribute('GATHER_STATS_JOB','JOB_CLASS', 'AUTO_TASKS_JOB_CLASS2');
exec dbms_scheduler.set_attribute('WEEKNIGHT_WINDOW','REPEAT_INTERVAL','freq=daily;
byday=MON,TUE,WED,THU,FRI;byhour=2;byminute=0;bysecond=0');
--------------------------------------ORACLE-DBA----------------------------------------
最权威、专业的Oracle案例资源汇总之【学习笔记】Oracle DBMS_SCHEDULER详细介绍与使用案例
转载地址:http://fnima.baihongyu.com/