使用DBMS_SCHEDULER创建job参考

来源:互联网 发布:crm java 源码 编辑:程序博客网 时间:2024/04/27 11:03

使用DBMS_SCHEDULER创建job参考  


参考资料1:

3.2 Schedules调度Programs执行的Jobs
  通过schedule调度program的执行的job,看到这样的形容是不是让你彻底晕头了,就说明你还是没搞明白10g中SCHEDULERS特性管理的jobs的含意,让三思更直白地给你描述描述。10g版本中SCHEDULER将JOB分成了多个部分,program负责做什么,schedule负责啥时候做,job就简单了,一个字:做。
  前面几个小节,三思已经分别演示了创建管理Jobs,创建管理Programs以及创建和管理Schedules,下面我们通过实例来演示,如何创建通过schedule调度program的执行的job吧。
  首先,创建一个program,操作如下:
SQL> BEGIN
  2  DBMS_SCHEDULER.CREATE_PROGRAM (
  3    program_name           =>¨my_program1¨,
  4     program_action        => ¨/bin/date¨,
  5    program_type           =>¨EXECUTABLE¨,
  6    enabled               => TRUE);
  7  END;
  8  /
PL/SQL procedure successfully completed.
  通过上述语句,我们定义了一个program,执行操作系统命令date,并输入到dt.log文件中。
  接下来定义一个schedule,操作如下:
SQL> begin
  2  DBMS_SCHEDULER.CREATE_SCHEDULE (
  3    schedule_name     =>¨my_first_schedule¨,
  4    start_date       => SYSDATE,
  5    repeat_interval   => ¨FREQ= DAILY ;INTERVAL=1¨,
  6   comments          => ¨Every 1weeks¨);
  7  END;
  8  /
PL/SQL procedure successfully completed.
  定义调试为每周执行一次。此处repeat_interval可根据实现情况进行修改。
  最后,创建job,按照指定的schedule,执行program,操作如下:
SQL> BEGIN
  2  DBMS_SCHEDULER.CREATE_JOB (
  3    job_name          =>  ¨execOScmd¨,
  4    program_name       =>  ¨my_program1¨,
  5     schedule_name     =>  ¨my_first_schedule¨,
  6    enabled           =>  true);
  7  END;
  8  /
PL/SQL procedure successfully completed.
1.创建job
可以有两种方式来定义"计划":
1) 使用DBMS_SCHDULER.CREATE_SCHEDULE 定义一个计划;
2) 调用DBMS_SCHDULER.CREATE_JOBE过程直接指定 
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的简单说明
2. 指定job的执行频率
如果我们创建了一个job,并且希望它按照我们指定的日期和时间来运行,就需要定义job的重复频度了. 例如每天运行,每周日的22:00运行, 每周一,三,五运行,每年的最后一个星期天运行等等.
(说明:10G以前的版本,与操作系统的交互方面,实现的不是很好。例如要实现一个定期的rman备份任务,就需要结合OS的命令来实现,在UNIX下可以用crontab实现,在windows下用AT命令来实现)
10G 在这方面有了很大的增强,因为创建job时可以直接指定操作系统的命令或者脚本,再合理的定义job的执行频率,可以很轻松地完成复杂的调度任务.
10G 支持两种模式的repeat_interval,一种是PL/SQL表达式,这也是dbms_job包中所使用的,例如SYSDATE 1, SYSDATE 30/24*60; 另一种就是日历表达式。
例如MON表示星期一,SUN表示星期天,DAY表示每天,WEEK表示每周等等. 下面来看几个使用日历表达式的例子:
repeat_interval => 'FREQ=HOURLY; INTERVAL=2'
每隔2小时运行一次job
repeat_interval => 'FREQ=DAILY'
每天运行一次job
repeat_interval => 'FREQ=WEEKLY; BYDAY=MON,WED,FRI"
每周的1,3,5运行job
repeat_interval => 'FREQ=YEARLY; BYMONTH=MAR,JUN,SEP,DEC; BYMONTHDAY=30'
每年的3,6,9,12月的30号运行job
用过crontab的人应该都有种似曾相识的感觉吧,呵呵
下面再说说使用日历表达式的规则:
日历表达式基本分为三部分: 第一部分是频率,也就是"FREQ"这个关键字,它是必须指定的; 第二部分是时间间隔,也就是"INTERVAL"这个关键字,取值范围是1-999. 它是可选的参数; 最后一部分是附加的参数,可用于精确地指定日期和时间,它也是可选的参数,例如下面这些值都是合法的:
BYMONTH,BYWEEKNO,BYYEARDAY,BYMONTHDAY,BYDAY
BYHOUR,BYMINUTE,BYSECOND
详细的参数说明请参考 dbms_scheduler的使用说明.
既然说到了repeat_interval,你可能要问:"有没有一种简便的方法来得出,或者说是评估出job的每次运行时间,以及下一次的运行时间呢?"
dbms_scheduler包提供了一个过程evaluate_calendar_string,可以很方便地完成这个需求. 
 
 
 
      创建job时,start_date,repeat_interval,job_action等均无须指定,因为这些参数将由program和schedule来控制。
  这样,操作完成后,ORACLE就会自动定时(当前设置为每周执行一次)program中定义的操作。
 虽然说jobs大多都应该是自动执行,不过经过前面的示例,大家想必也认识到了,并不是说创建了jobs它就会自动执行,是否能够真正自动执行并不是由你的主观意愿就能直接决定,而是由jobs自身的多个相关属性决定。
  关于jobs自动执行的话题相信看完前面的内容后,应该都知道如何设置,下面主要演示,如何手动调用jobs并执行,这其中,当然少不了DBMS_SCHEDULER包。例如,手动执行前面刚刚创建的job:INSERT_TEST_TBL:
SQL> exec dbms_scheduler.run_job(¨INSERT_TEST_TBL¨);
PL/SQL procedure successfully completed
  Jobs 每执行一次,无论成功或失败,均会在*_SCHEDULER_JOB_LOG中生成一条对应的记录(前提是LOGGING_LEVEL属性值未设置为DBMS_SCHEDULER.LOGGING_OFF),同时,用户也可以通过*_SCHEDULER_JOB_RUN_DETAILS视图查询job执行的详细信息。
 
 停止job可以使用DMBS_SCHEDULER.STOP_JOB过程,例如:
