温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Oracle Scheduler能实现哪些功能

发布时间:2021-12-22 09:28:55 来源:亿速云 阅读:170 作者:iii 栏目:关系型数据库

这篇文章主要介绍“Oracle Scheduler能实现哪些功能”,在日常操作中,相信很多人在Oracle Scheduler能实现哪些功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle Scheduler能实现哪些功能”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Oracle Scheduler可以帮助DBA或者数据库用户自动调度和运行各种类型的作业,比如数据库备份、收集优化器统计信息、生成各种报表或者执行业务流程等等,也可以把Schedule和Resource Manager结合起来通过时间窗口激活指定的Resource Plan,完成企业在资源管理和作业调度上的各种复杂需求,在10g之前可以通过DBMS_JOB工具来实现类似的功能,但毫无疑问,DBMS_SCHEDULER的灵活性和多样性比起老版本工具都有了极大的提升。

一,功能概述
 Oracle Scheduler到底可以实现那些具体功能呢?来看一下官方文档给出的解释:

 . Run database program units
    可以在本地或者远程数据库执行的数据库程序包括:PL/SQL 匿名块、PL/SQL 存储过程、JAVA 存储过程以及链

 . Run external executables, (executables that are external to the database)
    执行外部的可执行文件,包括应用程序、Shell脚本、Windows批处理文件,如果要在远程主机执行外部作业,远程主机只需要安装Agent而不需要Database

 . Schedule job execution using the following methods:
    .Time-based scheduling
        You can schedule a job to run at a particular date and time, either once or on a repeating basis.
    .Event-based scheduling
        You can start jobs in response to system or business events. Your applications can detect events and then signal the Scheduler. Depending on the type of signal         sent, the Scheduler starts a specific job. 
    .Dependency scheduling
        You can set the Scheduler to run tasks based on the outcome of one or more previous tasks. You can define complex dependency chains that include branching         and nested chains.

 . Prioritize jobs based on business requirements.
    .Controlling Resources by Job Class
        把有相同特性的Job指定到一个Job Class,再把Job Class映射到Resource Consumer Group,实现对调度作业的资源分配控制
    .Controlling Job Prioritization based on Schedules
        通过时间窗口改变作业的优先等级,创建Window在一个时间范围激活相应的 Resource Plan 来控制不同作业在不同时段的优先等级

 . Manage and monitor jobs

 . Execute and manage jobs in a clustered environment
 

    支持在RAC环境管理调度作业

二,基本概念
Oracle Scheduler包含的主要对象包括:Schedule,Program,Job,Job Class,Chain,Window,Database Destination,File Watcher,Credential ...具体介绍如下:

. Schedule (时间)
    通过 DBMS_SCHEDULER 包中的过程 CREATE_SCHEDULE 定义调度的开始时间,结束时间以及重复间隔
    CREATE_EVENT_SCHEDULE 过程用来创建由事件触发的时间表,由一个特定时间段内的一个事件调起一项任务

. Program (程序)
    定义了作业的形式及内容,作业形式可以是PL/SQL 匿名块,也可以是存储过程或者外部可执行文件,执行的存储过程带有输入参数时必须以匿名块运行

. Job (作业)
    通过CREATE_JOB创建一个作业,这个存储过程使用了重载,所以输入参数的选择可以非常灵活,既可以独立设置作业的时间、内容、Job Class,也可以引用已     经存在的Schedule 和 Program 来简化作业的创建

. Job Class (作业类)

    作业类中定义了Resource Consumer Group ,Service(RAC),日志等级,日志保留时间。要注意的一点是在Resource Manager中,service 参数会将会话映射到一个 资源用户组,如果同时指定了RAC节点和用户组,用户组参数优先

. Chain (链)
    说白了就是一系列的作业通过链来建立起一套依赖关系,大概的思路是这样的:先使 CREATE_CHAIN 创建一个链,再通过 DEFINE_CHAIN_STEP 和 DEFINE_CHAIN_EVENT_STEP 给要链接的 Program、Sub Chain、Event Condition、Event Schedule 分别定义一个别名(step_name),然后拿 DEFINE_CHAIN_RULE 定义这些 Step 的依赖规则,一通判断、分支、嵌套之后,链就算创建完成了,在 CREATE_JOB 时 (job_type => 'CHAIN',job_action => 'chain_name') 就可以了,做人得讲究,这个必须上图:

Oracle Scheduler能实现哪些功能

. Window (窗口)

    窗口指的是一个介于开始时间和结束时间之间的时间段,(为什么这么简单的一个概念被我说的如此绕口,我的小学语文老师呢?您有话要说吗。。),通常用来调起作业,或者在不同的时间段激活不同的 Resource Plan 以调整作业之间的资源分配,文档中还提到了 Overlapping Windows ,暂不研究了,来吧,有图有真相:

Oracle Scheduler能实现哪些功能

. Database Destination (数据库路径
)
    通过 CREATE_DATABASE_DESTINATION 创建,在 CREATE_JOB 中作为一个输入参数,用来执行远程调度

Credential (证书)
     证书用来保存OS或者数据库的用户密码,在执行External Job 或者远程数据库作业时使用

