Oracle数据库的SCHEDULE(调度程序)

很多情况下,数据库管理员或用户需要自动调度和运行很多类型的作业,例如,执行维护工作(如数据库备份);数据加载和验证例程;

生成报表;收集优化程序统计信息或执行业务流程。可以使用调度程序功能指定任务在将来某个时间点运行。作业可以在数据库中、在驻留数据库实例的机器上甚至在远程机器上运行。

可以结合使用调度程序和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计划,而不需要通过更改ESOURCE_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

时间: 2024-09-17 04:48:43

Oracle数据库的SCHEDULE(调度程序)的相关文章

sql-我要写一个java程序,去链接oracle数据库,如果获取链接的时间超过1分钟,就抛出异常,请问怎么实现?

问题描述 我要写一个java程序,去链接oracle数据库,如果获取链接的时间超过1分钟,就抛出异常,请问怎么实现? 我要写一个java程序,去链接oracle数据库,如果获取链接的时间超过1分钟,就抛出异常,请问怎么实现? 解决方案 http://blog.chinaunix.net/uid-20752328-id-3451931.html 这里有一篇文章可以解决你的问题你可以点击进去看看; 如果回答对您有帮助请采纳 解决方案二: 说明数据整理不合理吧 解决方案三: 你应该优化数据库结构,或你

Oracle数据库的备份方法

1.引言 Oracle数据库的备份方法很多,无论使用那种备份方法,备份的目的都是为了在出现故障后能够以尽可能小的时间和代价恢复系统.比如使用export实用程序导出数据库对象.使用Oracle备份数据库.使用Oracle对称复制.使用Oracle并行服务器.使用Oracle冷备份.使用Oracle热备份等各种备份方法都有其优缺点.适用的场合和相应的软硬件要求.本文主要就用export实用程序导出数据库对象.Oracle冷备份.Oracle热备份这三种最基本的备份方法进行详细的探讨,分析各自的优缺

JdbcTemplate插入一条数据到Oracle数据库并返回自增长ID

问题描述 我的需求就是需要循环插入一组数据,因为数据库是按照自增长ID关联的,所以每插入一条数据,都要返回自增长的ID,用来设置关联关系,我用JdbcTemplate可以实现一组数据的插入并返回ID,但是循环两次以上就出错了:org.springframework.jdbc.UncategorizedSQLException:PreparedStatementCallback;uncategorizedSQLExceptionforSQL[insertintoT_METADATA_ABSTRAC

Oracle数据库体系结构理论

Oracle数据库体系结构理论 我们先看下面几个我们实际工作中经常会遇到的问题: 1.通常说Oracle数据库是什么? 2.如何理解Oracle实例? 3.Oracle实例由哪些部分组成,它们之间的作用是什么? 4.如何理解Oracle的物理结构? 5.Oracle的物理结构由哪些部分组成,它们之间的作用是什么? 6.如何理解Oracle的逻辑结构? 7.Oracle的逻辑结构由哪些部分组成,它们之间的作用是什么? 一.Oracle数据库服务器 数据库在各个行业都会有使用到:其实,我们平时无论是

oracle 数据库 关于使用类型的问题

问题描述 oracle 数据库 关于使用类型的问题 我定义了 一个类型 和一个嵌套表 如下create or replace type typ_point1 AS OBJECT( 代码1 varchar(3) 代码2 varchar(8) 代码3 Timestamp....ect );create or replace TYPE typ_point1newt as table of typ_point1new; CREATE TABLE ""C##GAOMIAO""

Oracle数据库备份技巧

  利用下面的列出的技巧来确保你不会在每周一次的数据库备份过程中忘记关键步骤. 每周一次备份主数据库.如果你创建.修改或者停止一个数据库,添加新的SQL Server消息,添加或者停止连接服务器,或者添加记录设备,那就进行手工备份. 每天备份一次msdb数据库.它一般非常小,但很重要,因为它包含了所有的SQL Server工作.操作和计划任务. 只有当你修改它时,才有必要备份模型数据库. 用SQL Server Agent来安排你的备份工作的时间表. 如果在你的生产(production)环境中

哪位大神指导一下,关于Oracle数据库中类型varchar2(2) 存储汉字的问题

问题描述 哪位大神指导一下,关于Oracle数据库中类型varchar2(2) 存储汉字的问题 大神们跪求招数:orcale数据库中的一个字段YXQDW(有效期单位) 类型varchar2(2) 才两字节 用来存一个汉字,比如"年",我的项目(C#)一个汉字占用3个字节, 写SQL语句 insert不进去啊,提示字段范围超出了.难不成要像blob字段那样写?或者有什么更好的方式能将该字段插入呢?万分感激! 解决方案 可以换成nvarchar(2),这个是可变长度

oracle数据库性能调优技术:深入理解单表执行计划

一.概述 这篇文章是数据库性能调优技术的第二篇.上一篇讲解的索引调优是数据库性能调优技术的基础.这篇讲解的深入理解单表执行计划,是数据库性能调优的有力工具. 查询语句可以有多种可选执行计划,如何选择效率最高的执行计划?达梦数据库.oracle数据库.sql server数据库都是采用基于成本的查询优化,对备选执行计划进行打分,选择大家最小的执行计划进行执行.这些内容,我会在后续的几篇文章中进行详细的描述.在此之前,我们首先需要掌握如何理解数据库执行计划.这篇文章讲解只涉及单表操作的执行计划. 达

更改Oracle数据库表的表空间

oracle|数据|数据库 在Oracle数据库管理系统中,创建库表(table)时要分配一个表空间(tablespace),如果未指定表空间,则使用系统用户确省的表空间. 在Oracle实际应用中,我们可能会遇到这样的问题.处于性能或者其他方面的考虑,需要改变某个表或者是某个用户的所有表的表空间.通常的做法就是首先将表删除,然后重新建表,在新建表时将表空间指定到我们需要改变的表空间.如果该用户已经保存了大量数据,这种办法就就显得不是很方便,因为有大量数据需要提前备份出来.下面介绍一种利用数据库