Oracle调度Schedule特性(第一部分)-job
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,在主机层面,我想要执行一些定时任务,通常会使用crontab。方便又实用,那么oracle里面是不是也有定时任务的概念呢?Oracle Scheduler的引入就是用来管理和计划数据库的Job,通过它
千家信息网最后更新 2025年01月20日Oracle调度Schedule特性(第一部分)-job在主机层面,我想要执行一些定时任务,通常会使用crontab。方便又实用,那么oracle里面是不是也有定时任务的概念呢?
Oracle Scheduler的引入就是用来管理和计划数据库的Job,通过它可以让很多常规的数据库任务自动执行,减少人为干预,
解放劳动力,本质上来说,它和Linux的crontab的功能是一样的。但是它们的领域又不一样,Oracle Scheduler专注于Oracle数据库Job的自动化管理、维护和监控。
在10g之后,ORACLE建议使用Scheduler替换普通的job,来管理任务的执行。其实将Scheduler描述成管理job的工具已经太过片面了,
10G版本中新增的Scheduler绝不仅仅是创建任务这么简单。他还有很多很多强大的功能,下面我们来通过几个篇章来逐一进行介绍
所谓JOBS,其实就是Scheduler管理的一个(或多个)任务的执行调度,也就是具体干活的那个人。
1、怎么创建一个job呢?
通过DBMS_SCHEDULER包来创建job,使用包里的CREATE_JOB过程来创建job,用户可以指定要执行的任务,调度信息(啥时候执行,执行周期,终止日期等)以及其它一些任务相关的属性。
begin
dbms_scheduler.create_job(
job_name => 'INSERT_TEST_TBL',
job_type => 'STORED_PROCEDURE',
job_action => 'P_INSERT_INTOTEST',
start_date => sysdate,
repeat_interval => 'FREQ=DAILY;INTERVAL=1');
END;
/
2、job的创建说明:
使用CREATE_JOB过程来创建job的时候,可指定的参数值有很多,大部分时间,我们只需要掌握的并没有那么多。下面对几个重点的参数进行一下介绍:
job_name指定job的名称,这个值需要是唯一的。
job_type任务执行的操作类型,这里也是需要必须指定的,可选值为:
PLSQL_BLOCK 表示任务执行的是一个PL/SQL匿名块。
STORED_PROCEDURE 表示任务执行的是ORACLE存储过程(含PL/SQL PROCEDURE和JAVA PROCEDURE)。
EXECUTABLE 表示任务执行的是一个外部程序,比如说操作系统命令。
CHAIN 表示任务执行的是一个CHAIN。
job_action任务执行的操作,应与JOB_TYPE类型中指定的参数相匹配。比如说对于PL/SQL匿名块,此处就可以放置PL/SQL块的具体代表,
类似DECLARE .. BEGIN ..END这类;如果是ORACLE过程,那么此处应该指定具体的过程名,注意由于任务执行,即使过程中有OUT之类参数,实际执行时也不会有输出的。
start_date指定任务初次执行的时间,本参数可为空,当为空时,表示任务立刻执行,效果等同于指定该参数值为SYSDATE。
repeat_interval指定任务执行的频率,比如多长时间会被触发再次执行。本参数也可以为空,如果为空的话,就表示当前设定的任务只执行一次。
REPEAT_INTERVAL参数与标准JOB中的INTERVAL参数有很大区别,相比之下,REPEAT_INTERVAL参数的语法结构要复杂的多。其中最重要的是FREQ和INTERVAL两个关键字。
FREQ 关键字用来指定间隔的时间周期,可选参数有:YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, and SECONDLY,分别表示年、月、周、日、时、分、秒等单位。
INTERVAL 关键字用来指定间隔的频繁,可指定的值的范围从1-99。
REPEAT_INTERVAL=>'FREQ=DAILY;INTERVAL=1';表示每天执行一次,如果将INTERVAL改为7就表示每7天执行一次,效果等同于FREQ=WEEKLY;INTERVAL=1。
通常来讲,使用DBMS_SCHEDULER.CREATE_JOB创建一个JOB,上述参数基本是需要指定的。除此之外,还可以在CREATE_JOB时,指定下列参数:
NUMBER_OF_ARGUMENTS 指定该JOB执行时需要附带的参数的数量,默认值为0,当JOB_TYPE列值为PLSQL_BLOCK或CHAIN时,本参数必须设置为0,因为上述两种情况下不支持附带参数。
END_DATE 指定任务的过期时间,默认值为NULL。任务过期后,任务的STATE将自动被修改为COMPLETED,ENABLED被置为FALSE。如果该参数设置为空的话,
表示该任务永不过期,将一直按照REPEAT_INTERVAL参数设置的周期重复执行,直到达到设置的MAX_RUNS或MAX_FAILURES值。
JOB_CLASS 指定任务关联的CLASS,默认值为DEFAULT_JOB_CLASS。
ENABLED 指定任务是否启用,默认值为FALSE。FALSE状态表示该任务并不会被执行,除非被用户手动调用,或者用户将该任务的状态修改为TRUE。
AUTO_DROP 当该标志被置为TRUE时,ORACLE会在满足条件时自动删除创建的任务
任务已过期的条件;
任务最大运行次数已达MAX_RUNS的设置值;任务未指定REPEAT_INTERVAL参数,仅运行一次。
该参数的默认值即为TRUE。用户在执行CREATE_JOB过程时可以手动将该标志指定为FALSE,当参数值设置为FALSE时,即使满足上述提到的条件任务也不会被自动删除,这种情况下,唯一能够导致任务被删除的情况,就是用户主动调用DROP_JOB过程。
COMMENTS 设置任务的注释信息,默认值为NULL。
上面的例子创建了一个新的JOB,不过这个JOB与普通JOB不同,此时查询USER_JOBS视图是查不到刚刚创建的JOB的信息,
因为这个JOB是SCHEDULER管理的JOB。要查询SCHEDULER管理的JOS,应该通过USER_SCHEDULER_JOBS(当然ALL_SCHEDULER_JOBS和DBA_SCHEDULER_JOBS也可以),例如:
select job_name,job_type,job_action,to_char(start_date,'yyyy-mm-dd hh34:mi:ss'),repeat_interval,enabled,state from user_scheduler_jobs;
JOB_NAME JOB_TYPE JOB_ACTION TO_CHAR(START_DATE, REPEAT_INTERVAL ENABL STATE
-------------------- ---------------- ------------------------- ------------------- ------------------------------ ----- ---------------
INSERT_TEST_TBL STORED_PROCEDURE P_INSERTINTOTEST 2009-07-27 13:46:50 FREQ=DAILY;INTERVAL=1 FALSE DISABLED
不过,细心的朋友可能会发现,JOB虽然成功创建了,但却并未执行,这是怎么回事?其实原因很简单,还记的前面介绍CREATE_JOB过程时提到的ENABLED参数吗,当不显式指定时,
该参数的默认值为false,JOB自然不会运行了。如果遇到这类情形,如何修改呢?
需要通过下面的命令:
exec dbms_scheduler.enable(¨INSERT_TEST_TBL¨);
Oracle Scheduler的引入就是用来管理和计划数据库的Job,通过它可以让很多常规的数据库任务自动执行,减少人为干预,
解放劳动力,本质上来说,它和Linux的crontab的功能是一样的。但是它们的领域又不一样,Oracle Scheduler专注于Oracle数据库Job的自动化管理、维护和监控。
在10g之后,ORACLE建议使用Scheduler替换普通的job,来管理任务的执行。其实将Scheduler描述成管理job的工具已经太过片面了,
10G版本中新增的Scheduler绝不仅仅是创建任务这么简单。他还有很多很多强大的功能,下面我们来通过几个篇章来逐一进行介绍
所谓JOBS,其实就是Scheduler管理的一个(或多个)任务的执行调度,也就是具体干活的那个人。
1、怎么创建一个job呢?
通过DBMS_SCHEDULER包来创建job,使用包里的CREATE_JOB过程来创建job,用户可以指定要执行的任务,调度信息(啥时候执行,执行周期,终止日期等)以及其它一些任务相关的属性。
begin
dbms_scheduler.create_job(
job_name => 'INSERT_TEST_TBL',
job_type => 'STORED_PROCEDURE',
job_action => 'P_INSERT_INTOTEST',
start_date => sysdate,
repeat_interval => 'FREQ=DAILY;INTERVAL=1');
END;
/
2、job的创建说明:
使用CREATE_JOB过程来创建job的时候,可指定的参数值有很多,大部分时间,我们只需要掌握的并没有那么多。下面对几个重点的参数进行一下介绍:
job_name指定job的名称,这个值需要是唯一的。
job_type任务执行的操作类型,这里也是需要必须指定的,可选值为:
PLSQL_BLOCK 表示任务执行的是一个PL/SQL匿名块。
STORED_PROCEDURE 表示任务执行的是ORACLE存储过程(含PL/SQL PROCEDURE和JAVA PROCEDURE)。
EXECUTABLE 表示任务执行的是一个外部程序,比如说操作系统命令。
CHAIN 表示任务执行的是一个CHAIN。
job_action任务执行的操作,应与JOB_TYPE类型中指定的参数相匹配。比如说对于PL/SQL匿名块,此处就可以放置PL/SQL块的具体代表,
类似DECLARE .. BEGIN ..END这类;如果是ORACLE过程,那么此处应该指定具体的过程名,注意由于任务执行,即使过程中有OUT之类参数,实际执行时也不会有输出的。
start_date指定任务初次执行的时间,本参数可为空,当为空时,表示任务立刻执行,效果等同于指定该参数值为SYSDATE。
repeat_interval指定任务执行的频率,比如多长时间会被触发再次执行。本参数也可以为空,如果为空的话,就表示当前设定的任务只执行一次。
REPEAT_INTERVAL参数与标准JOB中的INTERVAL参数有很大区别,相比之下,REPEAT_INTERVAL参数的语法结构要复杂的多。其中最重要的是FREQ和INTERVAL两个关键字。
FREQ 关键字用来指定间隔的时间周期,可选参数有:YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, and SECONDLY,分别表示年、月、周、日、时、分、秒等单位。
INTERVAL 关键字用来指定间隔的频繁,可指定的值的范围从1-99。
REPEAT_INTERVAL=>'FREQ=DAILY;INTERVAL=1';表示每天执行一次,如果将INTERVAL改为7就表示每7天执行一次,效果等同于FREQ=WEEKLY;INTERVAL=1。
通常来讲,使用DBMS_SCHEDULER.CREATE_JOB创建一个JOB,上述参数基本是需要指定的。除此之外,还可以在CREATE_JOB时,指定下列参数:
NUMBER_OF_ARGUMENTS 指定该JOB执行时需要附带的参数的数量,默认值为0,当JOB_TYPE列值为PLSQL_BLOCK或CHAIN时,本参数必须设置为0,因为上述两种情况下不支持附带参数。
END_DATE 指定任务的过期时间,默认值为NULL。任务过期后,任务的STATE将自动被修改为COMPLETED,ENABLED被置为FALSE。如果该参数设置为空的话,
表示该任务永不过期,将一直按照REPEAT_INTERVAL参数设置的周期重复执行,直到达到设置的MAX_RUNS或MAX_FAILURES值。
JOB_CLASS 指定任务关联的CLASS,默认值为DEFAULT_JOB_CLASS。
ENABLED 指定任务是否启用,默认值为FALSE。FALSE状态表示该任务并不会被执行,除非被用户手动调用,或者用户将该任务的状态修改为TRUE。
AUTO_DROP 当该标志被置为TRUE时,ORACLE会在满足条件时自动删除创建的任务
任务已过期的条件;
任务最大运行次数已达MAX_RUNS的设置值;任务未指定REPEAT_INTERVAL参数,仅运行一次。
该参数的默认值即为TRUE。用户在执行CREATE_JOB过程时可以手动将该标志指定为FALSE,当参数值设置为FALSE时,即使满足上述提到的条件任务也不会被自动删除,这种情况下,唯一能够导致任务被删除的情况,就是用户主动调用DROP_JOB过程。
COMMENTS 设置任务的注释信息,默认值为NULL。
上面的例子创建了一个新的JOB,不过这个JOB与普通JOB不同,此时查询USER_JOBS视图是查不到刚刚创建的JOB的信息,
因为这个JOB是SCHEDULER管理的JOB。要查询SCHEDULER管理的JOS,应该通过USER_SCHEDULER_JOBS(当然ALL_SCHEDULER_JOBS和DBA_SCHEDULER_JOBS也可以),例如:
select job_name,job_type,job_action,to_char(start_date,'yyyy-mm-dd hh34:mi:ss'),repeat_interval,enabled,state from user_scheduler_jobs;
JOB_NAME JOB_TYPE JOB_ACTION TO_CHAR(START_DATE, REPEAT_INTERVAL ENABL STATE
-------------------- ---------------- ------------------------- ------------------- ------------------------------ ----- ---------------
INSERT_TEST_TBL STORED_PROCEDURE P_INSERTINTOTEST 2009-07-27 13:46:50 FREQ=DAILY;INTERVAL=1 FALSE DISABLED
不过,细心的朋友可能会发现,JOB虽然成功创建了,但却并未执行,这是怎么回事?其实原因很简单,还记的前面介绍CREATE_JOB过程时提到的ENABLED参数吗,当不显式指定时,
该参数的默认值为false,JOB自然不会运行了。如果遇到这类情形,如何修改呢?
需要通过下面的命令:
exec dbms_scheduler.enable(¨INSERT_TEST_TBL¨);
任务
参数
过程
管理
时间
用户
信息
关键
关键字
周期
就是
情况
数据
数据库
条件
运行
调度
普通
功能
命令
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器配置存储能力实训报告
网络安全证书无效怎么解决
mysql数据库降序 排列
广州天河软件开发案件
单位网络安全主要工作职责
软件开发参考文献m ol
软件开发及硬件采购合同
网络安全模式桌面崩溃
化工农药网络安全架构
马鞍山电脑服务器回收服务介绍
软件开发 费用预测
日照微信公众号软件开发解决方案
计算机网络安全的防范总数
云南网络安全工程师
西奥电梯服务器确认键
叮哒助手虚拟打卡连接服务器失败
平谷区品牌软件开发售后保障
网络安全改造的理由
csgo aug服务器
数据库恢复技术建立检查点
社交网络安全作文
利用群晖域名做服务器
上海通信软件开发服务参考价格
生物产业数据库
金蝶数据库导出软件
东软网络安全事业部总经理
数据库管理高级证书
美国中小学生网络安全
数据库常用的窗体控件
视频监控网络安全检查总结