. File Watcher (文件监视器)
    这个好玩。。可以用来检测一个OS文件是否存在,根据文件大小判断传输是否完成,继而触发一个 Event Schedule

 . Lightweight Job (轻量级作业,为什么我的颜色不对呢?
    11gR1之前不被支持,通过 job_style 指定,轻量级作业并不是一个调度器对象,它适用于多个频繁执行的小作业,看看官方文档的介绍:

  • Unlike regular jobs, they are not schema objects.

  • They have significantly better create and drop times over regular jobs because they do not have the overhead of creating a schema object.

  • They have lower average session create time than regular jobs.

  • They have a small footprint on disk for job metadata and run-time data.

三,创建过程
--官方语法:








1,创建调度作业执行一个 Shell 脚本

执行Shell 脚本会在/tmp 生成一个文件:

  1. [oracle@ASM ~]$ cat /tmp/job.sh

  2. #!/bin/bash


  3. /bin/touch /tmp/abc.txt

创建证书,创建并立即执行作业:

  1. SQL> exec dbms_scheduler.create_credential('CRE1','user1','abcd1234')


  2. PL/SQL procedure successfully completed.


  3. SQL> exec dbms_scheduler.create_job(dbms_scheduler.generate_job_name,'EXECUTABLE','/tmp/job.sh',0,'','','','DEFAULT_JOB_CLASS',TRUE,FALSE,'Test.','CRE1')


  4. PL/SQL procedure successfully completed.


  5. SQL> select job_name,state,run_count,failure_count,raise_events from dba_scheduler_jobs where comments='Test.';


  6. JOB_NAME   STATE            RUN_COUNT FAILURE_COUNT RAISE_EVENTS

  7. ---------- --------------- ---------- ------------- --------------------

  8. JOB$_127   SUCCEEDED                1             0


  9. SQL> select JOB_NAME,STATUS,CREDENTIAL_NAME,ADDITIONAL_INFO from dba_scheduler_job_run_details where job_name='JOB$_127';


  10. JOB_NAME   STATUS     CREDENTIAL ADDITIONAL_INFO

  11. ---------- ---------- ---------- --------------------------------------------------------------------------------

  12. JOB$_127   SUCCEEDED  CRE1       EXTERNAL_LOG_ID="job_74659_457",

  13.                                  USERNAME="user1"

检查作业是否执行成功

  1. [oracle@ASM ~]$ ls /tmp/abc.txt

  2. /tmp/abc.txt

2,分别执行SQL语句、匿名块、PL/SQL 存储过程

  1. SQL> exec dbms_scheduler.create_job(dbms_scheduler.generate_job_name,'PLSQL_BLOCK','insert into scott.t1(dname) values(''BLOCK'');',0,'','','','DEFAULT_JOB_CLASS',TRUE,FALSE,'Test_1')


  2. PL/SQL procedure successfully completed.


  3. SQL> exec dbms_scheduler.create_job(dbms_scheduler.generate_job_name,'PLSQL_BLOCK','BEGIN p2(''50'',''t'',''t''); END;',0,'','','','DEFAULT_JOB_CLASS',TRUE,FALSE,'Test_3')


  4. PL/SQL procedure successfully completed.


  5. SQL> exec dbms_scheduler.create_job(dbms_scheduler.generate_job_name,'STORED_PROCEDURE','p1',0,'','','','DEFAULT_JOB_CLASS',TRUE,FALSE,'Test_2')


  6. PL/SQL procedure successfully completed.

3,创建 Program 并在 Job 中引用

  1. SQL> exec dbms_scheduler.create_program('TEST1','PLSQL_BLOCK','BEGIN p2(''50'',''t'',''t''); END;',0,TRUE,'Pro_1')


  2. PL/SQL procedure successfully completed.


  3. SQL> exec dbms_scheduler.create_job(dbms_scheduler.generate_job_name,program_name => 'TEST1',repeat_interval => '',end_date => '',enabled => TRUE ,auto_drop => FALSE,comments => 'Test_9')


  4. PL/SQL procedure successfully completed.

4,创建 Job 时分别引用 Program 和 Schedule

  1. SQL> BEGIN

  2.   2  DBMS_SCHEDULER.CREATE_SCHEDULE(

  3.   3  SCHEDULE_NAME => 'sch2',

  4.   4  START_DATE => sysdate,

  5.   5  END_DATE => sysdate+3650,

  6.   6  REPEAT_INTERVAL => 'freq=yearly; bymonth=jan,apr,jul,oct; bymonthday=2',    --10年时间里每年每个季度的第一个月的第二天执行作业

  7.   7  COMMENTS => 'Quarterly Report.'

  8.   8 );

  9.   9  END;

  10.  10  /


  11. PL/SQL procedure successfully completed.


  12. SQL> BEGIN

  13.   2  DBMS_SCHEDULER.CREATE_JOB(

  14.   3  dbms_scheduler.generate_job_name,

  15.   4  PROGRAM_NAME=>'TEST1',

  16.   5  SCHEDULE_NAME=>'sch2',

  17.   6  ENABLED=>TRUE,

  18.   7  AUTO_DROP=>FALSE,

  19.   8  COMMENTS=>'Test_99'

  20.   9 );

  21.  10  END;

  22.  11  /


  23. PL/SQL procedure successfully completed.


四、dbms_scheduler包一些视图
--*代表all或dba或user

--5.1.查看job的视图
dba_scheduler_jobs -          -查看job
dba_scheduler_job_args        --查看job的所有输入参数
*_scheduler_job_classes       --查看job的类信息
*_scheduler_job_dests         --查看job状态
*_scheduler_job_log           --查看job日志
*_scheduler_job_run_details   --查看job执行的详细信息
*_scheduler_running_jobs

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

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

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

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

--5.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

到此,关于“Oracle Scheduler能实现哪些功能”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI