ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle数据库 Scheduler学习(部分)

Oracle数据库 Scheduler学习(部分)

原创 Linux操作系统 作者:dnd_lishangyun 时间:2010-12-06 20:22:51 0 删除 编辑

Oracle数据库 Scheduler学习(部分)

这个属于三思写的“全面学习 ORACLE  数据库 SCHEDULER 特性”的读书笔记。

首先Scheduler里面有很多东西,Job、Programs、scheduler、Events、Chains、Job Classess、Windows,关于这些东西各个的作用我的理解也不是很深。但是三思这里有句话:10G版本中SCHEDULER将job(针对9i以前)分成了多个部分,Programs负责做什么、scheduler负责什么时候做、job就是做。

其实根据我的理解SCHEDULER中的job也可以控制做什么和什么时候做,可能为了要结构更清晰,所以又分成了三部分。

至于Events(事件)我理解有点像触发消息。

Chains是一组Programs的组合,这一组Programs的组合相互之间会构成逻辑关系。

Job Classess相当于创建一个job组,DBA可以将那些具有相同特性的job,统统放到相同的Job Classess中,然后通过对Job Class应用ORACLE中的“资源使用计划”特性。

Windows可以指定一个时间窗口,在此期间,通过与Job Classes的搭配组合,能够有效的控制job执行时支配(使用)的资源。

这里废话两句什么是函数、过程、程序包、程序包体

       a、程序包:程序包是由逻辑上相关的一些过程和函数组成的集合。程序包的这一部分又称为说明,用于描述应用程序的接口;它声明了可供使用的类型、变量、常量、 异常错误、游标和子程序(其实就是申明有哪些函数和过程)

    b、程序包体:程序包体完整地定义了游标和子程序,因此实施了说明。程序包体包含实施明细和专用声明,这些内容不显示给调用方。(其实就是具体的代码)

    c、类型主体:类型主体是由与用户定义的数据类型相关联的一些方法(过程和函数)组成的集合。

    d、过程:过程是用于执行特定操作的PL/SQL 块。

    e、函数:函数是使用RETURN PL/SQL 命令返回单个值的 PL/SQL 块。它是具有返回值的过程。

    f、触发器:触发器是当数据库中发生特定事件时执行的 PL/SQL 块。这些事件可以基于表,如在表中插入行时。也可以是数据库事件,如在用户登录数据库时。

使用Jobs

先写一个

BEGIN

DBMS_SCHEDULER.CREATE_JOB(

       Job_name => ‘INSERT_TEST_TBL’,

       Job_type => ‘STORED_PROCEDURE’,

       Job_action=> ‘P_INSERTINTOTEXT’.

       Start_date=> sysdate,

       Repeat_interval=> ‘ FREQ=DAILY;INTERVAL=1’);

END;

/

各位看job里面是可以定义执行时间的。这里唯一和programe有联系的就是Job_action,语法我就在这不解释了。

需要注意的是这是SCHEDULER创建的job,所以你在USER_JOBS视图中是无法找到的,必须要在DBA_SCHEDULER_JOBS里才能查到。

还有,大家要注意SCHEDULER创建的job虽然创建成功了但是却没有执行,是因为你还有DBMS_SCHEDULER. ENABLE(‘INSERT_TEST_TBL’)

执行job

Exec DBMS_SCHEDULER.RUN_JOB

停止job

Exec DBMS_SCHEDULER.STOP_JOB

使用PROGRAMS

BEGIN

DBMS_SCHEDULER.CREATE_PROGRAM(

       Program_name => ‘my_program1’,

       Program_action => ‘/bin/date’,

       Program_type => ‘EXECUTABLE’,

       Enabled => ture);

END;

/

这里我们看到PROGRAM强调的是做什么,他和JOB一样也有个action和type并且它的种类并没有JOB多,只有PLSQL_BLOCK,STORED_PROCEDURE和外部命令。

PROGRAM和JOB不同的是,JOB是定义好的,定时执行的任务。而PROGRAM是定义好的,等待被执行的对象。

 

 

 

使用SCHEDULER

SCHEDULER就是定义什么时候做,他来控制任务的执行的时间,周期和频率。

查看一下dbms_scheduler.create_schedule的结构

SQL> desc dbms_scheduler.create_schedule;

Parameter       Type                     Mode Default?

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

SCHEDULE_NAME   VARCHAR2                 IN           

START_DATE      TIMESTAMP WITH TIME ZONE IN   Y       

REPEAT_INTERVAL VARCHAR2                 IN           

END_DATE        TIMESTAMP WITH TIME ZONE IN   Y       

COMMENTS        VARCHAR2                 IN   Y       

SCHEDULE_NAME 名字

START_DATE 开始的时间,为空表示该scheduler暂不起作用

REPEAT_INTERVAL 执行周期

END_DATE 结束时间,为空表示不会停止,将一直执行

 

创建一个scheduler

BEGIN

DBMS_SCHEDULER.CREATE_SCHEDULE(

       schedule_name => ‘my_schedule1’,

       Start _date => SYSDATE,

       Repart _interval => ‘FREQ=WEEKLY,;INTERVAL=1’,

       Comments => ‘EVERY WEEK PER ONCE’);

END;

/

 

好现在我们把这JOB,PROGRAME,SEHEDULE连起来做,体现Programs负责做什么、scheduler负责什么时候做、job就是做

 

 

 

 

BEGIN

      dbms_scheduler.create_program(

      program_name => 'my_program1',

       program_type => 'EXECUTABLE',

       program_action => '/bin/date',enabled => TRUE);

      END;

/

 

BEGIN

       dbms_scheduler.create_schedule(

       schedule_name  => 'my_schedule1' ,

       start_date => SYSDATE ,

       repeat_interval => 'freq=weekly;interval=1',

       comments => 'every week per once');

END;

/

 

BEGIN

DBMS_SCHEDULER.CREATE_JOB(

       Job_name => ‘INSERT_TEST_TBL’,

       programe_name => ‘my_program1’.

       schedule_name  => 'my_schedule1' ,

       Enabled => ture);

END;

/

好了查看一下

SQL> select * from user_scheduler_job_run_details WHERE JOB_NAME ='MY_JOB1';

 

    LOG_ID LOG_DATE                                                                         OWNER                          JOB_NAME                                                                         JOB_SUBNAME                                                                      STATUS                             ERROR# REQ_START_DATE                                                                   ACTUAL_START_DATE                                                                RUN_DURATION                            INSTANCE_ID SESSION_ID                     SLAVE_PID                      CPU_USED                                ADDITIONAL_INFO

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

      1032 01-12月-10 03.04.50.189092 上午 +08:00                                           SYS                            MY_JOB1                                                                                                                                                           SUCCEEDED                               0 01-12月-10 03.04.49.946770 上午 +08:00                                           01-12月-10 03.04.49.946673 上午 +08:00                                           +000 00:00:00                                     1 158,127                                                       +000 00:00:00.01                       

 

 

关于下面events,Chain什么的就先不说了,以后有时间在搞

                                                                                     2010-12-6 by 饼干

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23493401/viewspace-681028/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: ORACLE审计
请登录后发表评论 登录
全部评论

注册时间:2010-03-11

  • 博文量
    13
  • 访问量
    21036