Oracle Scheduler Jobs _ DBMS_SCHEDULER

oracle官方文档连接 : http://docs.oracle.com/cd/E11882_01/server.112/e25494/scheduse.htm#ADMIN12381 

测试

	--DBMS_SCHEDULER正在逐渐替换DBMS_JOB,11g为了功能的连续性所以支持DBMS_JOB
	--创建测试表
	create table tabtest0809 as Select operid From dual where 1=2; 
    Select * From tabtest0809; 
	--添加时间列,默认为当前时间,便于测试
	alter table tabtest0809 add xtdate date default sysdate;
	--测试过程
	CREATE OR REPLACE PROCEDURE protest0809 AS
    BEGIN
        INSERT INTO tabtest0809 (operid) VALUES (1);
        COMMIT;
    END;
--查看计划任务
	SELECT * FROM User_Scheduler_Jobs;
--!!注意,设置enabled=> TRUE时会立即执行一遍过程 
    BEGIN --创建计划任务 
        DBMS_SCHEDULER.CREATE_JOB(job_name => 'SchedulerJobTest0809', 
                                  job_type => 'STORED_PROCEDURE', --PLSQL_BLOCK,EXECUTABLE,CHAIN 
                                  job_action => 'protest0809', --过程名 
                                  start_date => SYSDATE, --起始时间 
                                  end_date => to_date('09-08-2016 16:00:00', 'dd-mm-yyyy hh24:mi:ss'), --结束时间,到时间后自动删除
                                  job repeat_interval => 'FREQ=MINUTELY;INTERVAL=2', --FREQ : 时间间隔 ;INTERVAL : 多少个时间间隔执行一次 
                                  comments => 'ceshi0809', --备注 
                                  enabled => TRUE); --如果是Enable的,则自动run了 
    END;
    BEGIN --启用
        dbms_scheduler.enable(NAME => 'SchedulerJobTest0809');
    END;
    BEGIN --失效
        dbms_scheduler.disable(NAME => 'SchedulerJobTest0809');
    END;
    BEGIN --更改属性
        dbms_scheduler.set_attribute(NAME => 'SchedulerJobTest0809', attribute => 'repeat_interval', VALUE => 'Freq=DAILY;ByHour=17');
    END;
    BEGIN
        DBMS_SCHEDULER.RUN_JOB(JOB_NAME => 'DSS.ETLJOB1, DSS.ETLJOB2', USE_CURRENT_SESSION => FALSE);
    END;

    BEGIN --删除
        --force 强制 (默认为false): true,首次stop任务失败后会强制调用STOP_JOB,然后drop任务.而为false时,不会强制调用STOP_JOB; 
        --defer 延期 : true,任务完成后再drop,force和defer是互斥的,同时设置会出错. 
        --commit_semantics  STOP_ON_FIRST_ERROR, 默认的,一旦报错就返回,同时提交上一个drop操作   
        --                  TRANSACTIONAL force必须是false,一旦出错回滚上一个drop操作     
        --                  ABSORB_ERRORS  不会报错,同时删除多个时会提交成功的.     
        dbms_scheduler.drop_job(job_name => 'SchedulerJobTest0809', defer => FALSE, force => FALSE, commit_semantics => 'TRANSACTIONAL');
    END;


 


repeat_interval参数:

FREQ 关键字用来指定间隔的时间周期,可选参数有:YEARLY(年), MONTHLY(月), WEEKLY(周), DAILY(日), HOURLY(时), MINUTELY(分), SECONDLY(秒)等单位。
INTERVAL 关键字用来指定间隔的频繁,可指定的值的范围从1-999。
BYHOUR  指定一天中的小时。可指定的值的范围从1-24。16,17,18就表示每天下午的4、5、6点。
BYDAY 关键字用来指定每周的哪天运行。
BYMONTHDAY 关键字用来指定每月中的哪一天。-1 表示每月最后一天。
BYMONTH  关键字用来指定每年的月份。
BYDATE 指定日期。0310就表示3月10日。
例如:
运行每星期五。(所有这三个例子是等价的。)
FREQ=DAILY; BYDAY=FRI;  
FREQ=WEEKLY; BYDAY=FRI;  
FREQ=YEARLY; BYDAY=FRI;  
设置任务隔一周运行一次,并且仅在周5运行:
FREQ=WEEKLY; INTERVAL=2; BYDAY=FRI;  
在每月的最后一天运行
FREQ=MONTHLY; BYMONTHDAY=-1;  
三月十日开。(两个例子是等价的)
FREQ=YEARLY; BYMONTH=MAR; BYMONTHDAY=10;  
FREQ=YEARLY; BYDATE=0310;  
设置任务每10隔天运行:
REPEAT_INTERVAL => 'FREQ=DAILY; INTERVAL=10';  
设置任务在每天的下午4、5、6点时运行:
REPEAT_INTERVAL => 'FREQ=DAILY; BYHOUR=16,17,18';  
设置任务在每月29日运行:
REPEAT_INTERVAL => 'FREQ=MONTHLY; BYMONTHDAY=29';  
设置任务在每年的最后一个周5运行:
REPEAT_INTERVAL => 'FREQ=YEARLY; BYDAY=-1FRI';  
设置任务每隔50个小时运行:
REPEAT_INTERVAL => 'FREQ=HOURLY; INTERVAL=50';  
repeat_interval => 'FREQ=HOURLY; INTERVAL=2'
每隔2小时运行一次job
repeat_interval => 'FREQ=DAILY'
每天运行一次job
repeat_interval => 'FREQ=WEEKLY; BYDAY=MON,WED,FRI"
每周的1,3,5运行job
repeat_interval => 'FREQ=YEARLY; BYMONTH=MAR,JUN,SEP,DEC; BYMONTHDAY=30'
每年的3,6,9,12月的30号运行job


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值