当前位置:文档之家› OracleSchedulerJob学习笔记

OracleSchedulerJob学习笔记

Oracle scheduler job 学习笔记
1.Scheduler增删改查操作
1.1.创建procedure
create or replace procedure aiki_test
as
begin
insert into aiki.a2 values(‘a’,88);
commit;
end;
1.2.创建scheduler job
begin
dbms_scheduler.create_job (
job_name => ‘aiki_test_name’,
job_class => ‘DEFAULT_JOB_CLASS’,
job_type => ‘STORED_PROCEDURE’,
job_action => ‘aiki_test’,
start_date => sysdate,
repeat_interval => ‘FREQ=DAILY; BYHOUR=10;BYMINUTE=18,19;’, end_date =>null,
comments => ‘系统临时测试’
);
end;
1.3.启用scheduler job
begin
dbms_scheduler.enable(‘aiki_test1’);
end;
1.4.删除scheduler job
begin
DBMS_SCHEDULER.DROP_JOB(JOB_NAME => ‘AIKI_TEST2’);
end;
1.5.查询scheduler job
select * from user_scheduler_jobs;
2.repeat_interval参数解释
2.1.描述
这个语法形式看起来复杂无比,其实实用起来很简单,之所以看起来复杂,是因为其功能太过灵活(之前的三思系列笔记中,已经阐述过灵活与复杂的关系),这里不准备逐条解释每一个语法细节,下面将着重通过一些常用设置,希望能够更有助于广大同仁的理解。

2.2.举例
1、设置任务仅在周5的时候运行:
REPEAT_INTERVAL => “FREQ=DAILY; BYDAY=FRI”;
REPEAT_INTERVAL => “FREQ=WEEKLY; BYDAY=FRI”;
REPEAT_INTERVAL => “FREQ=YEARLY; BYDAY=FRI”;
上述三条语句虽然指定的关键字小有差异,不过功能相同。

2、设置任务隔一周运行一次,并且仅在周5运行:
REPEAT_INTERVAL => “FREQ=WEEKLY; INTERVAL=2; BYDAY=FRI”;
3、设置任务在当月最后一天运行:
REPEAT_INTERVAL => “FREQ=MONTHLY; BYMONTHDAY=-1”;
4、设置任务在3月10日运行:
REPEAT_INTERVAL => “FREQ=YEARLY; BYMONTH=MAR; BYMONTHDAY=10”;
REPEAT_INTERVAL => “FREQ=YEARLY; BYDATE=0310”;
上述两条语句功能相同。

5、设置任务每10隔天运行:
REPEAT_INTERVAL => “FREQ=DAILY; INTERVAL=10”;
6、设置任务在每天的下午4、5、6点时运行:
REPEAT_INTERVAL => “FREQ=DAILY; BYHOUR=16,17,18”;
7、设置任务在每月29日运行:
REPEAT_INTERVAL => “FREQ=MONTHLY; BYMONTHDAY=29”;
8、设置任务在每年的最后一个周5运行:
REPEAT_INTERVAL => “FREQ=YEARLY; BYDAY=-1FRI”;
9、设置任务每隔50个小时运行:
REPEAT_INTERVAL => “FREQ=HOURLY; INTERVAL=50”;
2.3.简便方式
另外,你是否在怀念常规job中设置interval的简便,虽然功能较弱,但是设置操作非常简单,无须懊恼,其实SCHEDULER中的REPEAT_INTERVAL也完全可以按照那种方式设置,前面都说了,REPEAT_INTERVAL实际上是指定周期,直接指定一个时间值,当然也是周期喽。

比如说,设置任务每天执行一次,也可以设置REPEAT_INTERVAL参数值如下:REPEAT_INTERVAL => “trunc(sysdate)+1”
又比如设置任务每周执行一次:
REPEAT_INTERVAL => “trunc(sysdate)+7”
不过需要注意,这种方式仅用于创建SCHEDULER中jobs时使用,不能用于schedule。

日历表达式基本分为三部分: 第一部分是频率,也就是"FREQ"这个关键字,它是必须指定的; 第二部分是时间间隔,也就是"INTERVAL"这个关键字,取值范围是1-999. 它是可选的参数; 最后一部分是附加的参数,可用于精确地指定日期和时间,它也是可选的参数,例如下面这些值都是合法的:
BYMONTH,BYWEEKNO,BYYEARDAY,BYMONTHDAY,BYDAY,BYHOUR,BYMINUTE,BYSECOND。

相关主题