`

摘录--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 .
分享到:
评论
1 楼 严东军 2011-02-23  
学习了,谢谢

相关推荐

    DBMS_XMLDOM DBMS_XMLPARSER DBMS_XMLQUERY 文档

    Oracle数据库系统提供了强大的XML处理能力,这主要体现在其内置的几个PL/SQL包上,如DBMS_XMLDOM、DBMS_XMLPARSER和DBMS_XMLQUERY。这些包为开发者提供了处理XML文档的一整套工具,使得在数据库环境中进行XML数据的...

    Re-post: DBMS_XPLAN : Display Oracle Execution Plans

    标题“DBMS_XPLAN: 显示Oracle执行计划”是一个关于Oracle数据库系统中用于分析SQL查询执行性能的重要工具的讨论。这个工具允许用户查看SQL语句的执行计划,从而理解数据库如何处理这些语句,以及哪些操作可能影响...

    ORACLE SYS.DBMS_REGISTRY_SYS has errors

    标题中的问题“ORACLE SYS.DBMS_REGISTRY_SYS has errors”指的是在Oracle数据库系统中,系统包BODY `SYS.DBMS_REGISTRY_SYS` 出现错误,导致了一系列的PL/SQL调用失败。这种错误通常与数据库的元数据注册功能有关,...

    DBMS_STATS.GATHER_TABLE_STATS详解.pdf

    ### DBMS_STATS.GATHER_TABLE_STATS详解 #### 一、概述 `DBMS_STATS.GATHER_TABLE_STATS` 是 Oracle 数据库中的一个重要过程,主要用于收集表、列和索引的统计信息,这些统计信息对于优化器选择合适的执行计划至关...

    unixODBC-2.2.11-7.1-i386_x64.zip

    UnixODBC(Open Database Connectivity for Unix)是一个开源的数据库连接器,它为各种数据库管理系统(DBMS)提供了一个统一的接口,使得应用程序可以在Unix、Linux以及macOS等操作系统上与不同的数据库进行交互。...

    oracle dbms_lob

    Oracle数据库系统中,`DBMS_LOB`是一个重要的PL/SQL包,专门用于处理大型对象(LOBs,Large Object)。LOBs是Oracle提供的一种数据类型,用于存储大量数据,如文本、图像、音频或视频文件等。这个包包含了各种过程和...

    DBMS_SQL的使用

    ### Oracle DBMS_SQL 使用详解 #### 一、概述 在Oracle数据库中,`DBMS_SQL`包是一个功能强大的工具,用于执行动态SQL语句。它提供了处理动态SQL语句的能力,使得开发人员能够灵活地构建和执行SQL语句,而不需要...

    使用dbms_stats包手工收集统计信息

    Oracle 数据库中使用 dbms_stats 包手动收集统计信息 在 Oracle 数据库中,dbms_stats 包提供了一种手动收集统计信息的方式,包括基于表、用户和索引的统计信息。通过使用 dbms_stats 包,我们可以手动收集统计信息...

    dbms_obfuscation_toolkit加密解密数据

    ### DBMS_OBFUSCATION_TOOLKIT:Oracle 数据库中的加密与解密工具包 DBMS_OBFUSCATION_TOOLKIT是Oracle数据库提供的一种用于数据加密解密的强大工具包,自Oracle 8i版本开始引入。它支持多种加密算法,如DES、...

    怎样禁用及回收java的授权dbms_java

    ### 如何禁用及回收Java的授权:dbms_java 授权管理详解 #### 一、引言 在Oracle数据库环境中,`dbms_java`包提供了一系列功能强大的工具,用于管理和控制Java应用程序的安全性。这对于那些在Oracle环境中部署了...

    dbms- III.rar_dbms_successfulpqn

    在“dbms-III.rar_dbms_successfulpqn”这个压缩包中,我们重点关注的是第三部分的DBMS内容,特别是与成功实践相关的知识点。其中包含的“dbms-III.pdf”文件很可能是详细阐述这些主题的文档。 数据库管理系统的...

    DBMS_RANDOM.VALUE OR DBMS_RANDOM.STRING

    在Oracle数据库系统中,`DBMS_RANDOM`是一个非常实用的包,它提供了生成随机数和随机字符串的功能。这个包在各种场景下都有广泛的应用,比如在测试数据的生成、模拟随机行为或者创建伪随机数据时。我们将深入探讨`...

    在将DBMS_JOB迁移到DBMS_SCHEDULER时,将Interval值转换为日历日历

    在Oracle数据库管理中,DBMS_JOB和DBMS_SCHEDULER是两个重要的后台进程管理包,用于计划和执行数据库任务。DBMS_JOB是较早的版本,而DBMS_SCHEDULER是其现代替代品,提供了更丰富的功能和灵活性。在从DBMS_JOB迁移到...

    javax.activation.UnsupportedDataTypeException: no object DCH for MIME type

    在Oracle 11.2.0.4中调用 javax.mail 发送邮件时...EXEC dbms_java.grant_permission( '<your_schema_please_change>','SYS:java.lang.RuntimePermission', 'setContextClassLoader', '' ); 第二步:解决方案看文档中。

    PostgreSQL_DBMS_for_Windows_922_136133.exe

    支持ArcGIS10.2版本的PostgreSQL_DBMS_for_windows_922,ESRI官方原版资源。

    DBMS_SQL.rar_dbms_oracle

    在Oracle数据库系统中,DBMS_SQL是一个非常重要的包,它提供了动态执行SQL语句的功能,这对于开发复杂的数据库应用或者需要在运行时构建SQL语句的情况非常有用。DBMS_SQL允许我们处理那些在编译时未知的SQL语句,极...

    Oracle统计分析-dbms_stats.pdf

    Oracle 统计分析-dbms_stats.pdf Oracle 中的统计分析对于数据库的性能至关重要。dbms_stats 是 Oracle 提供的一个统计分析工具,能够良好地估计统计数据,特别是针对较大的分区表,并且能获得更好的统计结果,最终...

    dbms_lock控制串行详解

    DBMS_LOCK是Oracle数据库系统中的一个内置包,用于在用户会话之间实现锁的管理,以确保并发操作的安全性和数据一致性。这篇博文深入探讨了DBMS_LOCK的功能、使用方法以及在实际应用中的重要性。 首先,我们要理解...

    数据库原理课程设计-数据库管理系统_A-DBMS.zip

    数据库原理课程设计-数据库管理系统_A-DBMS

Global site tag (gtag.js) - Google Analytics