`

oracle10 新功能DBMS_SCHEDULER 简介

阅读更多

 

Oracle 10g新增了scheduler的功能,功能比job强大的很多,Oracle官方也建议将job转移到scheduler 。 


先解释一下基础概念,scheduler 包含了以下几个实体对象 

Program -- 提供了scheduler 将要运行什么,包含program name,program type(PLSQL块、存储过程、外部程序),program action(具体的程序实体,比如说一个PLSQL块、或者是存储过程的名称、或者是外部程序的路径加名称) 。 


Schedules -- 指定何时何种频率来运行job,可以被不同的job重复的利用。比如说我有两个job都要求在每天的凌晨4点运行,那么两个job可以同时指定相同的schedule。 


Jobs -- 具体的作业的名称,依赖于那个program、schedule。也可以不指定program、schedule,而直接写入program、schedule的相应参数。 


Chains -- 把一组program像一个单独的实体连接在一起,作为一个对象。Job可以指向Chains代替单一的program 。这样就能完成类似如下功能:运行A,然后运行B,当A、B都运行成功则运行C,否则运行D。 


下面参考文档边看边做。 


  1.创建一张表  create table scheduler_test(id number,instime date); 

  2.创建一个存储过程,实现往表中插入资料。 


create or replace procedure p_insSysdate as 

   id number; 

begin 

   select count(*) into id from scheduler_test; 

   insert into scheduler_test values(id,sysdate); 

   commit; 

end; 

  3.创建一个schedule,这个仅仅是一个时间上的安排,由DBMS_SCHEDULER.CREATE_JOB调用。这样就可以重用schedule,并且schedule在时间的安排上强大与原先的JOB 。语法如下: 

BEGIN 

  SYS.DBMS_SCHEDULER.CREATE_SCHEDULE 

    ( 

      schedule_name    => 'SCOTT.EVERY_MINUTE' 

     ,start_date       => NULL 

     ,repeat_interval  => 'FREQ=MINUTELY' 

     ,end_date         => NULL 

     ,comments         => NULL 

    ); 

END; 


以下给出部分repeat_interval的写法实例,以供参考 

EVERY DAY                                                            'FREQ=DAILY;INTERVAL=1' 

EVERY MINUTE                                             'FREQ=MINUTELY;INTERVAL=1' 

EVERY 4 HOURS ON THE HOUR             'FREQ=HOURLY;INTERVAL=4;BYMINUTE=0;BYSECOND=0' 

1st DAY OF EVERY MONTH                        'FREQ=DAILY;BYMONTHDAY=1' 

WEEKDAYS AT 7am and 3pm                    'FREQ=DAILY; BYDAY=MON,TUE,WED,THU,FRI; BYHOUR=7,15; BYMINUTE=0;BYSECOND=0' 


   4.创建DBMS_SCHEDULER.CREATE_PROGRAM,指定运行什么样的程序。 


BEGIN 

  SYS.DBMS_SCHEDULER.CREATE_PROGRAM 

    ( 

      program_name         => 'SCOTT.PRG_INSSYSDATE' 

     ,program_type             => 'STORED_PROCEDURE' 

     ,program_action         => 'p_insSysdate' 

     ,number_of_arguments  => 0 

     ,enabled                       => TRUE 

     ,comments                   => NULL 

    ); 

END; 


program_type有三类 'PLSQL_BLOCK','STORED_PROCEDURE','EXECUTABLE'分别表示program_action为PLSQL块、存储过程、外部操作系统程序。number_of_arguments表需要传入的参数个数,至于参数如何传入,以后再来研究。 


5. 现在来创建一个JOB,并使用先前的schedule、program 。 


BEGIN 

  SYS.DBMS_SCHEDULER.CREATE_JOB 

    ( 

       job_name        => 'SCOTT.JOB_INSSYSDATE' 

      ,schedule_name   => 'SCOTT.EVERY_MINUTE' 

      ,program_name    => 'SCOTT.PRG_INSSYSDATE' 

      ,comments        => NULL 

    ); 

END; 


DBMS_SCHEDULER.CREATE_JOB中有一个参数auto_drop,如果设置成TRUE,job执行完成或者job变成disabled则job自动被删除。如下三种情况job被认为是completed 

1) Its end date (or its schedule's end date) has passed. 

2) It has runmax_runsnumber of times.max_runsmust be set withSET_ATTRIBUTE. 

3) It is not a repeating job and has run once. 


下面来查看一下 

select * from scheduler_test; 

        ID INSTIME 

---------- ------------ 

         0 14-AUG-08 

         1 14-AUG-08 

         2 14-AUG-08 


表中已经有内容,说明job已经运行起来了。 


如何让job停下来?分为两种情况:一种是停止正在运行的job, 

begin 

  dbms_scheduler.STOP_JOB('job_insSysdate'); 

end; 

会提示如下错误:ORA-27366 job 'scott.job_insSysdate' is not running . 

另一种是使job disabled, 

begin 

  dbms_scheduler.DISABLE('job_insSysdate'); 

end; 

可以通过查看job的状态,确认是否使job失效。 

select enabled,status from user_scheduler_jobs; 


dbms_scheduler.DISABLE 的name参数可以是program、schedule、job等对象。可以disabled的前提是该对象没有被其他的对象引用,比如job_insSysdate引用了prg_insSysdate,如果job_insSysdate为enabled,这时不能直接disabled prg_insSysdate . 





 

分享到:
评论

相关推荐

    Oracle系统包详细使用方法

    dbms_scheduler是另一个重要的调度工具,它可以替代dbms_job,提供更高级的作业调度和管理功能,支持复杂的作业计划和事件驱动的作业执行。 总的来说,Oracle系统包是数据库管理员和开发人员的强大工具集,涵盖了从...

    Oracle PL/SQL常用47个工具包

    8. **DBMS_SCHEDULER**: 更高级的任务调度器,取代了DBMS_JOB,提供了更多灵活性和功能,如重复频率、依赖关系等。 9. **DBMS_OUTPUT.PUT_LINE 和 DBMS_OUTPUT.GET_LINE**: 分别用于写入和读取调试信息。 10. **...

    图书:精通Oracle 11g数据库中的定时器

    1. **DBMS_SCHEDULER介绍**:DBMS_SCHEDULER是Oracle 11g引入的新的调度包,取代了旧的DBMS_JOB,提供了更灵活和安全的定时任务管理。它可以创建一次性或重复性的作业,支持多种执行模式,如PL/SQL程序、操作系统...

    oracle定时任务

    首先,Oracle数据库使用DBMS_SCHEDULER包来创建和管理这些定时任务。DBMS_SCHEDULER是一组存储过程和函数,用于创建、修改和控制数据库作业的执行。它取代了早期版本的DBMS_JOB,提供了更强大的功能和灵活性。 1. *...

    oracle定时任务.txt

    在Oracle 10g及以后版本中,推荐使用更强大的`DBMS_SCHEDULER`包来替代`DBMS_JOB`。`DBMS_SCHEDULER`提供了更灵活的调度选项,支持复杂的重复规则,并且具有更好的性能。 ##### 创建定时任务 ```sql BEGIN sys....

    oracle的job定时

    Oracle的Job定时器通过DBMS_SCHEDULER或旧的DBMS_JOB包来实现。 在Oracle中,创建一个Job主要涉及以下几个步骤: 1. **定义存储过程**:首先,我们需要编写一个存储过程来封装要定时执行的操作。例如,如果要每天...

    oracle job 例子

    DBMS_JOB 是早期版本 Oracle 提供的接口,而 DBMS_SCHEDULER 是从 Oracle 10g 开始引入的,功能更加强大且灵活。DBMS_SCHEDULER 包含了更多的调度选项,如重复频率、依赖性管理以及作业链等功能。 1. **创建 Oracle...

    oracle trigger at a certain time

    2. **DBMS_SCHEDULER**: 这是Oracle 10g引入的新版调度器,功能更强大且灵活。你可以创建一个程序(program)来封装你的PL/SQL逻辑,并通过调度器(scheduler)在特定时间执行。例如: ```sql -- 创建一个程序 ...

    oracle job创建脚本

    你可以使用`DBMS_JOB.INFO`查询Job的状态,或者使用`DBMS_SCHEDULER`包(在Oracle 10g及以后版本推荐)进行更高级的Job管理,包括查看Job日志、暂停、恢复和删除Job。 8. **注意事项**: - 修改`next_date`以适应...

    Oracle内置包的使用方法.rar

    8. **DBMS_SCHEDULER**: Oracle 10g及以后版本引入的更强大的调度器,替代了DBMS_JOB。它支持更复杂的调度策略,如周期性、依赖性和条件触发。`DBMS_SCHEDULER.CREATE_JOB`用于创建新作业,`DBMS_SCHEDULER.RUN_JOB`...

    【RAC】rac中如何指定job的运行实例.pdf

    自Oracle 10g版本起,引入了DBMS_SCHEDULER包,它相较于旧有的DBMS_JOB包拥有许多新的特性。DBMS_SCHEDULER不仅可以执行存储程序和匿名PL/SQL块,还能执行OS可执行文件、脚本(包括shell脚本)等。其程序单元作为...

    oracle job调度存储过程 触发器 定时更新数据库

    4. **启用作业**:创建并配置好作业后,你需要通过`DBMS_SCHEDULER.RUN_JOB`或`DBMS_SCHEDULER.enable`来启动或启用作业,使其能够按照预定的时间计划执行。 5. **监控和管理作业**:使用`DBA_JOBS`和`DBA_...

    Oracle内置包的使用方法

    DBMS_JOB更适合早期版本的Oracle,而DBMS_SCHEDULER则在新版本中提供了更高级的功能,如作业链和资源管理。 在事务控制方面,DBMS_TRANSACTION包可以帮助我们管理事务的局部和全局标识符,这对于跟踪和回滚特定事务...

    Oracle 10g JOB 相关调查修正

    4. **使用DBMS_SCHEDULER**:Oracle 10g引入了更先进的DBMS_SCHEDULER,提供了更多的调度选项和控制。考虑将旧的DBMS_JOB作业迁移到DBMS_SCHEDULER,以利用其增强的功能,如错误处理、依赖管理、资源计划等。 5. **...

    清华大学最新推出的---Oracle自动执行任务

    DBMS_SCHEDULER是Oracle 10g及以后版本推荐使用的模块,它提供了更高级的功能,如任务调度、任务依赖性、资源限制等。而DBMS_JOB则是较早版本的工具,虽然功能相对简单,但在许多环境中仍然被广泛使用。 首先,DBMS...

    ORACLE创建JOB脚本

    另外,Oracle 12c引入了新的调度器(DBMS_SCHEDULER),它提供了更高级的功能,如重复模式、依赖管理等,但DBMS_JOB仍然在旧版本的Oracle数据库中广泛使用。 总结起来,Oracle的JOB功能对于定期执行数据库维护任务...

Global site tag (gtag.js) - Google Analytics