SQL> exec dbms_scheduler.stop_job(¨INSERT_TEST_TBL¨);
PL/SQL procedure successfully completed
  注意,STOP_JOB过程不仅仅是更新job的状态,而是停止当前正在执行的任务,如果你处理的任务当前未在运行的话,那么执行STOP_JOB过程,会触发ORA-27366错误。
  停止Jobs也会触发一条任务的日志信息,对于执行停止操作的job,其*_SCHEDULER_JOB_LOG视图的OPERATION会记录为¨STOPPED¨,ADDITIONAL_INFO列中记录的信息类似¨REASON="Stop job called by user:username"¨。
 
  要查看当前的执行情况,通过*_scheduler_job_run_details即可查询(*_scheduler_job_log也可以,不过该视图中信息不如detail中全面)。例如,查看刚刚创建的"EXECOSCMD"任务的执行情况,执行命令如下:
SQL> select log_id, log_date, status, additional_info
  2    from user_scheduler_job_run_details
  3   where job_name = ¨EXECOSCMD¨
  4  ;
    LOG_IDLOG_DATE            STATUS     ADDITIONAL_INFO
---------- -------------------- ---------- ------------------------------
     13760 17-AUG-09 02.47.53.7 SUCCEEDED
           34050 PM 08:00
  看完这个示例之后,你是否对10g中的SCHEDULER特性多了些了解呢?千万表自满,SCHEDULER特性的功能还多着哪,接着往下看吧。
 
============================================================================================
 
只用DBMS_SCHDULER.CREATE_JOB来创建job:
 
grant exexcute on dbms_scheduler to u1;
grant create job,create externale job to u1;
 
begin
       dbms_scheduler.create_job
      (
        job_name => 'job1',
        job_type => 'EXECUTABLE',
        repeat_interval =>'freq=daily;interval=1',
        job_action =>'/home/dbtools/move_arcs.sh',
        enabled => true,
        comments => 'Move Archived Logsto a Different Directory'
      );
end;
/
手动执行一次: execdbms_scheduler.run_job('job1');
                     exec dbms_scheduler.stop_job('job1');
删除job      : execdbms_scheduler.drop_job('job1');
查看相关表   : select * from dbms_sheduler_jobs;
                     select * from dbms_scheduler_job_run_details;
 参考资料2:

DBMS_SCHEDULER是Oracle 10G中新增的一个包,与老版本的dbms_job包相比,dbms_scheduler有很多新特性,我将通过一系列的文章来介绍一下如何使用这个包.
1. 创建job
job是什么呢? 简单的说就是计划(schedule)加上任务说明. 另外还有一些必须的参数.
这里提到的"任务"可以是数据库内部的存储过程,匿名的PL/SQL块,也可以是操作系统级别的脚本.
可以有两种方式来定义"计划":
1) 使用DBMS_SCHDULER.CREATE_SCHEDULE 定义一个计划;
2) 调用DBMS_SCHDULER.CREATE_JOBE过程直接指定 (下面会详细说明)
在创建一个计划时,你至少需要指定下面的属性,它们是job运行所必须的:
开始时间 (start_time);
重复频率(repeat_interval);
结束时间 (end_time)
另外,对于一个job而言,还有很多的附加参数:
job_class
job_priority
auto_drop
restartable
max_runs
max_failures
schedule_limit
logging_level
下面,我以问答的形式来具体解释.
Q1:怎么从数据库中查询job的属性 ?
A1: 有两种方法:
1) 查询(DBA|ALL|USER)_SCHEDULER_JOBS 视图
(提示: 根据用户权限的不同,选择性的查询 DBA|ALL|USER视图)
2) 调用DBMS_SCHEDULER包中的GET_ATTRIBUTE 过程
Q2: 怎么设置这些属性呢?
A2: 也是有两种方法
1) 在创建job时直接指定
2) 调用DBMS_SCHEDULER包中的SET_ATTRIBUTE 过程
Q3: "我需要什么权限才能创建job" ?
它可以创建属主为任何用户(SYS用户除外)的job.
缺省情况下,job会被创建在当前的schema下,并且是没有激活的; 如果要使job一创建
就自动激活,需要显式的设置enabled 属性为true, 来看一个例子:
begin
dbms_scheduler.create_job
(
job_name => 'ARC_MOVE',
schedule_name => 'EVERY_60_MINS',
job_type => 'EXECUTABLE',
job_action => '/home/dbtools/move_arcs.sh',
enabled => true,
comments => 'Move Archived Logs to a Different Directory'
);
end;
/
Q4: 能不能详细地讲述一下上面这个过程用到的各个参数?
A4:
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的简单说明
2. 指定job的执行频率
如果我们创建了一个job,并且希望它按照我们指定的日期和时间来运行,就需要定义job的重复频度了. 例如每天运行,每周日的22:00运行, 每周一,三,五运行,每年的最后一个星期天运行等等.
(说明:10G以前的版本,与操作系统的交互方面,实现的不是很好。例如要实现一个定期的rman备份任务,就需要结合OS的命令来实现,在UNIX下可以用crontab实现,在windows下用AT命令来实现)
10G 在这方面有了很大的增强,因为创建job时可以直接指定操作系统的命令或者脚本,再合理的定义job的执行频率,可以很轻松地完成复杂的调度任务.
10G 支持两种模式的repeat_interval,一种是PL/SQL表达式,这也是dbms_job包中所使用的,例如SYSDATE 1, SYSDATE 30/24*60; 另一种就是日历表达式。
例如MON表示星期一,SUN表示星期天,DAY表示每天,WEEK表示每周等等. 下面来看几个使用日历表达式的例子:
repeat_interval => 'FREQ=HOURLY; INTERVAL=2'
每隔2小时运行一次job
repeat_interval => 'FREQ=DAILY'
每天运行一次job
repeat_interval => 'FREQ=WEEKLY; BYDAY=MON,WED,FRI"
每周的1,3,5运行job
repeat_interval => 'FREQ=YEARLY; BYMONTH=MAR,JUN,SEP,DEC; BYMONTHDAY=30'
每年的3,6,9,12月的30号运行job
用过crontab的人应该都有种似曾相识的感觉吧,呵呵
下面再说说使用日历表达式的规则:
日历表达式基本分为三部分: 第一部分是频率,也就是"FREQ"这个关键字,它是必须指定的; 第二部分是时间间隔,也就是"INTERVAL"这个关键字,取值范围是1-999. 它是可选的参数; 最后一部分是附加的参数,可用于精确地指定日期和时间,它也是可选的参数,例如下面这些值都是合法的:
BYMONTH,BYWEEKNO,BYYEARDAY,BYMONTHDAY,BYDAY
BYHOUR,BYMINUTE,BYSECOND
详细的参数说明请参考 dbms_scheduler的使用说明.

 

