全面学习ORACLE Scheduler特性(12)使用Windows和Window Groups
七、使用Windows
此Windows非彼Windows,通常说的Windows是指盖首富的操作系统,而此处所说的Windows,是指SCHEDULER特性中的一个子项。在SCHEDULER中,WINDOW对应的是一个时间窗口的概念。
我们知道普通的jobs是没有运行时间管理地概念的,就是说一个job启动之后,用户只能被动地等待其执行,一直到其执行地任务完成(或DBA手动kill对应进程),在此期间,执行的job将与其它活动的进程共同竞争当前系统中的资源。对于大型数据库系统,系统资源那可是相当宝贵的无形资产哪,企能谁说用就用、想什么时候用就什么时候用,没点儿计划没点儿节制这还了得。你还别说,在9i之前,还真就是这么回事儿,谁想用就用,谁也管不了,其中表示最甚的就是job。你是否想起了Job Classes,没错定义Job Classes确实可以控制job能够使用的资源,不过单单使用Job Classes并不能灵活的控制job在合适的时间使用适当的资源。进入10g之后,SCHEDULER中提供了WINDOW,事情终于有了缓解。
WINDOW 可以指定一个时间窗口,在此期间,通过与Job Classes的搭配组合,能够有效控制job执行时支配(使用)的资源。比如说job通常是在凌晨服务器负载较低时执行,那么就可以通过WINDOW设置在此期间,允许jobs使用更多的系统资源,而到了工作时间后,如果job仍未执行完成,为其分配另一个有限的资源,以尽可能降低job执行占用的资源对其它业务的影响。
1、创建Window
创建Window有一个专门的过程:DBMS_SCHEDULER.CREATE_WINDOW进行处理,该过程有两种调用方式,如下:
-- 基于SCHEDULE
DBMS_SCHEDULER.CREATE_WINDOW (
window_name IN VARCHAR2,
resource_plan IN VARCHAR2,
schedule_name IN VARCHAR2,
duration IN INTERVAL DAY TO SECOND,
window_priority IN VARCHAR2 DEFAULT ¨LOW¨,
comments IN VARCHAR2 DEFAULT NULL);
-- 基于定义的调度
DBMS_SCHEDULER.CREATE_WINDOW (
window_name IN VARCHAR2,
resource_plan IN VARCHAR2,
start_date IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,
repeat_interval IN VARCHAR2,
end_date IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,
duration IN INTERVAL DAY TO SECOND,
window_priority IN VARCHAR2 DEFAULT ¨LOW¨,
- comments IN VARCHAR2 DEFAULT NULL);
刨开那些看着眼熟的,已经认识的,看参数名就知道其所代表含义的之外,下列几个参数可能需要关注:
- Resource_plan :这一参数用来指定要使用的资源使用计划,当打开WINDOW时,就会自动按照指定的资源使用计划中的设置分配资源,当WINDOW关闭时(没错,window是会关闭的,要不怎么说有效控制资源的使用情况泥),系统会自动切换回适当资源计划。这个参数在执行过程时甚至可以指定为NULL或空值¨¨,当设置为NULL时,就表示使用默认的资源计划,当设置为空值¨¨时,表示禁用资源使用计划。
- Duration :指定WINDOW的有效期,比如说指定为interval ¨5¨ hour就表示5个小时,该参数在执行过程时必须指定参数值,否则创建会报错。
- Window_priority :该参数用来指定WINDOW的优先级。因为在相同时间只有一个WINDOW有效,因此如果在创建WINDOW时发现重叠的情况,ORACLE就需要根据这一参数指定的规则,来确定优先级,说白了就是先把资源给谁用,这一参数有两个可选值:HIGH或LOW,默认值为LOW。
正如前面CREATE_WINDOW过程语法结构显示的那样,调用该过程有两种方式,差异就在于是指定现有定义好的调度SCHEDULE,还是在执行过程时指定调度,目标和实现的功能都是相同的,这里仅做示例,咱就挑个最复杂的方式吧,执行过程时指定调度,执行脚本如下:
SQL> begin
2 dbms_scheduler.create_window(window_name => ¨my_first_wd1¨,
3 resource_plan => null,
4 start_date => sysdate,
5 repeat_interval => ¨FREQ=DAILY; INTERVAL=5¨,
6 duration => interval ¨1¨ hour);
7 end;
8 /
- PL/SQL procedure successfully completed.
查询当前拥有的WINDOW,可以通过*_SCHEDULER_WINDOWS视图(注意只有DBA和ALL,没有USER,因为所有定义的WINDOW都属于SYS用户)。除了*_SCHEDULER_WINDOWS视图显示当前所有WINDOW外,还有:
- *_SCHEDULER_WINDOW_DETAILS 视图:显示WINDOW的详细信息;
- *_SCHEDULER_WINDOW_LOG 视图:显示WINDOW的日志,比如打开和关闭;
2、管理Window
通过前面那些SCHEDULER对象的学习,相当大家已经了解了ORACLE SCHEDULER中对象的特点,对于多数对象的管理,不外乎下列几种:
- 修改对象属性,使用SET_ATTRIBUTE过程;
SQL> exec dbms_scheduler.set_attribute(¨sys.my_first_wd1¨,¨start_date¨,sysdate+1);
- PL/SQL procedure successfully completed.
- ENABLE 对象,使用ENABLE过程;
SQL> exec dbms_scheduler.enable(¨sys.my_first_wd1¨);
- PL/SQL procedure successfully completed.
- DISABLE 对象,使用DISABLE过程;
SQL> exec dbms_scheduler.disable(¨sys.my_first_wd1¨);
- PL/SQL procedure successfully completed.
- 删除对象,使用DROP_WINDOW过程;
SQL> exec dbms_scheduler.drop_window(¨sys.my_first_wd1¨);
- PL/SQL procedure successfully completed.
除此之外呢,对于WINDOW对象来说,由于其特殊作用,又有:
- 手动打开WINDOW,使用OPEN_WINDOW过程;
注意WINDOW是依赖于其调度的,因此在手动打开WINDOW时,必须为其指定duration属性:
SQL> exec dbms_scheduler.open_window(¨sys.my_first_wd1¨,interval ¨1¨ hour);;
- PL/SQL procedure successfully completed.
- 手动关闭WINDOW,使用CLOSE_WINDOW过程;
SQL> exec dbms_scheduler.close_window(¨sys.my_first_wd1¨);
- PL/SQL procedure successfully completed.
关闭和打开WINDOW,都会记录日志,大家可以通过*_SCHEDULER_WINDOW_LOG视图中获取这部分信息。
3、关于WINDOW GROUP
除了WINDOW外,还有一个与WINDOW有关系的叫WINDOW GROUP,一个WINDOW GROUP可能包 含多个WINDOW。使用WINDOW GROUP的本意是这样的,假如说某个job执行的时间比较长,甚至全天24小时都在执行,对于这类job,单个WINDOW很难有效调整其资源占用,这时间呢,就可以通过设置一个WINDOW GROUP,该WINDOW GROUP中包含了多个WINDOW,每个WINDOW分别负责不同时间点时的资源使用计划。
然后在创建JOB时,指定schedule_name参数为WINDOW GROUP的名称(想不到SCHEDULE_NAME还能指定为WINDOW GROUP哪,其实何止WINDOW GROUP,还可以直接指定成WINDOW哪),这样,就可以通过很简单的方式,将job与window联系在一起了。
WINDOW GROUP 的创建和管理与前面介绍的方式极其相似:
- 创建,使用CREATE_WINDOW_GROUP过程;
- 删除,使用DROP_WINDOW_GROUP过程;
- 添加WINDOW成员,使用ADD_WINDOW_GROUP_MEMBER过程;
- 删除WINDOW成员,使用REMOVE_WINDOW_GROUP_MEMBER过程;
- 启用,使用ENABLE过程;
- 禁用,使用DISABLE过程;
这些过程的调用方式也都非常简单,不多说了,我忒忙,感兴趣的朋友不妨自行尝试。
全面学习ORACLE Scheduler特性(12)使用Windows和Window Groups的更多相关文章
- 全面学习ORACLE Scheduler特性(5)Schedules调度Programs执行的Jobs
3.2 Schedules调度Programs执行的Jobs 通过schedule调度program的执行的job,看到这样的形容是不是让你彻底晕头了,就说明你还是没搞明白10g中SCHEDULERS ...
- 全面学习ORACLE Scheduler特性(8)Application抛出的Events
4.2 Application抛出的Events 首先要说明,这里所说的Application是个代词,即可以表示ORACLE数据库之外的应用程序,也可以是ORACLE数据库中的PROCEDURE等对 ...
- 全面学习ORACLE Scheduler特性(7)Scheduler抛出的Events
四.使用Events Event直译对应的中文解释是指事件,不过单纯讲事件毕竟太抽象了,举个示例来形容吧.A(对应某个应用程序,或者是ORACLE中的进程)在干活时突然眉头一皱说道,不好,前方有情况, ...
- 全面学习ORACLE Scheduler特性(1)创建jobs
所谓出于job而胜于job,说的就是Oracle 10g后的新特性Scheduler啦.在10g环境中,ORACLE建议使用Scheduler替换普通的job,来管理任务的执行.其实,将Schedul ...
- 全面学习ORACLE Scheduler特性(11)使用Job Classes
六.使用Job Classes Job Classes 相当于创建了一个job组,DBA可以将那些具有相同特性的job,统统放到相同的Job Classes中,然后通过对Job Class应用ORAC ...
- 全面学习ORACLE Scheduler特性(9)创建Chains
五.使用Chains 今天要来认识一位新同学:CHAIN(注意不要敲成CHINA).CHAIN可以被视做一组Programs的复合,举个简单的例子:运行PROGRAM:A以及PROGRAM:B,如果成 ...
- 全面学习ORACLE Scheduler特性(6)设置Repeat Interval参数
3.3 设置Repeat Interval Job 和Schedule中REPEAT_INTERVAL参数都是用来控制执行的频率或周期,虽然说周期是一个时间性概念,不过REPEAT_INTERVAL指 ...
- 全面学习ORACLE Scheduler特性(3)使用Programs
二.使用Programs 在论坛中偶尔见过有人讨论如何在ORACLE中执行操作系统命令,或是ORACLE数据库外的应用.应该说在9i及之前的版本中,虽然说并非完全无法实现(其实还是有多种方式能够变相实 ...
- 全面学习ORACLE Scheduler特性(2)管理jobs
1.2 管理Jobs 1.2.1 启用Jobs 前面创建JOB时,由于未显式的指定ENABLED参数,因此即使指定了START_DATE,不过默认情况下JOB不会自动执行.对于这种情况,DBMS_ ...
随机推荐
- Thinkphp5.0 的Db操作
Thinkphp5.0 的Db操作 连接操作: <?php namespace app\index\controller; use think\Controller; use think\Db; ...
- 权限框架之Shiro详解(非原创)
文章大纲 一.权限框架介绍二.Shiro基础介绍三.Spring Boot整合Shiro代码实战四.项目源码与资料下载五.参考文章 一.权限框架介绍 1. 什么是权限管理 权限管理属于系统安全 ...
- 多线程TcpServer
多线程TcpServer自己的EventLoop只用来接收新连接(即TcpServer所属线程的EventLoop只监听listen fd),而新连接会用其他EventLoop来执行IO(即每个新Tc ...
- vi,vim的基本使用方法
"i”插入 "/" 查找 "wq"保存退出 "q!"不保存退出
- HTML5超科幻个人主页
在线演示地址:http://me.cpwl.site 备用地址:http://cpwl.sinaapp.com 部分截图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkb ...
- Android网络爬虫程序(基于Jsoup)
摘要:基于 Jsoup 实现一个 Android 的网络爬虫程序,抓取网页的内容并显示出来.写这个程序的主要目的是抓取海投网的宣讲会信息(公司.时间.地点)并在移动端显示,这样就可以随时随地的浏览在学 ...
- 99_leetcode_Best Time to Buy and sell Stock
Say you have an array for which the ith element is the price of a given stock on day i. If you were ...
- RK3288获取摄像头的Sensor ID【原创】
平台信息:内核:linux3.0.68 系统:android/android6.0平台:RK3288 作者:庄泽彬(欢迎转载,请注明作者) 邮箱:2760715357@qq.com 说明:通过I2C总 ...
- mysqldump 导出数据表,和数据
目录 导出数据库表与数据 导出数据表数据 导出多个表数据 只导出数据 只导出创建表的数据 导出数据库表与数据 mysqldump -uroot -p caomall>tmp.sql 导出数据表数 ...
- ubuntu下的root的创建进入与退出
创建: 在终端中输入:sudo passwd rootEnter new UNIX password: (在这输入你的密码)Retype new UNIX password: (确定你输入的密码)pa ...