查看: 1376|回复: 0

[Oracle数据库] 利用DBMS_SCHEDULER进行JOB的创建与使用

发表于 2017-1-3 12:00:02
游戏辅助AD
一、DBMS_SCHEDULER说明及介绍 DBMS_SCHEDULER包是提供调度函数和存储过程的集合,并且能被PL/SQL程序所调度。为何学习这个包呢,原因是之前我们在使用JOB制定定时任务时,通常使用DBMS_JOB包,该包使用过程中,指定时间参数时较为麻烦,所以从10G开始,ORACLE提供了新的包DBMS_SCHEDULER。下面我们就来使用它创建并执行一个JOB。
二、小实验 1.创建测试表


2.创建测试存储过程
3.测试执行存储过程
4.创建测试JOB,定义每5分钟执行一次存储过程pc_sam
5.验证每5分钟后,确实有条新数据
6.删除测试JOB

三、数据循环周期设置与实例 1.官网给出时间频率的参数说明,更加详细可参考官网
http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_sched.htm#BABFBCEF

2.实例 (1)每周5的时候运行,以下3条实现功能一样 REPEAT_INTERVAL => 'FREQ=DAILY; BYDAY=FRI'; REPEAT_INTERVAL => 'FREQ=WEEKLY; BYDAY=FRI'; REPEAT_INTERVAL => 'FREQ=YEARLY; BYDAY=FRI';

(2)每隔一周运行一次,仅在周5运行 REPEAT_INTERVAL => 'FREQ=WEEKLY; INTERVAL=2; BYDAY=FRI’;

(3)每月最后一天运行 REPEAT_INTERVAL => 'FREQ=MONTHLY; BYMONTHDAY=-1';

(4)在3月10日运行 REPEAT_INTERVAL => 'FREQ=YEARLY; BYMONTH=MAR; BYMONTHDAY=10’; REPEAT_INTERVAL => 'FREQ=YEARLY; BYDATE=0310';

(5)每10隔天运行 REPEAT_INTERVAL => 'FREQ=DAILY; INTERVAL=10’;

(6)每天的下午4、5、6点时运行 REPEAT_INTERVAL => 'FREQ=DAILY; BYHOUR=16,17,18’;

(7)每月29日运行 REPEAT_INTERVAL => 'FREQ=MONTHLY; BYMONTHDAY=29’;

(8)每年的最后一个周5运行 REPEAT_INTERVAL => 'FREQ=YEARLY; BYDAY=-1FRI’;
(9)每隔50个小时运行 REPEAT_INTERVAL => 'FREQ=HOURLY; INTERVAL=50’;


3.查看执行时间周期,可以根据定义好的FREQ来推算出后10次的时间
脚本如下:

example: 每年的最后一个周5,6点30分运行
四、总结 通过简单的学习与实践,我对DBMS_SCHEDULER包中的CREATE_JOB过程有了基本认识。但这些还是远远不够的,面对今后的挑战,学习的脚步不能停。Where there is a will, there is a way.




回复

使用道具 举报