既然说到了repeat_interval,你可能要问:"有没有一种简便的方法来得出,或者说是评估出job的每次运行时间,以及下一次的运行时间呢?"
dbms_scheduler包提供了一个过程evaluate_calendar_string,可以很方便地完成这个需求. 
 
 
 
      创建job时,start_date,repeat_interval,job_action等均无须指定,因为这些参数将由program和schedule来控制。
  这样,操作完成后,ORACLE就会自动定时(当前设置为每周执行一次)program中定义的操作。
 虽然说jobs大多都应该是自动执行,不过经过前面的示例,大家想必也认识到了,并不是说创建了jobs它就会自动执行,是否能够真正自动执行并不是由你的主观意愿就能直接决定,而是由jobs自身的多个相关属性决定。
  关于jobs自动执行的话题相信看完前面的内容后,应该都知道如何设置,下面主要演示,如何手动调用jobs并执行,这其中,当然少不了DBMS_SCHEDULER包。例如,手动执行前面刚刚创建的job:INSERT_TEST_TBL:
SQL> exec dbms_scheduler.run_job(¨INSERT_TEST_TBL¨);
PL/SQL procedure successfully completed
  Jobs 每执行一次,无论成功或失败,均会在*_SCHEDULER_JOB_LOG中生成一条对应的记录(前提是LOGGING_LEVEL属性值未设置为DBMS_SCHEDULER.LOGGING_OFF),同时,用户也可以通过*_SCHEDULER_JOB_RUN_DETAILS视图查询job执行的详细信息。
 
 停止job可以使用DMBS_SCHEDULER.STOP_JOB过程,例如:
SQL> exec dbms_scheduler.stop_job(¨INSERT_TEST_TBL¨);
PL/SQL procedure successfully completed
  注意,STOP_JOB过程不仅仅是更新job的状态,而是停止当前正在执行的任务,如果你处理的任务当前未在运行的话,那么执行STOP_JOB过程,会触发ORA-27366错误。
  停止Jobs也会触发一条任务的日志信息,对于执行停止操作的job,其*_SCHEDULER_JOB_LOG视图的OPERATION会记录为¨STOPPED¨,ADDITIONAL_INFO列中记录的信息类似¨REASON="Stop job called by user:username"¨。
 
  要查看当前的执行情况,通过*_scheduler_job_run_details即可查询(*_scheduler_job_log也可以,不过该视图中信息不如detail中全面)。例如,查看刚刚创建的"EXECOSCMD"任务的执行情况,执行命令如下:
SQL> select log_id, log_date, status, additional_info
  2    from user_scheduler_job_run_details
  3   where job_name = ¨EXECOSCMD¨
  4  ;
    LOG_IDLOG_DATE            STATUS     ADDITIONAL_INFO
---------- -------------------- ---------- ------------------------------
     13760 17-AUG-09 02.47.53.7 SUCCEEDED
           34050 PM 08:00
  看完这个示例之后,你是否对10g中的SCHEDULER特性多了些了解呢?千万表自满,SCHEDULER特性的功能还多着哪,接着往下看吧。
 
============================================================================================
 
只用DBMS_SCHDULER.CREATE_JOB来创建job:
 
grant exexcute on dbms_scheduler to u1;
grant create job,create externale job to u1;
 
begin
       dbms_scheduler.create_job
      (
        job_name => 'job1',
        job_type => 'EXECUTABLE',
        repeat_interval =>'freq=daily;interval=1',
        job_action =>'/home/dbtools/move_arcs.sh',
        enabled => true,
        comments => 'Move Archived Logsto a Different Directory'
      );
end;
/
手动执行一次: execdbms_scheduler.run_job('job1');
                     exec dbms_scheduler.stop_job('job1');
删除job      : execdbms_scheduler.drop_job('job1');
查看相关表   : select * from dbms_sheduler_jobs;
                     select * from dbms_scheduler_job_run_details;
 参考资料2:

DBMS_SCHEDULER是Oracle 10G中新增的一个包,与老版本的dbms_job包相比,dbms_scheduler有很多新特性,我将通过一系列的文章来介绍一下如何使用这个包.
1. 创建job
job是什么呢? 简单的说就是计划(schedule)加上任务说明. 另外还有一些必须的参数.
这里提到的"任务"可以是数据库内部的存储过程,匿名的PL/SQL块,也可以是操作系统级别的脚本.
可以有两种方式来定义"计划":
1) 使用DBMS_SCHDULER.CREATE_SCHEDULE 定义一个计划;
2) 调用DBMS_SCHDULER.CREATE_JOBE过程直接指定 (下面会详细说明)
在创建一个计划时,你至少需要指定下面的属性,它们是job运行所必须的:
开始时间 (start_time);
重复频率(repeat_interval);
结束时间 (end_time)
另外,对于一个job而言,还有很多的附加参数:
job_class
job_priority
auto_drop
restartable
max_runs
max_failures
schedule_limit
logging_level
下面,我以问答的形式来具体解释.
Q1:怎么从数据库中查询job的属性 ?
A1: 有两种方法:
1) 查询(DBA|ALL|USER)_SCHEDULER_JOBS 视图
(提示: 根据用户权限的不同,选择性的查询 DBA|ALL|USER视图)
2) 调用DBMS_SCHEDULER包中的GET_ATTRIBUTE 过程
Q2: 怎么设置这些属性呢?
A2: 也是有两种方法
1) 在创建job时直接指定
2) 调用DBMS_SCHEDULER包中的SET_ATTRIBUTE 过程
Q3: "我需要什么权限才能创建job" ?
它可以创建属主为任何用户(SYS用户除外)的job.
缺省情况下,job会被创建在当前的schema下,并且是没有激活的; 如果要使job一创建
就自动激活,需要显式的设置enabled 属性为true, 来看一个例子:
begin
dbms_scheduler.create_job
(
job_name => 'ARC_MOVE',
schedule_name => 'EVERY_60_MINS',
job_type => 'EXECUTABLE',
job_action => '/home/dbtools/move_arcs.sh',
enabled => true,
comments => 'Move Archived Logs to a Different Directory'
);
end;
/
Q4: 能不能详细地讲述一下上面这个过程用到的各个参数?
A4:
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的简单说明
2. 指定job的执行频率
如果我们创建了一个job,并且希望它按照我们指定的日期和时间来运行,就需要定义job的重复频度了. 例如每天运行,每周日的22:00运行, 每周一,三,五运行,每年的最后一个星期天运行等等.
(说明:10G以前的版本,与操作系统的交互方面,实现的不是很好。例如要实现一个定期的rman备份任务,就需要结合OS的命令来实现,在UNIX下可以用crontab实现,在windows下用AT命令来实现)
10G 在这方面有了很大的增强,因为创建job时可以直接指定操作系统的命令或者脚本,再合理的定义job的执行频率,可以很轻松地完成复杂的调度任务.
10G 支持两种模式的repeat_interval,一种是PL/SQL表达式,这也是dbms_job包中所使用的,例如SYSDATE 1, SYSDATE 30/24*60; 另一种就是日历表达式。
例如MON表示星期一,SUN表示星期天,DAY表示每天,WEEK表示每周等等. 下面来看几个使用日历表达式的例子:
repeat_interval => 'FREQ=HOURLY; INTERVAL=2'
每隔2小时运行一次job
repeat_interval => 'FREQ=DAILY'
每天运行一次job
repeat_interval => 'FREQ=WEEKLY; BYDAY=MON,WED,FRI"
每周的1,3,5运行job
repeat_interval => 'FREQ=YEARLY; BYMONTH=MAR,JUN,SEP,DEC; BYMONTHDAY=30'
每年的3,6,9,12月的30号运行job
用过crontab的人应该都有种似曾相识的感觉吧,呵呵
下面再说说使用日历表达式的规则:
日历表达式基本分为三部分: 第一部分是频率,也就是"FREQ"这个关键字,它是必须指定的; 第二部分是时间间隔,也就是"INTERVAL"这个关键字,取值范围是1-999. 它是可选的参数; 最后一部分是附加的参数,可用于精确地指定日期和时间,它也是可选的参数,例如下面这些值都是合法的:
BYMONTH,BYWEEKNO,BYYEARDAY,BYMONTHDAY,BYDAY
BYHOUR,BYMINUTE,BYSECOND
详细的参数说明请参考 dbms_scheduler的使用说明.

 

