Chinaunix首页 | 论坛 | 博客
  • 博客访问: 845416
  • 博文数量: 72
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 435
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-27 20:07
个人简介

郭一军,网名guoyJoe,尖峰在线培训创始人、Oracle OCM、ITPUB论坛Oracle认证版版主、2013最佳精华贴、Senior DBA、Oracle OCT、 ACOUG MEMBER、CSDN 认证专家、RHCE、在线技术分享的倡导者和实践者。 http://www.jianfengedu.com http://jianfengedu.taobao.com

文章分类
文章存档

2014年(72)

分类: Oracle

2014-06-19 10:35:13

      很多情况下,数据库管理员或用户需要自动调度和运行很多类型的作业,例如,执行维护工作(如数据库备份);数据加载和验证例程;
       生成报表;收集优化程序统计信息或执行业务流程。可以使用调度程序功能指定任务在将来某个时间点运行。作业可以在数据库中丶在驻
留数据库实例的机器上甚至在远程机器上运行。
       可以结合使用调度程序和Resource Manager(资源管理器)。调度程序可以激活Resource Manager计划,并按照为各种Resource Manager
 使用者组指定的优先级来运行作业。
       调度程序是在Oracle 10g版本中引入的,在11g版本中得到了大大增强。较早的数据库版本通过DBMS_JOB功能提供作业调度功能。为了达
 达到向后兼容的目的,当前版本依然支持此功能,但它的功能多样性远不及调度程度。


 1丶调度程序体系结构
        数据字典包含一个作为所有调度程序作业的存储点的表。可以通过DBA_SCHEDULER_JOBS视图查询此表。作业队列协调器后台进程CJQ0
监视此表,根据需要启动作业队列进程Jnnn来运行作业。如果在任何定义的丶活动的调度程序作业,就自动启动CJBQ0进程。根据需要启
动Jnnn进程,但是最大数量受JOB_QUEUE_PROCESSES实例参数限制,该参数可以是0-1000(默认值)的任何值。如果将值设为0,那么将不会
运行调程。
      作业队列协调器从作业队列表中选取作业,将它们传递给作业队列进程执行。它还根据需要启动和终止作业队列进程。要查看当前正在
运行的进程,可查询V$PROCESS视图。
  select program from v$process where program like \'%J%\';


         定义为过程的作业在数据库中运行。作业也可以定义为操作系统命令或shell脚本:这些将作为外部操作系统任务运行。作业的触发因素
 可以是时间或事件。基于时间的作业根据时间表可能运行一次或重复运行。基本事件的作业在特定条件出现时运行。有一些预配置的事件,
 也可以使用用户定义的事件。作业可以连接成链,根据作业成功与否对分支使用简单规则。
         调度程度的一项高级功能是将期与Resource Manager相关联。某些作业可能需要优先运行,为此,可以链接作业与Resource Manager
 使用都组,以便达到这个目的。还可以使用调度程序激活Resource Manager计划,而不需要通过更改RESOURCE_MANAGER_PLAN实例参数或使
 用DBMS_RESOURCE_MANAGER.SWITCH_PLAN过程调用手动激活计划。
   可以使用一个API-DBMS_SCHEDULER包来配置调度程序,通过一组数据字典视图监视它,或是用Database Control管理它。
 
 2丶调度程序对象
         调度程序对象中最基本的对象是作业。作业可以是完全自包含的:它可以定义要执行的动作和执行时间。在更高级的配置中,作业只是
 由大量各种类型的调度程序对象组成的结构的一部分。


  2.1 作业
        作业(job)指定了要执行的动作以及执行动作的时间。
      “ 要执行的动作”可以是匿名的PL/SQL块(可能由单条SQL语句构成)丶PL/SQL存储过程(可调用JAVA存储过程或外部过程)丶
   或在服务器的文件系统中存储任何可执行文件(既可以是二进制可执行文件,也可以是SHELL脚本)。特别强大的功能(超出OCP
  课程的范围)是远程外部作业,该作业在一台单独的机器上运行。
      “执行动作的时间”指定了启动作业时的时间戳以及用于今后运行的重复时间间隔,或是触发事件。
       DBMS_SCHEDULER.CREATE_JOB


 2.2 程序
        程序(program)在作业与其将要执行的动作之间提供了一个抽象层。程序是使用DBMS_SCHEDULER.CREATE_PROGRAM过程创建的。
        通过从作业定义中取出作业内容并在程序中加以定义,就可以在不同的作业中引用相同的程序,从而不必进行多次定义就可以将
 它与不同的时间表和作业类关联在一起。需要记住的是:就是作业而言,只有启用程序才能使用它。默认是不启用。


 2.3 时间表
         时间表(schedule)是指定作业运行时间与频率的规范。时间表的基本原理是从作业中取出执行作业的时间,然后将其与不同的的
 作业关联。是时间表是使用DBMS_SCHEDULER.CREATE_SHEDULE
    
   
 2.4 作业类
       作业类用于将一个或多个作业与一个Resource Manager使用者组关联在一起,并且也可以用于失控制日志记录级别。
       DBMS_SCHEDULER.CREATE_JOB_CLASS


 2.5 窗口
        时间表准确地指定了作业应当启动的时间。通过使用Oracle能够更自由地决定启动作业的时间,窗口(window)进一步扩展了
 时间表的概念。一个窗口在特定时间打开,并且在持续一定的时间之后关闭:指定在某个窗口中运行的作业可以根据Oracle的判断
 在该窗口期间的任何时刻启动。窗口本身可以根据时间表重复打开。结合类与Resource Manager时使用窗口具有特殊的意义:Oracle
 能够根据相对优先权在窗口内调度作业来运行。此外窗口也可以激活Resource Manager计划。
   DBMS_SCHEDULER.CREATE_WINDOW

   从什么时间点开始,续继多久时间,能过Resource Plan限制资源使用。




操作如图所示:














 
  
阅读(1911) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~