`

Oracle任务调度的高级选项(原创 )

阅读更多

在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的有机结合。 笔者个人浅见,应用较少

下图为调度任务的总体结构关系

JOB CLASS

job class用于把那些对资源有相似请求的任务组合在一起,他可以与某个资源用户组相关联,从而使得该job class中所有的任务都属于该用户组。那么当这些任务在运行时所能使用的资源,就由该用户组所在的资源计划控制。

创建job class

其中

logging_level选项的意义和job中的意义一样,具体可参见http://czmmiao.iteye.com/blog/1003505

Resource Consumer Group表示与job class的用户组,Service Name表示与job class关联的服务。注意2者对立只能选其一。

Log Retention Period中的设置会覆盖日志保留时间内的全局配置。有关于日志保留时间内的全局配置可参见http://czmmiao.iteye.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、创建两个资源计划

 

 

2、创建两个window

 

 

创建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.iteye.com/blog/1003505

http://czmmiao.iteye.com/blog/1003618

 

其中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


参考至:《教你成为10g OCP》韩思捷著
本文原创,转载请著名出处、作者
如有错误,欢迎指正
邮箱:czmcj@163.com

0
4
分享到:
评论

相关推荐

    PL/SQL 创建 oracle 任务调度

    Oracle任务调度是数据库管理系统中的一个重要特性,它允许管理员设置定期执行的任务,比如数据备份、清理、统计信息收集等。在PL/SQL环境中,有两种主要的方法来创建Oracle任务调度:可视化创建和通过代码创建。 **...

    分布式任务调度平台XXL-JOB(Oracle版)

    这里分享自己已经跑起来的Oracle版本分布式任务调度平台XXL-JOB资源。 官方只有Mysql版本的DEMO,由于近期单位项目需要,将原来DEMO稍作修改后改成了oracle版本,主要修改工作包括修改配置文件,数据库连接方式,pom...

    oracle执行调度百度

    Oracle数据库允许用户在特定时间或间隔执行任务,如数据备份、统计信息收集、清理过期记录等。这种调度功能对于维护数据库的稳定性和性能至关重要。 【描述】中的"从百度上荡下来的"可能是指从网络上下载的相关资料...

    oracle调度任务的书写格式

    在Oracle数据库中,调度任务(Jobs)是一种自动化执行SQL脚本或PL/SQL块的机制,这极大地提高了数据库管理员的工作效率。Oracle Jobs可以按照预设的时间间隔或特定日期执行,适用于执行备份、清理、统计更新等常规...

    ORACLE定时任务不能自动执行的检查修复步聚

    Oracle 定时任务不能自动执行的检查修复步聚 Oracle 定时任务是 Oracle 数据库中的一种功能,可以根据设置的计划执行某些任务。但是,在某些情况下,Oracle 定时任务可能不能自动执行。这可能是由于某个版本的 BUG...

    Oracle SQL高级编程

    由于标题和描述是重复的且没有提供实质性的内容,我们无法从中得知具体的Oracle SQL高级编程知识点。但是,从标题我们可以推测该文档可能是关于如何使用Oracle数据库中的SQL语言进行高级编程。Oracle数据库是一个...

    Oracle 10g的任务调度.pdf

    Oracle 10g数据库中的任务调度是数据库管理中的一个重要功能,它允许数据库管理员(DBA)安排和自动执行数据库中的任务。在Oracle 10g版本中,任务调度功能得到了加强,引入了DBMS_SCHEDULER包,它提供了一系列用于...

    oracle job调度存储过程 触发器 定时更新数据库

    总的来说,Oracle Job调度存储过程和触发器是数据库管理中不可或缺的工具,它们允许数据库管理员自动化许多常规任务,提高效率,减少人为错误,并确保数据的一致性和准确性。通过灵活地配置和组合这些功能,可以实现...

    利用Quartz实现任务调度的集群

    【Quartz任务调度集群】是Java开发中解决定时任务需求的一种高效方案,它由OpenSymphony团队开发,自2001年以来广泛应用于各种项目。Quartz的核心优势在于其灵活性和简单性,允许开发者自由定义任务触发的时间表,...

    PL/SQL实现Oracle数据库任务调度

    正在看的ORACLE教程是:PL/SQL实现Oracle数据库任务调度。摘要:本文主要就数据库恢复与系统任务的调度,在结合一般性的数据库后台处理的经验上,提出较为实用而新颖的解决方法,拓宽了数据库后台开发的思路。 关键词...

    任务调度Quartz框 架

    【Quartz任务调度框架】 Quartz是一个开源的任务调度框架,非常适合初学者入门。它为Java开发者提供了一种高效且可控的方式来实现定时任务的调度。在各种企业应用中,任务调度的需求非常常见,例如定期清理系统垃圾...

    Oracle 9i数据库高级管理.rar

    Oracle 9i引入了恢复管理器(RMAN),这是一个全面的数据库备份和恢复工具,支持网络备份,自动化备份策略,并提供了数据库恢复的高级选项,如增量备份和多流备份。 五、数据库设计与架构 1. 数据库分区:Oracle 9i...

    使用PL/SQL Developer图形界面轻松实现oracle定期计划任务

    6. 在“调度”选项卡中,设置计划的执行频率。由于我们要每5秒执行一次,因此在“频率”下拉菜单中选择“秒”,并在“间隔”字段输入5。 7. 最后,点击“应用”按钮,保存并激活这个计划任务。 至此,我们已经成功...

    quartznet任务调度和消息调度

    Quartz.NET是一个强大的开源任务调度框架,用于在.NET环境中实现定时或周期性任务的执行。它为开发者提供了灵活且可扩展的解决方案,以满足各种定时任务需求。标题和描述中提到的知识点主要围绕以下几个方面: 1. *...

    关于oracle计划任务设置的实例.rar

    在Oracle中,计划任务(也称为调度程序)是一项重要的管理功能,允许管理员安排数据库操作在特定时间自动执行,例如数据备份、统计信息收集、表空间的自动扩展等。本教程将通过实例深入探讨如何在Oracle中设置计划...

    oracle调度程序

    Oracle调度程序是Oracle数据库系统中的一个强大工具,用于管理和执行数据库中的各种定时任务。自Oracle 11g版本起,Oracle引入了全新的Scheduler特性,这一特性极大地提升了任务调度的灵活性和效率。通过使用...

    Java Oracle JOBS 自动调度

    本话题将聚焦于“Java Oracle JOBS 自动调度”,这是一个关于如何使用Java编程语言与Oracle数据库相结合来实现自动任务调度的知识点。在企业系统中,自动调度功能对于定期执行诸如数据备份、报表生成、系统维护等...

    精通 ORACLE SQL高级编程 学习笔记

    精通Oracle SQL【第2版】ORACLE SQL高级编程【第二版】学习笔记

    oracle 定时任务

    Oracle定时任务,也被称为Oracle调度(Oracle Scheduler),是Oracle数据库系统中的一个重要组件,用于安排数据库内的作业自动执行。这些作业可以包括数据备份、清理过期记录、运行统计分析等日常维护任务。Oracle ...

Global site tag (gtag.js) - Google Analytics