2. DBMS_SCHEDULER
  DBMS_SCHEDULER的功能更强大,定义更灵活,增强了与系统的交互性。可以有两种方式来定义"计划":
  1) 使用DBMS_SCHDULER.CREATE_SCHEDULE//定义一个计划,计划再调用job;2) 调用DBMS_SCHDULER.CREATE_JOB//过程直接定义job例子1:用DBMS_SCHDULER.CREATE_JOBE直接创建jobBEGIN
  DBMS_SCHEDULER.CREATE_JOB (
  job_name => 'update_bb', //job的名字
  job_type => 'STORED_PROCEDURE', //job的类型为“执行存储过程”
  job_action =>'OPS.SALES_PKG.UPDATE_SALES_SUMMARY', //存储过程的名字start_date=> '28-APR-10 07.00.00 PM Australia/Sydney', //这里把时区去掉也可以!
  repeat_interval => 'FREQ=DAILY;INTERVAL=2', /* everyother day */enabled =>true, //启动该job
  comments => 'My new job'); //注释
  END;
  /
  参数说明:
  ·job_name: 顾名思义,每个job都必须有一个的名称·schedule_name: 如果定义了计划,在这里指定计划的名称·job_type: 目前支持三种类型:
  ·PLSQL_BLOCK : PL/SQL块: 需要输入完整的PL/SQL代码;·STORED_PROCEDURE: 存储过程: 需要指定存储过程的名字;·EXECUTABLE: 外部程序: (外部程序可以是一个shell脚本,也可以是操作系统级别的指令). 需要输入script的名称或者操作系统的指令名·enabled: 上面已经说过了,指定job创建完毕是否自动激活·comments: 对于job的简单说明
  例子2:
  BEGIN
  DBMS_SCHEDULER.CREATE_JOB (
  job_name => 'zbb_job3',
  job_type => 'PLSQL_BLOCK', //job的类型是执行sql语句job_action => 'insert into bbvalues(1,sysdate);',start_date => sysdate,
  repeat_interval => 'freq = minutely; interval=1',//每分钟执行一次enabled => true,
  comments => 'my love');
  END;
  /
  注意: enabled 默认为false,oracle不会运行此job,所有我们需要enable它SQL> exec dbms_scheduler.enable('zbb_job3');例子3:使用DBMS_SCHDULER.CREATE_SCHEDULE
  建立 scheduler(控制时间和频率),然后给它添加几个jobs(动作)!
  BEGIN
  DBMS_SCHEDULER.CREATE_SCHEDULE ( //创建计划任务schedule_name => 'zbb_schedule',
  repeat_interval => 'FREQ=MINUTELY; INTERVAL=5', //执行间隔:每5分钟comments => 'Every 5 MINUTS');
  END;
  /
  接下来往“zbb_schedule”里添加一个job “zbb_job2”:
  BEGIN
  DBMS_SCHEDULER.CREATE_JOB ( //创建job 并把它加入到scheduler里面job_name => 'zbb_job2',
  job_type => 'PLSQL_BLOCK',
  job_action => 'insert into bbvalues(1,sysdate);',schedule_name => 'ZBB_SCHEDULE');
  END;
  /
  再往“zbb_schedule”里添加一个job “zbb_job3”:
  BEGIN
  DBMS_SCHEDULER.CREATE_JOB (
  job_name => 'zbb_job3',
  job_type => 'PLSQL_BLOCK',
  job_action => 'insert into bbvalues(1,sysdate);',schedule_name => 'ZBB_SCHEDULE');
  END;
  /
  运行“select job_name,schedule_name fromuser_scheduler_jobs;”可以查看到所有的job。
  也可以将“zbb_job1” 加入到 “zbb_schedule”
  SQL> begin
  2 dbms_scheduler.SET_ATTRIBUTE( //注意这里执行的是修改属性的过程3 name => 'zbb_job1',
  4 attribute => 'schedule_name',
  5 value => 'ZBB_SCHEDULE');
  6 end;
  7 /
  删除 job 及 scheduler:
  SQL> BEGIN
  DBMS_SCHEDULER.DROP_JOB ( //删除job;多个job间用逗号隔开job_name=> 'zbb_job2,zbb_job3',
  force => TRUE);
  END;
  /
  如何删除scheduler:
  BEGIN
  DBMS_SCHEDULER.DROP_SCHEDULE (
  schedule_name => 'zbb_schedule',
  force => true ); // 设为true强制;false。
  END;
  /
  如何修改job的属性(frequency:频率):
  BEGIN
  DBMS_SCHEDULER.SET_ATTRIBUTE (
  name => 'zbb_job1',
  attribute => 'repeat_interval',
  value => 'FREQ=DAILY'); //每天执行一次
  END;
  /
  jobs创建时为“disabled”状态。我们必须手动“enable”它:
  BEGIN
  DBMS_SCHEDULER.ENABLE ('job1, job2, job3,sys.jobclass1, sys.jobclass2, sys.jobclass3'); /* sys.jobclass1下的所有jobs都会被enable */END;/END;
  /
  查看job的状态:
  SELECT JOB_NAME, STATE FROM DBA_SCHEDULER_JOBS WHEREJOB_NAME = 'MY_EMP_JOB1';查看Job Logs:
  SELECT JOB_NAME, OPERATION, OWNER FROMDBA_SCHEDULER_JOB_LOG;查看Job 运行的详细情况:
  select log_id, job_name, status, to_char(log_date,'DD-MON-YYYY HH24:MI') log_date from dba_scheduler_job_run_detailswherejob_name = 'MY_JOB14';如何管理计划任务的权限:
  GRANT SCHEDULER_ADMIN TO username;GRANT CREATE JOB TOscott;GRANT ALTER myjob1 TO scott;GRANT MANAGE SCHEDULER TO adam;PLSQL举例如下:
  begin dbms_scheduler.create_job ( job_name => '测试', job_type => 'PLSQL_BLOCK', job_action => 'insert intojob_test values(sysdate);', start_date => sysdate, end_date =>add_months(sysdate,12000), repeat_interval => 'FREQ=MINUTELY; INTERVAL=1',enabled => true,comments => '定时执行计划任务' );
  end;
  以上代码可以通过在PLSQL Developer中新建Jobs轻松设定:
  参数含义如下:
  ?JOB_NAME :指定任务的名称,必选值,注意要确保指定的名称唯一。
  ?JOB_TYPE :任务执行的操作类型,必选值,有下列几个可选值:
  ?PLSQL_BLOCK :表示任务执行的是一个PL/SQL匿名块。
  ?STORED_PROCEDURE :表示任务执行的是ORACLE过程(含PL/SQL PROCEDURE和JAVAPROCEDURE)。
  ?EXECUTABLE :表示任务执行的是一个外部程序,比如说操作系统命令。
  ?CHAIN :表示任务执行的是一个CHAIN。
  ?JOB_ACTION :任务执行的操作,必选值,应与JOB_TYPE类型中指定的参数相匹配。比如说对于PL/SQL匿名块,此处就可以放置PL/SQL块的具体代表,类似DECLARE .. BEGIN ..END这类;如果是ORACLE过程,那么此处应该指定具体的过程名,注意由于任务执行,即使过程中有OUT之类参数,实际执行时也不会有输出的。
  ?START_DATE :指定任务初次执行的时间,本参数可为空,当为空时,表示任务立刻执行,效果等同于指定该参数值为SYSDATE。
  ?REPEAT_INTERVAL :指定任务执行的频率,比如多长时间会被触发再次执行。本参数也可以为空,如果为空的话,就表示当前设定的任务只执行一次。 REPEAT_INTERVAL参数需要好好说说,REPEAT_INTERVAL

dbms_scheduler介绍

10g引入的这个dbms_scheduler包,替代了之前的dbms_job包,该包功能更强大,可以将job需要的各种资源分开再进行组合。

1.program
1.1 create_program
参数说明:
  program_name——
程序名称
  program_type——
程序类型(STORED_PROCEDUREPLSQL_BLOCKEXECUTABLE
      STORED_PROCEDURE——ORACLE
中定义好的存储过程
      PLSQL_BLOCK——
是一段标准的pl/sql代码
      EXECUTABLE——
指定外部命令的命令行信息(含路径信息)
  program_action——
具体对应的执行内容,若为过程则为过程名
  enable——
若为true则创建后激活反之不激活
  comments——
注释
例子:
BEGIN
   dbms_scheduler.create_program(program_name       => 'myprogram',
                                program_type        => 'STORED_PROCEDURE',
                                program_action      => 'p_test1',
                                number_of_arguments => 1,
                                enabled            => FALSE,
                                comments           => '
更新gi_pipe');
   
END;
注:如果创建的程序需要输入参数,则必须定义完参数后在激活,即创建这个program时将enable设为false,否则提示:
    Ora-27456
:程序“ ”的参数并未全部定义;然后再对该program定义参数即执行define_program_argument过程(见1.3)。

--
查看定义的program
SELECT * FROM user_scheduler_programs;

1.2 drop_program
参数说明:
program_name——
要删除的程序名称
force——true
或者false。如果为true则不管该program是否被job引用都会删除,FALSE则若被引用无法删除,默认为false
例子:
BEGIN
   dbms_scheduler.drop_program(program_name => 'myprogram',force=> TRUE);
END;

1.3 define_program_argument
参数说明:
program_name——
程序名称
argument_position——
参数位置(也可以知道参数名称选择argument_name
argument_type——
参数类型
default_value——
参数默认值

例子:
BEGIN
  dbms_scheduler.define_program_argument(program_name     => 'myprogram',
                                         argument_position => 1,
                                         argument_name     => 'p_lttid',
                                         argument_type     => 'varchar2',
                                         default_value     => 'daaa');
END;

--
查看定义的program参数    
SELECT *FROM User_Scheduler_Program_Args;

1.4 define_anydata_argument(用于定义输入参数为复杂类型需采用sys.AnyData类型来包装的参数)
参数说明:
program_name——
程序名称
argument_position——
参数位置(也可以知道参数名称选择argument_name
argument_type——
参数类型为sys.AnyData
default_value——
参数默认值


1.5 define_metadata_argument
有效的metadata attributes: 'job_name','job_subname', 'job_owner', 'job_start', 'window_start', 
                            'window_end', and 'event_message'.
MetadataAttribute             Data Type                             Description 
job_name                       VARCHAR2                              
当前执行的job名称
job_subname                    VARCHAR2                              
当前执行的job子名称
job_owner                      VARCHAR2                              
当前执行的job所有者 
job_start                  TIMESTAMP WITH TIMEZONE                  job
启动的时间
window_start               TIMESTAMP WITH TIMEZONE                  window
打开的时间
window_end                 TIMESTAMP WITH TIME ZONE                  window
关闭的时间
event_message                                                         
事件触发job启动的信息

例子:(以下metadata_attribute设置为job_name,即以job_start这个值作为输入参数)
BEGIN
  dbms_scheduler.define_metadata_argument(program_name      => 'myprogram',
                                          argument_position  => 1,
                                          argument_name      => 'p_lttid',
                                          metadata_attribute => 'job_start');
END;
                                         

1.6 drop_program_argument
例子:
BEGIN
  dbms_scheduler.drop_program_argument(program_name     => 'myprogram',
                                       argument_position => 1);
END;

2.schedule
2.1 create_schedule
参数说明:
repeat_interval——
运行频率
end_date
comments默认可以不填
例子:
BEGIN
   dbms_scheduler.create_schedule(schedule_name   =>'myscheduler',
                                 repeat_interval => 'FREQ=MINUTELY;INTERVAL=2');
END;


2.2 create_event_schedule
创建基于事件的调度,用于当一个特殊事件被抛出时启动一个job
Event
类型    描述 
job_started   job
启动
job_succeeded job
启动成功
job_failed    job
失败
job_broken   
被禁止或状态改为broken 
job_completed job
执行完成即完成了限制的最大执行次数或者到达执行指定的结束时间
job_stopped  
停止job
job_sch_lim_reached
达到了scheduler的限制设置的值
job_disabled   
禁止job
job_chain_stalled  A job running a chain was put into the CHAIN_STALLEDstate. A running chain becomes 
                  stalled if there are no steps running or scheduled to run and the chainevaluation_interval is set to NULL. 
                  No progress will be made in the chain unless there is manual intervention.
job_all_events Not an event, but a constant that provides an easy way for youto enable all events
job_run_completed job
执行或者失败或者成功或者被停止

参数:
event_condition——tab.user_data
queue_spec——
必须先创建一个queuedbms_aqadm.create_queue

--
摘至http://www.233.com/oracle/zhonghe/20080807/104612630.html
BEGIN
  dbms_scheduler.create_event_schedule(schedule_name      => 'acc_mgr_change',
                                       start_date        => systimestamp,
                                       event_condition => 'tab.user_data.event_name = ''acc_mgr_change''',
                                       queue_spec      => 'proc_queue');
end;


2.3 drop_schedule
例子:
BEGIN
  DBMS_SCHEDULER.drop_schedule(schedule_name => 'myscheduler');
END;

3.job
3.1 create_job
参数说明:
job_type
:类同上述创建program
job_class DEFAULT 'DEFAULT_JOB_CLASS'
enabled  
默认FALSE,其创建后要想执行该job必须先执行enable过程
auto_drop
默认TRUE,即当job执行完毕都到期是否直接删除job
comments 
默认NULL
job_style
默认REGULAR
credential_name
默认 NULL
destination_name
默认 NULL

--
不采用programscheduler直接创建job
BEGIN
  dbms_scheduler.create_job(job_name       => 'myjob',
                            job_type        => 'STORED_PROCEDURE',
                            job_action      => 'p_test1',
                            start_date      => '',
                            repeat_interval => 'FREQ=DAILY;INTERVAL=2',
                            enabled         => TRUE,
                            comments        => 'My new job');
END;

--
根据programscheduler创建job
BEGIN
   dbms_scheduler.create_job(job_name     => 'myjob',
                            program_name  => 'myprogram',
                            schedule_name => 'myscheduler');
END;

3.2 run_job
BEGIN
   dbms_scheduler.run_job(job_name => 'myjob2');
END;


3.3 stop_job
BEGIN dbms_scheduler.stop_job(job_name => 'myjob');END;

3.4 copy_job
BEGIN dbms_scheduler.copy_job(old_job =>'myjob' ,new_job =>'myjob2');END;

3.5 drop_job
BEGIN dbms_scheduler.drop_job(job_name => 'myjob');END;

3.6 set_job_argument_value
设置job的输入参数值,设置后会覆盖原先定义该参数设置的默认值
BEGIN
  dbms_scheduler.set_job_argument_value(job_name         => 'myjob2',
                                        argument_position => 1,
                                        argument_value    => 'qwerer');
END;

3.7 set_job_anydata_value
方法类似3.6,只是设置的参数值类似是sys.anydata

3.8 reset_job_argument_value
重置job参数值,将其置为空

4.group11g才有的)
4.1 create_group
参数:
group_type——
组类型,该组的所有成员必须是同一类型,已有的类型有三种:
            DB_DEST
:即成员为目标数据库,执行远程数据库的job
           EXTERNAL_DEST
External destination):Members are external destinations, for running remote external jobs
            WINDOW
Members are Scheduler windows
创建时可以指定成员也可不指定,添加成员通过add_group_member过程添加。
BEGIN
   dbms_scheduler.create_group(group_name =>,
                              group_type =>,
                              MEMBER     =>,
                              comments   =>);
END;

4.2 drop_group
删除组

4.3 add_group_member
为组添加成员

4.4 remove_group_member
移除组成员

4.5 create_database_destination
创建目标数据库,用于执行远程job
AGENT——The external destination name of the Scheduler agent to connect.Equivalent to an agent name.
       The external destination must alreadyexist. The external destination representing an agent is 
       created automatically on a databaseinstance when the agent registers with that instance.
       An agent‘s name is specified in its agentconfiguration file. If it is not specified, it defaults
       to the first part (before the firstperiod) of the name of the host it resides on.

DBMS_SCHEDULER.CREATE_DATABASE_DESTINATION (
   destination_name        INVARCHAR2,--
目标数据库名称
  agent                  IN VARCHAR2,--
代理名称,事先创建好的
  tns_name               IN VARCHAR2,--tns
名称
  comments               IN VARCHAR2 DEFAULT NULL);


4.6 drop_database_destination
4.7 drop_agent_destination

5.jobclass
    Job Classes
相当于创建了一个job组,DBA可以将那些具有相同特性的job,放到相同的Job Classes中,
然后通过对Job Class应用ORACLE中的"资源使用计划"特性,就可以对这些job执行过程中所需要的资源分配情况进行
管理。
5.1 create_job_class
参数:
resource_consumer_group——
指定该jobclass所使用的资源分配方式。具体创建方法见dbms_resource_manager.create_consumer_group
                        jobclass
resource_consumer_group为多对1关系;
                        
若为该jobclass指定的resource_consumer_group被删除,则使用默认的resource_consumer_group
                        
若没为jobclass指定具体的resource_consumer_group,则使用默认的resource_consumer_group
                        
若为该jobclass指定的resource_consumer_group不存在,则会提示错误;
                        
若为该jobclass指定了resource_consumer_group,则service参数必须设置为空(即这两个参数只能设置其中一个)。

service——
一般用于rac环境指定jobclass运行于哪个节点。

logging_level——
日志记录级别(DBMS_SCHEDULER.LOGGING_OFFDBMS_SCHEDULER.LOGGING_RUNSDBMS_SCHEDULER.LOGGING_FULL
log_history——
日志存放时间,默认30
例子:
BEGIN
  dbms_scheduler.create_job_class(job_class_name         =>,
                                  resource_consumer_group =>,
                                  service                =>,
                                  logging_level          =>,
                                  log_history            =>,
                                  comments               =>);
END;


5.2 drop_job_class
--
删除多个job class用逗号隔开
BEGIN
   dbms_scheduler.drop_job_class(job_class_name => '');
END;

6.window
  
通常job启动后,用户只能被动地等待其执行,一直到其执行地任务完成(DBA手动kill对应进程),在此期间,
执行的job将与其它活动的进程共同竞争当前系统中的资源。在9i之前就是这样。在Job Classes中也可以控制job能够
使用的资源,不过单单使用Job Classes并不能灵活的控制job在合适的时间使用适当的资源。进入10g之后,采用
dbms_scheduler
WINDOW可以缓解该问题。WINDOW可以指定一个时间窗口,在此期间,通过与Job Classes的搭配组合,
能够有效控制job执行时支配(使用)的资源。比如说job通常是在凌晨服务器负载较低时执行,那么就可以通过WINDOW
设置在此期间,允许jobs使用更多的系统资源,而到了工作时间后,如果job仍未执行完成,为其分配另一个有限的
资源,以尽可能降低job执行占用的资源对其它业务的影响。

6.1 create_window
参数:
resource_plan——
资源计划,即通过 dbms_resource_manager.create_plan来创建。
schedule_name——
调度名称,基于已经创建好的调度创建window
duration——
时间窗口打开后持续的时间,创建时必须设置该值,因为没有默认值,设置范围从1分钟到99天。
window_priority——window
优先级,如果同一时间出现多个window时则根据优先级决定执行哪个。
--
创建一个基于调度的window
BEGIN
   dbms_scheduler.create_window(window_name    =>,
                               resource_plan   =>,
                               schedule_name   =>,
                               duration        =>,
                               window_priority =>,
                               comments        =>);
END;

--
不基于时间调度创建window
DBMS_SCHEDULER.CREATE_WINDOW (
  window_name            IN VARCHAR2,
  resource_plan           INVARCHAR2,
  start_date             IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,
   repeat_interval         INVARCHAR2,
  end_date               IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,
  duration               IN INTERVAL DAY TO SECOND,
   window_priority         INVARCHAR2                DEFAULT 'LOW',
  comments               INVARCHAR2                DEFAULT NULL);

6.2 drop_window
删除一个window

6.3 open_window
打开一个window

6.4 close_window
关闭一个window


7.windowgroup
   
一个WINDOW GROUP可能包含多个WINDOW。使用WINDOW GROUP的本意是这样的,假如说某个job执行的时间比较长,
甚至全天24小时都在执行,对于这类job,单个WINDOW很难有效调整其资源占用,因此就可以通过设置一个
WINDOW GROUP
,该WINDOW GROUP中包含了多个WINDOW,每个WINDOW分别负责不同时间点时的资源使用计划。然后在
创建JOB时,指定schedule_name参数为WINDOW GROUP的名称,当然也可以直接指定window名称
window已经包含了调度信息了)。

7.1 create_window_group
BEGIN
   dbms_scheduler.create_window_group(group_name  =>,
                                     window_list =>,
                                     comments    =>);
END;

7.2 add_window_group_member
增加一个window
BEGIN
   dbms_scheduler.add_window_group_member(group_name =>,window_list => );
END;

7.3 remove_window_group_member
移除一个window

7.4 drop_window_group
删除一个window


8.chain 参考http://hi.baidu.com/sqlnever/item/be05b1abba1611fc15329b86
    CHAIN
可以被视做多个program放到同一个链中,这样的话就可以指定这些program执行的先后顺序。
8.1 create_chain
DBMS_SCHEDULER.CREATE_CHAIN (
   chain_name             IN VARCHAR2,
  rule_set_name           INVARCHAR2 DEFAULT NULL,
   evaluation_interval     IN INTERVAL DAY TOSECOND DEFAULT NULL,
  comments               IN VARCHAR2 DEFAULT NULL);


8.2 define_chain_rule
定义规则
举例,如my_step1执行完则执行my_step2,若my_step2执行完则结束
BEGIN
   dbms_scheduler.define_chain_rule(chain_name => 'my_chain1',
                                   condition  => 'TRUE',
                                   action     => 'start my_step1',
                                   rule_name  => 'my_rule1');
   dbms_scheduler.define_chain_rule(chain_name => 'my_chain1',
                                   condition  => 'my_step1 completed',
                                   action     => 'start my_step2',
                                   rule_name  => 'my_rule2');
   dbms_scheduler.define_chain_rule(chain_name => 'my_chain1',
                                   condition  => 'my_step2 completed',
                                   action     => 'end 0',
                                   rule_name  => 'my_rule3');
END;

8.3 define_chain_step
 BEGIN
    dbms_scheduler.define_chain_step(chain_name  => 'my_chain1',
                                    step_name    => 'my_step1',
                                    program_name => 'p_p2');
    dbms_scheduler.define_chain_step(chain_name  => 'my_chain1',
                                    step_name    => 'my_step2',
                                    program_name => 'p_p3');
 END;

8.4 define_chain_event_step
BEGIN
   dbms_scheduler.define_chain_event_step(chain_name         =>,
                                         step_name           =>,
                                         event_schedule_name =>,
                                         timeout            =>);
END;

8.5 drop_chain_rule
dbms_scheduler.drop_chain_rule(chain_name => ,rule_name => );

8.6 drop_chain_step
dbms_scheduler.drop_chain_step(chain_name => ,step_name => );

8.7 alter_chain
dbms_scheduler.alter_chain(chain_name => ,step_name => ,attribute => ,value=> );

8.8 drop_chain

8.9 analyze_chain
dbms_scheduler.analyze_chain(chain_name => ,rules => ,steps =>,step_pairs => );

8.10 alter_running_chain
dbms_scheduler.alter_running_chain(job_name => ,step_name => ,attribute=> ,value => );

8.11 evaluate_running_chain
dbms_scheduler.evaluate_running_chain(job_name => );

8.12 run_chain
dbms_scheduler.run_chain(chain_name => ,start_steps => ,job_name => );


9.credential
创建用户名密码,用于认证job执行
9.1 create_credential
BEGIN
   dbms_scheduler.create_credential(credential_name =>,
                                   username        =>,
                                   password        =>,
                                   database_role   =>,
                                   windows_domain  =>,
                                   comments        =>);
END;

9.2 drop_credential
9.3 put_file
BEGIN
  dbms_scheduler.put_file(destination_file       =>,
                          destination_host        =>,
                          credential_name         =>,
                          file_contents          =>,
                          destination_permissions =>);
END;

9.4 get_file
9.5 create_file_watcher
BEGIN
  dbms_scheduler.create_file_watcher(file_watcher_name    =>,
                                     directory_path        =>,
                                     file_name            =>,
                                     credential_name       =>,
                                     destination           =>,
                                     min_file_size         =>,
                                     steady_state_duration =>,
                                     comments             =>,
                                     enabled              =>);
END;

9.6 drop_file_watcher
9.7 add_job_email_notification
BEGIN
  dbms_scheduler.add_job_email_notification(job_name        =>,
                                            recipients       =>,
                                            sender           =>,
                                            subject          =>,
                                            BODY            =>,
                                            events           =>,
                                            filter_condition =>);
END;

9.8 remove_job_email_notification

10.通用的
10.1 DISABLE
BEGIN
   dbms_scheduler.disable(NAME => 'myjob2');
END;

10.2 enable
BEGIN
   dbms_scheduler.enable(NAME => 'myprogram');
END;

BEGIN
   dbms_scheduler.enable(NAME => 'myjob2');
END;

10.3 set_attribute
attribute
:是指设置job的属性,属性有:
logging_level——
记录的日志信息,有三个值(DBMS_SCHEDULER.LOGGING_OFFDBMS_SCHEDULER.LOGGING_RUNS
                                        DBMS_SCHEDULER.LOGGING_FULL

restartable——
设置job失败是否要重启
max_failures——
允许job失败的次数,范围11000000,默认为空。
max_runs——job
执行的最大次数,范围11000000,默认为空(即意味着job会重复执行,或者到达job执行的end_date,或者达到指定失败的次数)。
         
一旦达到设置的最大值,job将会disable并且状态变更为COMPLETED 
max_run_duration——
设置job运行的有效时间,如果设置了某个值,则在到达该值时调度会报JOB_OVER_MAX_DUR事件,
                 
然后由事件处理器决定是否要继续
instance_stickiness——
只用于rac数据库。默认为true,设置为true,则job会运行在负载最轻的节点上;如果某节点
                    
关闭或负载太重,则不会启动新job,而是有另一个节点来执行该job
stop_on_window_close——window
关闭的时候停止job,默认为false。因此默认情况下关闭了windowjob还是会继续执行,
                     
但是要注意,window关闭则意味着资源使用计划就会变化。 
job_priority——
在同一个classjob执行的优先级,默认为3.
schedule_limit——
允许启动job延迟的时间,设置值从1分钟到99天。超过了延迟的时间则不再启动job。如果不设置
               
该值,则只要得到允许所需的资源就会启动。另外,在延迟的这段时间里,job的执行次数或失败次数
               
会跳过,不计算这段时间的。
program_name——job
执行的对象。如果设置了该属性,则job_action,job_typenumber_of_arguments要设置为空。
job_action——job
执行对象内容
job_type——job
执行对象类型('PLSQL_BLOCK', 'STORED_PROCEDURE','EXECUTABLE', and 'CHAIN')。如果设置了该值,
         
那么program_name参数必须设置为空
number_of_arguments——
参数个数。如果设置了该值,那么program_name参数必须设置为空。 
schedule_name——
调度名,如果设置了该值,则end_date,start_date and repeat_interval需设置为空。
repeat_interval——
执行间隔,设置了该值,则schedule_name需为空。
start_date——
执行开始时间,设置了该值,则schedule_name需为空。
end_date——
不再执行job的时间,设置了该值,则schedule_name需为空。
job_class——jobclass
comments——
备注
auto_drop——
job状态为completed则自动删除该job
event_spec——
需含两个值(event conditionqueue specification
raise_events——
设置当job为什么状态时抛出,具体的时间类型见event类型。
 
--
设置log_history90天,默认30
BEGIN
   dbms_scheduler.set_scheduler_attribute('log_history', '90');
END;

10.4 set_attribute_null
10.5 get_attribute


11.schedulerattribute
设置调度属性的值
11.1 set_scheduler_attribute
attribute
类型有:default_timezoneemail_serveremail_senderemail_server_credentialemail_server_encryption
               event_expiry_time
log_historymax_job_slave_processes(没使用)

BEGIN
   dbms_scheduler.set_scheduler_attribute(attribute => ,value=> );
END;


11.2 get_scheduler_attribute
BEGIN
   dbms_scheduler.get_scheduler_attribute(attribute => ,value=> );
END;

11.3 add_event_queue_subscriber
BEGIN
   dbms_scheduler.add_event_queue_subscriber(subscriber_name => );
END;

11.4 remove_event_queue_subscriber
BEGIN
   dbms_scheduler.remove_event_queue_subscriber(subscriber_name =>);
END;
11.5 purge_log
BEGIN
   dbms_scheduler.purge_log(log_history => ,which_log =>,job_name => );
END;


dbms_scheduler
包一些视图
--*
代表alldbauser
--1.
查看job的视图
*_scheduler_jobs --
查看job
*_scheduler_job_args  --
查看job的所有输入参数
*_scheduler_job_classes --
查看job的类信息
*_scheduler_job_dests --
查看job状态
*_scheduler_job_log --
查看job日志
*_scheduler_job_run_details --
查看job执行的详细信息
all_scheduler_running_jobs

--2.
查看chain的一些视图
*_scheduler_chains 
*_scheduler_chain_rules
*_scheduler_chain_steps
*_scheduler_running_chains --
查看正在执行的chains

--3.
查看program的视图
*_scheduler_programs --
查看程序
*_scheduler_program_args --
查看程序参数

--4.
查看调度组信息 
*_scheduler_groups
*_scheduler_group_members

--5.
查看window的视图(这类视图只有dbaall开头的)
*_scheduler_windows --
查看window
*_scheduler_window_details --
查看window详细信息
*_scheduler_window_groups --
查看window
*_scheduler_window_log --
查看window日志
*_scheduler_wingroup_members ----
查看window成员

--6.
查看scheduler视图
*_scheduler_schedules --
查看调度
*_scheduler_global_attribute --
显示所有的调度属性
*_scheduler_credentials
*_scheduler_db_dests
*_scheduler_dests
*_scheduler_external_dests
*_scheduler_file_watchers
*_scheduler_notifications
*_scheduler_remote_databases
*_scheduler_remote_jobstate

 

 

 

修改属性:

begin

dbms_scheduler.set_attribute( name =>'DEV_KTB_BONUS.JOB_MARKETER_MCHT_TXN_DAY',attribute => 'repeat_interval', value => 'FREQ=DAILY;BYHOUR=15;ByMinute=44;BYSECOND=0');

end;

 

 

begin

dbms_scheduler.set_attribute( name => 'IBOX_KTBONUS.JOB_MARKETER_TEAM_RACE_HOUR',attribute => 'end_date', value=> to_date('15-09-2017 00:30:00','dd-mm-yyyy hh24:mi:ss'));

end;

 

--启动job

begin

DBMS_SCHEDULER.ENABLE('IBOX_KTBONUS.JOB_MARKETER_TEAM_RACE_HOUR');

end;

 

修改属性:

begin

dbms_scheduler.set_attribute( name =>'DEV_KTB_BONUS.JOB_MARKETER_MCHT_TXN_DAY',attribute => 'repeat_interval',value => 'FREQ=DAILY;BYHOUR=15;ByMinute=44;BYSECOND=0');

end;