1、新建调度和作业
/*
FREQ 关键字用来指定间隔的时间周期,可选参数有:YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, and SECONDLY,分别表示年、月、周、日、时、分、秒等单位。
INTERVAL 关键字用来指定间隔的频繁,可指定的值的范围从1-99。
job_name: 顾名思义,每个job都必须有一个的名称
schedule_name: 如果定义了计划,在这里指定计划的名称
job_type: 目前支持三种类型:
PL/SQL块: PLSQL_BLOCK,
存储过程: STORED_PROCEDURE
外部程序: EXECUTABLE (外部程序可以是一个shell脚本,也可以是操作系统级别的指令).
job_action: 根据job_type的不同,job_action有不同的含义.
如果job_type指定的是存储过程,就需要指定存储过程的名字;
如果job_type指定的是PL/SQL块,就需要输入完整的PL/SQL代码;
如果job_type指定的外部程序,就需要输入script的名称或者操作系统的指令名
enabled: 上面已经说过了,指定job创建完毕是否自动激活
comments: 对于job的简单说明
*/
begin
dbms_scheduler.create_schedule
(
schedule_name => 'EVERY_30_SECS',
repeat_interval => 'FREQ=SECONDLY; INTERVAL=3',
comments => 'Every 30-SECS'
);
dbms_scheduler.create_job
(
job_name => 'ARC_MOVE_2',
schedule_name => 'EVERY_30_SECS',
--job_class => 'OLTP_JOBS', --使用指定的job class
job_type => 'PLSQL_BLOCK',
job_action =>
'declare
lId number;
begin
EXECUTE IMMEDIATE ''select nvl(max(lid),0) from table1'' into lId;
INSERT INTO TABLE1 VALUES (lId+1);
commit;
end;',
enabled => true,
comments => 'Move Archived Logs to a Different Directory'
);
end;
2、JOB运行情况查看
/*
如果数据库使用了Oracle的JOB来完成一些定时作业,要对这些JOB的运行情况进行检查:
如果FAILURE_COUNT列是一个大于0的数的话,说明JOB运行失败,要进一步的检查。
select owner, job_name, failure_count from ALL_SCHEDULER_JOBS
*/
select * from ALL_SCHEDULER_JOBS
3、删除调度和作业
begin
dbms_scheduler.drop_job(job_name => 'ARC_MOVE_2',force => TRUE);
dbms_scheduler.drop_schedule(schedule_name =>'EVERY_30_SECS',force => TRUE);
end;
/