dbms_scheduler包中job(作业)学习
来源:互联网 发布:ubuntu系统哪个国家 编辑:程序博客网 时间:2024/04/20 08:33
1、dbms_scheduler
Oracle 10g引入dbms_scheduler来替代先前的dbms_job,在功能方面,它比dbms_job提供了更强大的功能和更灵活的机制/管理(引用自百度百科)。这个包主要包括以下几个部分(以下定义均引用自百度百科):
program:程序。
10g下的program支持分为3种形式:PL/SQL BLOCK、STORED_ PROCEDURE、EXECUTABLE。
schedule:调度。
一个任务计划执行的时间策略。比如我们想要创建一个晚上3点执行的任务计划,就可以创建一个调度,凡是符合这个调度要求的,都可以调用这个我们预先创建好的调度。可以用dbms_scheduler.create_schedule来创建一个调度。
job:作业。
一个调度程序作业的实体.可以由dbms_scheduler.create_job创建生成.它可以自行指定作业属性,也可以调用我们预先创建的一系列scheduler、program、chain、job_class、 window、window_group来匹配其作业属性。
job_class:作业类。
定义了运行作业的资源使用者组,通过使用窗口中的资源计划,我们可以在不同资源组和不同作业类之间分配资源。可以使用dbms_scheduler.create_job_class创建一个作业类。
window:窗口。
可以看成是一个更高功能的调度,窗口可以调用系统中存在的调度(也可以自行定义执行时间),而且,具有资源计划限制功能,窗口可以归属于某个窗口组。可以使用DBMS_SCHEDULER.CREATE_WINDOW来创建一个窗口。
window_group:窗口组。
一个/几个窗口的集合。10g默认的自动采集统计信息的调度就是一个窗口组的形式,譬如,设置两个窗口,窗口一指定任务周日、周五晚上12点执行,而窗口二设定周六凌晨3点执行,这两个窗口组成了一个窗口组,形成了这个job的执行调度策略。可以使用DBMS_SCHEDULER.CREATE_WINDOW_GROUP来创建一个窗口组。
chain:链。
链可以看作是一个/几个program/event scheduler的集合,为了维护需要,我们可能需要将很多不同的program放到一起依次执行,按照以前的模式,要么将这几个program能整合成一个大的整体,要么分开几个job来单独执行,这无疑加重了维护负担,而chain的出现,可以优化这个问题,我们将事先定义好的program集合到一起,然后统一制定一个job来执行,可以使用dbms_scheduler.create_chain来创建一个chain。
2、job
由于工作中目前只用到了job,所以就先学job了,其他部分之后再慢慢学,这东西急不得~
2.1 创建job
可以由dbms_scheduler.create_job创建生成。它可以自行指定作业属性,也可以调用我们预先创建的一系列scheduler、program、chain、job_class、window、window_group来匹配其作业属性。
创建job的语法:
sys.dbms_scheduler.create_job( job_name => , job_type => , jog_action => , number_of_arguments => , start_date => , repeat_interval => , end_date => , job_class => , enabled => , auto_drop => , comments =>);
参数介绍:
job_name:job名字
job_type:job类型,支持三种类型:
1)PLSQL_BLOCK——PL/SQL语句块;
2)STORED_PROCEDURE——存储过程;
3)EXECUTABLE——外部程序(外部程序可以是一个shell脚本,也可以是操作系统级别的指令)。
job_action:根据job_type的不同,job_action有相对应的内容。
number_of_arguments:参数个数。
start_date:执行开始时间。
repeat_interval:指定job执行频率(如每分钟执行一次、每天执行一次等)。
end_date:执行结束时间。
job_class:jobclass的名字。
enabled:指定是否自动激活job,为true代表自动激活,false代表不激活。
auto_drop:执行完是否自动drop
comments:对于job的简单说明
2.2 对job的各种操作
查询:
select owner, job_name, state from dba_scheduler_jobs;
select job_name, state from user_scheduler_jobs;
注意:相应的查询都需要有相对应的权限。
启用:dbms_scheduler.enable('job_name');
运行:dbms_scheduler.run_job('job_name');
停止:dbms_scheduler.stop_job('job_name');
删除:dbms_scheduler.drop_job('job_name')
注意:以上四个操作接口都是有两个参数的,其中第二个参数有默认值,具体含义可以查看以下链接:
http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sched.htm#i1012587
http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sched.htm#i1013568
http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sched.htm#i1009818
http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sched.htm#i1009950
由于本人英语太差,看了很久才大概看明白,但还是不能准确的翻译过来,所以就不在这里翻译了,可能还有地方没理解透彻,如有看懂并理解的朋友,欢迎留言。
3、job应用实例
现在,写一个简单的例子练习一下,加深一下印象。
/*** 创建一个存储过程,输出当前系统时间*/create or replace procedure My_Timeisbegin dbms_output.put_line(to_char(sysdate, 'yyyy-mm-hh HH24:MI:SS'));end;/*** 创建一个job来调用以上存储过程*/declare n_JobExist integer; --标记job是否存在 s_Job_Name varchar2(32) := 'My_Job';begin n_JobExist := 0; --查询My_Job是否存在,如果存在则先drop掉 begin select 1 into n_JobExist from user_scheduler_jobs where job_name = upper(s_Job_Name); exception when NO_DATA_FOUND then NULL; end; if (n_JobExist = 1) then sys.dbms_scheduler.drop_job(s_Job_Name); end if; --创建My_Job sys.dbms_scheduler.create_job( job_name => s_Job_Name, job_type => 'plsql_block', --要调用的存储过程 job_action => 'begin My_Time; end;', repeat_interval => 'freq=secondly;interval=1', start_date => sysdate, --end_date => sysdate + 3/(24*60), job_class => 'DEFAULT_JOB_CLASS', auto_drop => false, enabled => true );end;/
查看结果可以在PL/SQL中找到工具->浏览器->jobs选项,右击My_Job,点查看,其中的‘运行细节’选项就是运行的结果。
4、参考资料
http://baike.baidu.com/link?url=X3aPKfo7XkHquLLauomJfoSU-Y9KhcJXfGEd_RCwwkB_quYZLv63gSX5YkYkUSki-Ag4gyjI3MfH76klxfS2Ja
http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sched.htm#CIHHBGGI
http://www.cnblogs.com/lanzi/archive/2012/11/23/2784815.html
- dbms_scheduler包中job(作业)学习
- oracle job,通过DBMS_SCHEDULER.CREATE_JOB来创建,管理也通过DBMS_SCHEDULER这个包来管理
- DBMS_SCHEDULER 带参数JOB
- dbms_scheduler job raise_events dequeue
- 用dbms_scheduler创建job
- 系统包dbms_job维护作业,dbms_scheduler调度的问题
- dbms_scheduler job 的简单管理
- dbms_scheduler job 之外部命令
- 使用DBMS_SCHEDULER创建job参考
- DBMS_SCHEDULER包的使用方法
- 19---作业(job)
- Oracle调度程序作业dbms_scheduler
- Oracle调度程序作业dbms_scheduler
- oracle调度程序作业dbms_scheduler
- oracle使用DBMS_SCHEDULER调度作业
- Oracle中定时作业(Job)使用方法详解
- oracle10g dbms_scheduler.create_job 创建job简单实例
- 关于DBMS_SCHEDULER job日志级别LOGGING_LEVEL
- Android菜鸟的成长笔记(18)——绑定本地Service并与之通信
- java7的变化
- Delphi7 中使用ADO连接数据库基础知识学习
- HTC G4 Tattoo 刷recover、刷ROM教程
- X-Y Problem
- dbms_scheduler包中job(作业)学习
- Myeclipse8.5 反编译插件 jad 安装
- 章子怡跨国官司获胜 被诉媒体发道歉声明
- HTC G6/Legend 卡刷超详细图文教程
- 在Delphi中使用ADO直接訪問Excel數據文件
- DSP CMD文件配置详解
- NSDATA转NSSTRING 去掉 <>和空格
- ContentObserver监听ContentProvider数据变化
- SharePoint的长时间操作SPLongOperation