日期:2014-05-16 浏览次数:20571 次
转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/12224335
正确答案:BCE
轻量级作业
创建和启动一个作业涉及数据字典中一定量的活动。这不可能在短时间(几秒钟)内创建大量作业(可能是数百个)。为了解决这个问题,可以创建轻量级作业。轻量级作业是个比标准作业更简单的构造。它必须基于程序,只能有有限的一系列特性:例如:AUTO_DROP总是TURE。可以单独创建轻量级作业,但没有意义。真正的价值是在创建一组作业定义(可能是数百个),并同时提交它们。
注意:不能用DatabaseControl创建轻量级作业,在任何窗口中都没有这一项。因此,必须使用DBMS_SCHEDULER API。
要创建轻量级作业,使用CREATE_JOB过程调用的一个版本,指定程序并将JOB_STYLE参数设为LIGHTWEIGHT,例如:
BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name =>'guoyJoe', program_name =>'gyj_proc_lw', start_date =>sysdate, end_date =>to_timestamp(sysdate+1), enabled =>true, job_style =>'lightweight'); END; /
这将创建一个将在下一个24小时内每隔一小时运行ocm_prog1程序的轻量级作业。
下面我们来创建一个有着100个轻量级作业的数组。
declare lw_job sys.job; lw_job_array sys.job_arrary; begin lw_job_array :=sys.job_array(); lw_job_arrary.extend(100); for I in 1 .. 100 loop lw_job :=sys.job(job_name='lw_job'||to_char(i), job_style=>'lightweight', job_template=>'ocm_prog1', enable=>'true'); lw_job_arrary(i) := lw_job; end loop; dbms_scheduler.create_jobs(lw_job_arrary,'transactional'); end; /
注:何时使用轻量级作业?可能是为了并行化由许多不同任务组成的业务操作。例如,在改变web销售价格表后,需要刷新缓存在应用服务器上的大量网页。由于每个网页不同的URL标识,因此必须发送许多不同的消息。你肯定希望在尽可能短的时间内发送它们。
以下转载:http://space.itpub.net/26474945/viewspace-745050
轻量级作业:
也成为持久性轻量级作业,如果当我们的数据库每秒钟需要创建、删除或修改数十个或数百个作业时,使用轻量级作业是降低开销的最佳方法,
常规作业:
是由oracle 11g Scheduler 所支持的作业,常规作业需要很多的系统开销,因为他们必须由Scheduler创建且每次执行完由Scheduler删除,常规作业提供了使用诸如其它用户程序的优点,并且提供了对运行此作业的权限细粒度控制
轻量级作业有别于常规作业的特征如下:
1.轻量级作业不是数据库对象,不会产生创建或删除轻量级作业时多引起的开销
2.与普通作业相比,创建和删除轻量级作业的时间少的很多;
3.轻量级作业的作业元数据和运行时数据占用的磁盘空间很少;
4.由于占用的磁盘空间少,可以再RAC环境中平衡轻量级作业的负载;
轻量级作业有几个缺点:
1.无法设置轻量级作业的权限,作业的权限从模板的计划继承而来
2.由于轻量级作业使用模板,无法创建完全独立的轻量级作业,我们必须使用PL/SQL命令创建轻量级作业,而无法用过EM创建
创建轻量级作业:
我们可以使用DBMS_SCHEDULER.CREATE_PROGRAM创建于轻量级作业一起使用的模板,供轻量级作业的模板存储为PLSQL_BLOCK或STORED_PROCEDURE类型的计划,创建轻量级作业时,指定LIGHEWERGHT的JOB_STYLE。JOB_STYLE的默认值是REGULAR
A选项,对于普通的作业而言,Oracle为作业创建包含相应元数据的数据库对象,修改几个数据库表,然后生成redo log。轻量级作业的作业元数据和运行时数据的要求极低