18 - Oracle Scheduler调度

第十八课

18、Oracle Scheduler调度

 作业job
 程序program
 调度schedule
 链chain
 窗口window
 作业类
CJQ0进程:作业队列协调器
Jnnn进程:运行作业
参数:job_queue_processes
创建作业:

18.1 调度schedule

–基于时间的调度

BEGIN
  sys.dbms_scheduler.create_job(job_name => '"OUZY"."JOB1"'
                               ,job_type => 'PLSQL_BLOCK'
                               ,job_action => 'insert into t2 values(sysdate);'
                               ,repeat_interval => 'FREQ=SECONDLY;INTERVAL=10'
                               ,start_date => systimestamp at TIME ZONE
                                              'Asia/Shanghai'
                               ,job_class => '"DEFAULT_JOB_CLASS"'
                               ,auto_drop => FALSE
                               ,enabled => TRUE);
END;

在这里插入图片描述
作业的命令类型:
程序、匿名PL/SQL块、存储过程、可执行文件、链
在这里插入图片描述
创建程序program:
在这里插入图片描述
–创建程序program1

BEGIN
  dbms_scheduler.create_program(program_name => '"OUZY"."PROGRAM1"'
                               ,program_action => 'insert into tbs(name,dt) values(''program1'',sysdate);'
                               ,program_type => 'PLSQL_BLOCK'
                               ,enabled => TRUE);

从作业中抽取作业内容,就可以在多个作业中调用,而不必重复定义。

创建调度: 在这里插入图片描述

BEGIN
  dbms_scheduler.create_schedule(repeat_interval => 'FREQ=SECONDLY;INTERVAL=10'
                                ,start_date => systimestamp at TIME ZONE
                                               'Asia/Shanghai'
                                ,schedule_name => '"OUZY"."SCHEDULE1"');
END;

创建一个job(使用程序和调度):

BEGIN
  dbms_scheduler.create_job(job_name => '"OUZY"."JOB2"'
                           ,program_name => '"OUZY"."PROGRAM1"'
                           ,schedule_name => '"OUZY"."SCHEDULE1"'
                           ,job_class => '"DEFAULT_JOB_CLASS"'
                           ,auto_drop => TRUE
                           ,enabled => TRUE);
END;

18.2 作业链

在这里插入图片描述
链是为达到组合目标而链接在一起的一系列已命名的程序。
运行程序A 然后运行程序B,如果程序A 和程序B 成功完成,则只运行程序C,否则运行程序D。
要启动一个链,必须创建一个作业。
在这里插入图片描述
在这里插入图片描述

–创建测试表
create table tbs(name varchar2(20),dt date);

–创建程序program1

BEGIN
  dbms_scheduler.create_program(program_name => '"OUZY"."PROGRAM1"'
                               ,program_action => 'insert into tbs(name,dt) values(''program1'',sysdate);'
                               ,program_type => 'PLSQL_BLOCK'
                               ,enabled => TRUE);
END;

–创建程序program2

BEGIN
  dbms_scheduler.create_program(program_name => '"OUZY"."PROGRAM2"'
                               ,program_action => 'insert into tbs(name,dt) values(''program2'',sysdate);'
                               ,program_type => 'PLSQL_BLOCK'
                               ,enabled => TRUE);
END;

–创建程序program3

BEGIN
  dbms_scheduler.create_program(program_name => '"OUZY"."PROGRAM3"'
                               ,program_action => 'insert into tbs(name,dt) values(''program3'',sysdate);'
                               ,program_type => 'PLSQL_BLOCK'
                               ,number_of_arguments => 0
                               ,comments => ''
                               ,enabled => TRUE);
END;

–创建作业链

