当前位置: 首页 > news >正文 全面学习ORACLE Scheduler特性(4)创建和管理Schedule news 来源:原创 2024/5/4 22:19:08 三、使用Schedules 10g 中新推出的SCHEDULER可能确实会让很多初接触的朋友感觉晕头晕脑,相比之前的jobs,SCHEDULER中新增的概念太多。比如说jobs,仍然可以理解成之前版本中的jobs,不过功能更加强大(注意10g中也仍然可以使用普通jobs,这是废话,相信看本篇文章的朋友目前应该还是这样在用),比如说program,指的是运行的程序(把要做什么单提出来了),比如说schedule,我将其翻译为调度(job我翻译为任务),定义执行的频率或者说周期。 3.1 创建和管理Schedule s Schedule ,中文直译的话应该理解成调度,从名字来看,它是一个逻辑实体(逻辑,还实体,好矛盾),就是说当创建了schedule之后,数据库中就肯定存在这一对象,只不过这一对象是用来描述job的执行周期。 创建schedule可以通过DBMS_SCHEDULER.CREATE_SCHEDULE过程,该过程支持的参数如下: SQL> desc dbms_scheduler.create_schedule; Parameter Type Mode Default? --------------- ------------------------ ---- -------- SCHEDULE_NAME VARCHAR2 IN START_DATE TIMESTAMP WITH TIME ZONE IN Y REPEAT_INTERVAL VARCHAR2 IN END_DATE TIMESTAMP WITH TIME ZONE IN Y COMMENTS VARCHAR2 IN Y 各参数分别代表含意如下: SCHEDULE_NAME :指定schedule名称,注意名称不能重复。 START_DATE :指定该调度的开始时间,可为空,当为空时表示该调度暂不起用。 REPEAT_INTERVAL :指定调度的执行频率或周期。 END_DATE :指定调度的结束时间,可为空,为空时就表示该调度将一直进行。 COMMENTS :注释信息。 这其中,比较有技术含量的是REPEAT_INTERVAL参数,对于这个参数大家应该不会太陌生,因为前面介绍Jobs,也曾经提到过同名的参数,Schedules中的REPEAT_INTERVAL参数和Jobs中的REPEAT_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。 下面,创建一个schedule,指定调度为每周一次的频率,执行脚本如下: SQL> begin 2 DBMS_SCHEDULER.CREATE_SCHEDULE ( 3 schedule_name => 'my_first_schedule', 4 start_date => SYSDATE, 5 repeat_interval => 'FREQ=WEEKLY; INTERVAL=1', 6 comments => 'Every 1 weeks'); 7 END; 8 / PL/SQL procedure successfully completed. 查询当前已经创建的schedules,可以通过*_SCHEDULER_SCHEDULES视图(含DBA_,ALL_,USER_),例如,查看当前用户拥有的schedules,执行语句如下: SQL> select schedule_name,repeat_interval from user_scheduler_schedules; SCHEDULE_NAME REPEAT_INTERVAL ------------------------------ ------------------------------ MY_FIRST_SCHEDULE FREQ=WEEKLY; INTERVAL=1 如果要修改schedule属性的话,也是使用DBMS_SCHEDULER.SET_ATTRIBUTE过程,该过程的调用方式前面已经多次演示过,这里就不再重复举例了,仅说明一点,对于schedule来说,能够修改的属性包括:REPEAT_INTERVAL、COMMENTS、END_DATE、START_DATE以及EVENT_SPEC。 至于删除schedule,再简单不过,执行DBMS_SCHEDULER.DROP_SCHEDULE过程即可,例如: SQL> EXEC DBMS_SCHEDULER.DROP_SCHEDULE('MY_FIRST_SCHEDULE'); PL/SQL procedure successfully completed. ======================================= 相关文章: 全面学习ORACLE Scheduler特性(5)Schedules调度Programs执行的Jobs 全面学习ORACLE Scheduler特性(6)设置Repeat Interval参数 Oracle创建删除用户、角色、表空间、导入导出数据库命令行方式总结 ORACLE计划(schedule)详解 Oracle初学者必知的100个疑问 WML学习(一):概述和基本规则 WML学习(二):基本格式和文件头 WML学习(四):锚和任务 WML学习(三):显示文本 WML学习(五):显示表单 WML学习(七):CGI编程 WML学习(六):事件 UDP数据传输实例 在线播放器代码大全 TcpListener和TcpClient简单例子 【Leetcode】101. 对称二叉树 CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo docker-consul Javascripit类型转换比较那点事儿,双等号(==) Netty 4.1 源代码学习:线程模型 use Google search engine vuex 学习笔记 01 基于Dubbo+ZooKeeper的分布式服务的实现 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的? 聊聊flink的TableFactory 配置 PM2 实现代码自动发布 前端技术周刊 2018-12-10:前端自动化测试 浅谈Golang中select的用法 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一) 如何使用Mybatis第三方插件--PageHelper实现分页操作 sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。 RecSys 2022 | 面向人岗匹配的双向选择偏好建模 油烟净化器电源安全,保障健康餐饮生活 #{}和${}的区别? (30)数组元素和与数字和的绝对差 (bean配置类的注解开发)学习Spring的第十三天 (pojstep1.3.1)1017(构造法模拟) (第二周)效能测试 (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910 (实战)静默dbca安装创建数据库 --参数说明+举例 (一)WLAN定义和基本架构转 (转)Linux下编译安装log4cxx .Net CF下精确的计时器 .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?... .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型 .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看) .net快速开发框架源码分享 .NET设计模式(11):组合模式(Composite Pattern) .NET是什么 /*在DataTable中更新、删除数据*/ /var/lib/dpkg/lock 锁定问题 @基于大模型的旅游路线推荐方案 [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504 [BZOJ1877][SDOI2009]晨跑[最大流+费用流] [bzoj4240] 有趣的家庭菜园
三、使用Schedules 10g 中新推出的SCHEDULER可能确实会让很多初接触的朋友感觉晕头晕脑,相比之前的jobs,SCHEDULER中新增的概念太多。比如说jobs,仍然可以理解成之前版本中的jobs,不过功能更加强大(注意10g中也仍然可以使用普通jobs,这是废话,相信看本篇文章的朋友目前应该还是这样在用),比如说program,指的是运行的程序(把要做什么单提出来了),比如说schedule,我将其翻译为调度(job我翻译为任务),定义执行的频率或者说周期。 3.1 创建和管理Schedule s Schedule ,中文直译的话应该理解成调度,从名字来看,它是一个逻辑实体(逻辑,还实体,好矛盾),就是说当创建了schedule之后,数据库中就肯定存在这一对象,只不过这一对象是用来描述job的执行周期。 创建schedule可以通过DBMS_SCHEDULER.CREATE_SCHEDULE过程,该过程支持的参数如下: SQL> desc dbms_scheduler.create_schedule; Parameter Type Mode Default? --------------- ------------------------ ---- -------- SCHEDULE_NAME VARCHAR2 IN START_DATE TIMESTAMP WITH TIME ZONE IN Y REPEAT_INTERVAL VARCHAR2 IN END_DATE TIMESTAMP WITH TIME ZONE IN Y COMMENTS VARCHAR2 IN Y 各参数分别代表含意如下: SCHEDULE_NAME :指定schedule名称,注意名称不能重复。 START_DATE :指定该调度的开始时间,可为空,当为空时表示该调度暂不起用。 REPEAT_INTERVAL :指定调度的执行频率或周期。 END_DATE :指定调度的结束时间,可为空,为空时就表示该调度将一直进行。 COMMENTS :注释信息。 这其中,比较有技术含量的是REPEAT_INTERVAL参数,对于这个参数大家应该不会太陌生,因为前面介绍Jobs,也曾经提到过同名的参数,Schedules中的REPEAT_INTERVAL参数和Jobs中的REPEAT_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。 下面,创建一个schedule,指定调度为每周一次的频率,执行脚本如下: SQL> begin 2 DBMS_SCHEDULER.CREATE_SCHEDULE ( 3 schedule_name => 'my_first_schedule', 4 start_date => SYSDATE, 5 repeat_interval => 'FREQ=WEEKLY; INTERVAL=1', 6 comments => 'Every 1 weeks'); 7 END; 8 / PL/SQL procedure successfully completed. 查询当前已经创建的schedules,可以通过*_SCHEDULER_SCHEDULES视图(含DBA_,ALL_,USER_),例如,查看当前用户拥有的schedules,执行语句如下: SQL> select schedule_name,repeat_interval from user_scheduler_schedules; SCHEDULE_NAME REPEAT_INTERVAL ------------------------------ ------------------------------ MY_FIRST_SCHEDULE FREQ=WEEKLY; INTERVAL=1 如果要修改schedule属性的话,也是使用DBMS_SCHEDULER.SET_ATTRIBUTE过程,该过程的调用方式前面已经多次演示过,这里就不再重复举例了,仅说明一点,对于schedule来说,能够修改的属性包括:REPEAT_INTERVAL、COMMENTS、END_DATE、START_DATE以及EVENT_SPEC。 至于删除schedule,再简单不过,执行DBMS_SCHEDULER.DROP_SCHEDULE过程即可,例如: SQL> EXEC DBMS_SCHEDULER.DROP_SCHEDULE('MY_FIRST_SCHEDULE'); PL/SQL procedure successfully completed. =======================================