Oracle 11g亮瞎眼睛的任务管理
在使用Oracle9i时,觉得oracle的任务调度好弱啊。最近浏览下oracle11g,由衷感到oracle在易用性上有了极大的提升,不但在内存管理、存储管理、SQL调优等方面变得十分简单,对任务管理也提供了统一、完整的解决方案。下面对任务管理做个概览:
Oracle11g的任务管理使用dbms_scheduler包。
1.基本的Scheduler概念
A job specifies what needs to executed and when. For example, the “what” could be a PL/SQL procedure, an ative binary executable, a Java application, or a shell script. You can specify the program (what) and the schedule (when) as a stand-alone job.
所谓的standalone job是指将program和schedule直接放在job中,也就和oracle9i中的job一样了,例如:
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name=>‘HR.DO_BACKUP‘,
job_type =>‘EXECUTABLE‘,
job_action=>‘/home/usr/dba/rman/nightly_incr.sh‘,
start_date =>TRUNC(SYSDATE)+23/24,
enabled =>TRUE,
repeat_interval=> ‘TRUNC(SYSDATE+1)+23/24‘,
/*next night at 11:00 PM */
comments=> ‘Nightly incremental backups‘);
END;
create_job重载函数,可以直接使用program(突然看到了这种面向对象的重载,感觉又回到了写程序的美好年代):
BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM(
program_name=> ‘CALC_STATS2‘,
program_action=> ‘HR.UPDATE_SCHEMA_STATS‘,
program_type=> ‘STORED_PROCEDURE‘,
enabled=> TRUE);
DBMS_SCHEDULER.CREATE_JOB(
job_name=>‘HR.GET_STATS2‘,
program_name=>‘HR.CALC_STATS2‘,
start_date=>‘20-DEC-0707.00.00 AM Greenwich‘,
repeat_interval=>‘FREQ=HOURLY;INTERVAL=2‘,
end_date=> ‘20-DEC-04 07.00.00 AM Greenwich‘,
comments=> ‘Explicitly scheduled job‘);
END;
/
create_job重载函数,也可以直接使用schedule:
BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE(
schedule_name=> ‘stats_schedule‘,
start_date =>SYSTIMESTAMP,
end_date=>SYSTIMESTAMP + INTERVAL ’30’ DAY,
repeat_interval=> ‘FREQ=HOURLY;INTERVAL=4‘,
comments =>‘Every 4 hours‘);
DBMS_SCHEDULER.CREATE_JOB(
job_name=> ‘ADMIN.GET_STATS‘,
program_name=> ‘ADMIN.CALC_STATS2‘,
schedule_name=> ‘STATS_SCHEDULE‘);
END;
2.高级的Scheduler概念
基本的scheduler概念大部分情况下已经够用,也就是说,即使我们不知道这些高级特性,oracle会赋予一些默认值供使用。高级的schedule加入了时间窗口与任务调度的概念:
Job classes被用来分类jobs。每个job属于一个job class.这个job class会map到一个resource consumer group.活动的active resource plan 确定可以分配给每个resource consumer group的资源,继而分配到每个job class和job上。resource consumer group和resource plan是为了协调各种资源(如cpu资源),不过他是在资源用到100%时才会启用(Note: The Management resource directives are noteffective until the machine is at 100% utilization. The Database ResourceManager controls processes only in a single instance.),可是如果真的用到100%,就不是资源调度的问题了,所以俺暂时还不确定这个资源分配是否有实际用途。
Window还是很有意思的,即时间窗口,比如可以定义一个时间段为维护时间段,可以将一批job关联到这个window上。还可以将多个windows定义为windows group,比如将NIGHT window 和WEEKEND window 组合成MAINTENANCE window group. 一个job可以被指定给MAINTENANCE window, 那么他就会在NIGHT 或者WEEKEND windows被打开时执行。
一个job可以用schedule, window 或者a window group 作为schedule, 不过他们是互斥的,只能用其中一个。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。