BEGIN
  dbms_scheduler.create_chain(chain_name => '"OUZY"."CHAIN1"');
  dbms_scheduler.define_chain_step(chain_name => '"OUZY"."CHAIN1"'
                                  ,step_name => '"STEP1"'
                                  ,program_name => '"OUZY"."PROGRAM1"');
  dbms_scheduler.define_chain_step(chain_name => '"OUZY"."CHAIN1"'
                                  ,step_name => '"STEP2"'
                                  ,program_name => '"OUZY"."PROGRAM2"');
  dbms_scheduler.define_chain_step(chain_name => '"OUZY"."CHAIN1"'
                                  ,step_name => '"STEP3"'
                                  ,program_name => '"OUZY"."PROGRAM3"');
    dbms_scheduler.define_chain_rule(chain_name => '"OUZY"."CHAIN1"'
                                  ,condition => 'TRUE'
                                  ,rule_name => 'RULE001'
                                  ,action => 'start step1');
  dbms_scheduler.define_chain_rule(chain_name => '"OUZY"."CHAIN1"'
                                  ,condition => 'step1 succeeded'
                                  ,rule_name => 'RULE002'
                                  ,action => 'start step2');
  dbms_scheduler.define_chain_rule(chain_name => '"OUZY"."CHAIN1"'
                                  ,condition => 'step1 failed'
                                  ,rule_name => 'RULE003'
                                  ,action => 'start step3');
  dbms_scheduler.define_chain_rule(chain_name => '"OUZY"."CHAIN1"'
                                  ,condition => 'step2 completed'
                                  ,rule_name => 'RULE004'
                                  ,action => 'END');
  dbms_scheduler.define_chain_rule(chain_name => '"OUZY"."CHAIN1"'
                                  ,condition => 'step3 completed'
                                  ,rule_name => 'RULE005'
                                  ,action => 'END');
  dbms_scheduler.enable('"OUZY"."CHAIN1"');
END;

–创建job

BEGIN
  dbms_scheduler.create_job(job_name => '"OUZY"."JOB1"'
                           ,job_type => 'CHAIN'
                           ,job_action => '"OUZY"."CHAIN1"'
                           ,repeat_interval => 'FREQ=SECONDLY;INTERVAL=10'
                           ,start_date => systimestamp at TIME ZONE
                                          'Asia/Shanghai'
                           ,job_class => '"DEFAULT_JOB_CLASS"'
                           ,auto_drop => TRUE
                           ,enabled => TRUE);
END;

18.3 窗口

在这里插入图片描述
窗口和资源计划相关联,都到窗口时间,特定资源计划被激活,可以控制job的资源使用。
尽量避免窗口重叠。

BEGIN
  dbms_scheduler.create_window(window_name => '"WINDOW_TEST"'
                              ,resource_plan => 'DEFAULT_PLAN'
                              ,start_date => systimestamp at TIME ZONE
                                             'Asia/Shanghai'
                              ,duration => numtodsinterval(240, 'minute')
                              ,repeat_interval => 'FREQ=DAILY;BYHOUR=2;BYMINUTE=30;BYSECOND=30'
                              ,end_date => NULL
                              ,window_priority => 'LOW'
                              ,comments => '');
END;
BEGIN
  dbms_scheduler.create_job(job_name => '"OUZY"."JOB1"'
                           ,program_name => '"OUZY"."PROGRAM1"'
                           ,schedule_name => '"SYS"."WINDOW_TEST"'
                           ,job_class => '"DEFAULT_JOB_CLASS"'
                           ,auto_drop => TRUE
                           ,enabled => FALSE);
  dbms_scheduler.set_attribute(NAME => '"OUZY"."JOB1"'
                              ,attribute => 'stop_on_window_close'
                              ,VALUE => FALSE);
  dbms_scheduler.enable('"OUZY"."JOB1"');
END;

–强制打开窗口

BEGIN
  dbms_scheduler.open_window(window_name => 'WINDOW_TEST'
                            ,duration => '0 1:00:00'
                            ,force => TRUE);
END;

资源计划激活,作业运行。

–关闭窗口

BEGIN
  dbms_scheduler.close_window(window_name => 'WINDOW_TEST');
END;

作业类:
作业可以被指派一个类,类可以链接一个资源计划。
默认作业类: DEFAULT_JOB_CLASS
在这里插入图片描述

select * from dba_scheduler_jobs;
select * from dba_scheduler_schedules;
select * from dba_scheduler_programs;
select * from dba_scheduler_running_jobs;
select * from dba_scheduler_job_log;
select * from dba_scheduler_job_run_details;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值