您的位置:首页 > 其它

DBA2 第十四章:使用调度程序自动执行任务

2011-09-25 11:43 363 查看
主要组件和步骤

组件

作业”指定需要执行的内容和执行时间。

“计划”指定执行作业的时间和次数。

“程序”是有关特定可执行文件、脚本或过程的元数据集合。

步骤

创建程序

管理-->程序--->创建

BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM(
program_name => 'CALC_STATS2',
program_action =>
'HR.UPDATE_HR_SCHEMA_STATS',
program_type =>
'STORED_PROCEDURE',
enabled => TRUE);
END;
/


创建并使用计划

管理--->调度-->创建

BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE(
schedule_name => 'stats_schedule',
start_date => SYSTIMESTAMP,
end_date => SYSTIMESTAMP + 30,
repeat_interval =>
'FREQ=HOURLY;INTERVAL=1',
comments => 'Every hour');
END;
/


创建并提交作业

管理-->作业-->创建

监视作业

[DBA|ALL]_SCHEDULER_JOB_RUN_DETAILS 视图

LOG_ID:日志条目的唯一标识符

LOG_DATE:日志条目的时间戳

OWNER:作业的所有者

JOB_NAME:作业的名称

STATUS:作业执行的状态

ERROR#:遇到的第一个错误的编号

REQ_START_DATE:作业计划启动的时间

ACTUAL_START_DATE:作业实际启动的时间

RUN_DURATION:作业执行的持续时间

INSTANCE_ID:运行作业的实例

SESSION_ID:运行作业的会话

SLAVE_PID:用于执行作业的从属进程的进程 ID

CPU_USED:作业运行所用的CPU 量

ADDITIONAL_INFO:有关作业运行的附加信息

计划

调度

时间

事件

创建基于时间的作业

示例

BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name=>'HR.DO_BACKUP',
job_type => 'EXECUTABLE',
job_action => '/home/usr/dba/rman/nightly_incr.sh',
start_date=> SYSDATE,
repeat_interval=>'FREQ=DAILY;BYHOUR=23',
/* next night at 11:00 PM */
comments => 'Nightly incremental backups');
END;
/


job_type

PLSQL_BLOCK:匿名 PL/SQL 块

STORED_PROCEDURE:命名的PL/SQL、Java 或外部过程

EXECUTABLE:可以从操作系统命令行执行的命令

job_action 参数可以是要运行过程的名称、脚本的名称或操作系统命令的名称,也可以是匿名的 PL/SQL 代码块,具体取决于 job_type参数的值。

创建基于事件的调度

必须设置

队列说明(应用程序将消息入队以启动作业) queue_spec

事件条件(与 Oracle Streams AQ 规则条件的语法相同),如果为 TRUE 则启动作业 event_condition

示例:创建一个作业,如果成批装入的数据文件在上午 9:00 之前到达文件系统,则运行此作业。

BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name=>'ADMIN.PERFORM_DATA_LOAD',
job_type => 'EXECUTABLE',
job_action => '/home/usr/dba/rman/report_failure.sh',
start_date => SYSTIMESTAMP,
event_condition => 'tab.user_data.object_owner =
''HR'' and tab.user_data.object_name = ''DATA.TXT''
and tab.user_data.event_type = ''FILE_ARRIVAL''
and tab.user_data.event_timestamp < 9 ',
queue_spec => 'HR.LOAD_JOB_EVENT_Q');
END;


基于事件的调度

类型

用户或应用程序生成的事件:应用程序可以引发由调度程序使用的事件。调度程序通过启动作业来回应事件。

调度程序生成的事件:调度程序可以引发事件来指示在调度程序自身内发生的状态更改。



创建复杂调度

INCLUDE:向日历表达式结果中添加日期列表

EXCLUDE:从日历表达式结果中删除日期列表

INTERSECT:只使用两个或多个计划公用的日期

作业链

概述

链是为达到组合目标而链接在一起的一系列已命名的程序。

一个相关程序链中的每个位置都称为一个步骤

创建步骤

使用 CREATE_CHAIN 过程创建链

定义(一个或多个)链步骤

程序

另一个链(嵌套链)

事件

创建链对象后,请定义链规则

DEFINE_CHAIN_RULE 向链中添加每个规则时均需要调用一次此过程

每个规则都有一个条件和操作

启动链

用 ENABLE 过程启用链。

要运行链,必须创建类型为“CHAIN”的作业。作业操作必须引用链名称。

监视作业链

ALL_SCHEDULER_CHAINS 视图

链所有者和名称;链的规则集名称和规则集所有者;规则数;步骤数;是否启用链;链是否使用求值间隔;以及链是否使用用户定义的规则集

ALL_SCHEDULER_CHAIN_RULES 视图

为其定义规则的链的名称和所有者;规则名、所有者和条件;以及在条件求值结果为 TRUE 时要执行的操作

ALL_SCHEDULER_CHAIN_STEPS 视图

为其创建步骤的链的名称和所有者;步骤名;程序名和所有者;是否应跳过步骤;以及步骤在完成后是否应暂停

ALL_SCHEDULER_RUNNING_CHAINS 视图

链名称和所有者;指向链的作业的名称和所有者;链中步骤的名称及其当前状态;链步骤遇到的错误;链步骤开始和结束的时间;完成步骤所用的时间;以及运行步骤的作业的名称

高级概念



概念

“窗口”由定义好起始时间和结束时间的时间间隔表示,用于在不同时间激活不同的资源计划。

“窗口组”表示一系列窗口,使用它可以更轻松地管理窗口。

“作业类”定义作业的类别,这些作业共享公用资源使用要求及其他特性。

创建作业类

管理-->作业类-->创建

EXECUTE DBMS_SCHEDULER.CREATE_JOB_CLASS( -
job_class_name => 'ADMIN_JOBS', -
resource_consumer_group => 'DAYTIME_JOBS', -
logging_level => DBMS_SCHEDULER.LOGGING_OFF);


创建窗口

/*为十二月份创建一个使用 END_OF_YEAR 资源计划的窗口,
并且此窗口在每晚从东部标准时间 (EST) 下午 6:00 到第二天
上午 6:00 有效。*/

BEGIN
DBMS_SCHEDULER.CREATE_WINDOW(
window_name => 'DEC_NIGHTS',
resource_plan => 'END_OF_YEAR',
start_date => '01-DEC-03 06.00.00 PM EST',
repeat_interval => 'FREQ=DAILY; BYHOUR=18',
duration => '0 12:00:00',
end_date => '31-DEC-03 06.00.00 AM EST',
comments => 'Every day at 6:00 PM');
END;
/


区分窗口内作业的优先级

两个级别

级别区分优先级,使用的是资源计划

在类内区分优先级,使用的是作业的作业优先级属性

仅当属于同一类的两个作业同时启动时,才会考虑优先级。优先级较高的作业先启动。

不能确保不同作业类中的作业按其优先级运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: