设为首页 收藏本站
查看: 686|回复: 0

[经验分享] Oracle任务调度的高级选项(原创 )

[复制链接]

尚未签到

发表于 2016-7-24 12:11:04 | 显示全部楼层 |阅读模式
  在Oracle的调度任务概述
  在Oracle的调度任务中不仅提供了program,job和schedul三个基本的组件,还提供了很多高级的组件。如
  job class:用来将任务与资源计划进行关联,对资源请求相似的JOB可放置在相同JOB CLASS中。
  window:表示在某段时间里启动与之关联的job class中的job或schedule,同时将启动的JOB和window中相关的资源计划进行关联
  window group:把相关的window组合起来,作为一个组,方便管理和使用。
  chain:一系列event_schedule、program和subchain的有机结合。 笔者个人浅见,应用较少
  下图为调度任务的总体结构关系
DSC0000.jpg
  JOB CLASS
  job class用于把那些对资源有相似请求的任务组合在一起,他可以与某个资源用户组相关联,从而使得该job class中所有的任务都属于该用户组。那么当这些任务在运行时所能使用的资源,就由该用户组所在的资源计划控制。
  创建job class
DSC0001.jpg
  其中
  logging_level选项的意义和job中的意义一样,具体可参见http://czmmiao.iyunv.com/blog/1003505
  Resource Consumer Group表示与job class的用户组,Service Name表示与job class关联的服务。注意2者对立只能选其一。
  Log Retention Period中的设置会覆盖日志保留时间内的全局配置。有关于日志保留时间内的全局配置可参见http://czmmiao.iyunv.com/blog/1003505
  创建job class的sql如下
  BEGIN
sys.dbms_scheduler.create_job_class(
logging_level => DBMS_SCHEDULER.LOGGING_RUNS,
log_history => 20,
resource_consumer_group => 'BATCH_GRP',
comments => 'Job classe for DSS job',
job_class_name => 'DSS_JOB_CLASS');
END;

  WINDOW

  windo表示明确定义的一段时间,包括起始时间和终止时间。比如,早上6点到下午6点就可以形成一个window,代表工作时间。window的最大作用在于可以同时与任务和资源计划关联,一旦达到指定的时间段就可以启动任务,并激活资源计划。
  比如说,晚上需要进行某个DSS相关的任务,这个任务可能从晚上10点持续到早上8点,但是我们系统6点钟就要运行OLTP业务,为了防止DSS任务消耗过多资源。我们需要进行如下操作。
  创建两个window,WIN_NIGHT和WIN_DAY。为DSS_JOB建立一个job class,其名称为DSS_CLASS。并将DSS_CLASS与用户组BATCHA_CLASS建立关联。同时将DSS_JOB与WIN_NIGHT建立关联。到了晚上10点钟,WIN_NIGHT打开,激活DSS_JOB启动,并激活资源计划PLAN_NIGHT。这时DSS_JOB以BATCH_GRP用户组的身份运行,所能使用的资源受PLAN_NIGHT控制。白天的时候,WIN_DAY启动,并激活资源计划PLAN_DAY。这时DSS_JOB还没运行完毕,则他能够继续运行。但是所能使用的资源由PLAN_DAY控制。这样就实现了资源的合理利用
  如果需要,我们还可以把一组window合并起来,组成一个window group,这样就可以更容易地管理多个window。
  创建window
  1、创建两个资源计划
DSC0002.jpg
  
DSC0003.jpg
  
  2、创建两个window
DSC0004.jpg
  
DSC0005.jpg
  
  创建win_night的sql如下
  BEGIN
DBMS_SCHEDULER.CREATE_WINDOW(
window_name=>'WIN_NIGHT',
resource_plan=>'PLAN_NIGHT',
start_date=>systimestamp at time zone '+8:00',
duration=>numtodsinterval(480, 'minute'),
repeat_interval=>'FREQ=DAILY;BYHOUR=22;BYMINUTE=0;BYSECOND=0',
end_date=>null,
window_priority=>'LOW',
comments=>'Window for night');
END;


  3、创建JOB
  关于如何创建JOB可参见
  http://czmmiao.iyunv.com/blog/1003505
  http://czmmiao.iyunv.com/blog/1003618
DSC0006.jpg
  
DSC0007.jpg
  其中Stop on Window Close表示window结束时任务终止,这里我们不要勾选该选项。

  创建job的sql如下
  BEGIN
sys.dbms_scheduler.create_job(
job_name => '"SYS"."DSS_JOB"',
job_type => 'PLSQL_BLOCK',
job_action => 'declare
   i number;
   j number;
begin
   i:=0;
   loop
      j:=sqrt(i);
      i:=i+1;
    end loop;
end;',
schedule_name => 'SYS.WIN_NIGHT',
job_class => 'DSS_JOB_CLASS',
auto_drop => FALSE,
enabled => FALSE);
sys.dbms_scheduler.set_attribute( name => '"SYS"."DSS_JOB"', attribute => 'stop_on_window_close', value => FALSE);
sys.dbms_scheduler.enable( '"SYS"."DSS_JOB"' );
END;

  当window启动时,Oracle并不会校验各个widnow的起始时间和终止时间是否从叠,但是同一个时间点上只能有一个window在运行,这里也就存在矛盾的地方。Oracle采用如下机制解决这个问题。
  1、如果准备启动的window的优先级别等于当前正在运行的window的优先级别,则正则运行的window继续运行,准备运行的window必须等到正在运行的window结束才能启动。反之,则停止当前运行的window,启动优先级高的window。
  2、如果在当前没有正在运行的window但是同一时间点有多个window需要启动,且优先级相等,则运行时间长的window被启动。
  注意,oracle只提供了window两个优先级:Low 、High
  创建chain
DSC0008.jpg
  
参考至:《教你成为10g OCP》韩思捷著
本文原创,转载请著名出处、作者
如有错误,欢迎指正
邮箱:czmcj@163.com

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-248620-1-1.html 上篇帖子: 装上oracle启动Tomcat时报错 下篇帖子: Oracle游标使用的经验总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表