日期:2014-05-16  浏览次数:20498 次

11g调度(1)

需求:每晚有先后顺序的执行10个存储。

数据库: 11gR2

原本以为是个easy的问题,用job就能解决了。于是找到文档上的job使用方法,没曾想:

The DBMS_JOB package has been superseded by theDBMS_SCHEDULER package.

好吧,又来学习一下 DBMS_SCHEDULER包!花了2天时间来实现该需求,现将学习dbms_scheduler包的使用方法做下记录,由于该包的内容太多,我只把解决实际问题所用到的知识列出:

我的学习思路:

1:弄清概念

2:试验

3:参照官方文档做博客

begin:

一、概念

job:oracle中 个人理解为:任务

program:个人理解为 :需要被执行的程序(plsql代码,os脚本,存储)

scheduler:个人理解为:定义执行的周期或者频率

君三思的解释是: program 负责做什么,schedule 负责啥时候做,job 就简单了,一个字:做!!

二、试验

1:创建一个表:
create table t(id number(20),time_in date);

2:创建一个存储过程:
create or replace procedure insert_t
as 
begin
     insert into t values(t_seq.nextval,sysdate);
end;
/

3:创建一个程序块:
begin
DBMS_SCHEDULER.CREATE_PROGRAM(
program_name => 'my_t_pro',
program_type => 'STORED_PROCEDURE',
program_action => 't_t.insert_t',
enabled => true,
comments => 'this is a program!'
);
end;
/

DBMS_SCHEDULER.CREATE_PROGRAM的使用方法参考:

使用参考-来自官方文档

4:创建一个schedule:
begin
DBMS_SCHEDULER.CREATE_SCHEDULE(
schedule_name => 'my_t_scheduler',
start_date => sysdate,
repeat_interval => 'FREQ=MINUTELY;INTERVAL=1',
comments => 'every 2 minute'
);
end;
/

DBMS_SCHEDULER.CREATE_SCHEDULE的使用方法参考:

使用参考来自官方文档

5:创建一个 job
begin
dbms_scheduler.create_job(
job_name => 'exec_my_t_pro',
program_name => 'my_t_pro',
schedule_name => 'my_t_scheduler',
enabled => true
);
end;
/

dbms_scheduler.create_job的使用方法参考:

使用参考整理自三思笔记
创建完成后 oracle就自动开始执行刚刚定义的job了


SQL> select * from t;
              ID TIME_IN
---------------- --------------------------------------------
               2     2013/3/13 7:26:22
               3     2013/3/13 7:27:21
要查看当前用户的job相关信息 : user_scheduler_job_run_details

后续将整理几个例子方便以后参考!!