Oracle Job定时任务的用法

本文介绍了如何使用Oracle数据库的Job功能来解决ETL任务的调度和监控问题。通过创建表、存储过程和定时任务,展示了如何设置不同间隔的定时执行,如每分钟、每天、特定时间等,为数据工程师提供了简单有效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    长期跟ETL(Extract & Transform & Load)过不去的数据攻城狮们总会遇到任务调度和监控问题,刨去商业ETL工具之外,ORACLE数据库还给我们提供了一份小作坊的解决方案:Job(定时任务)。下面来看看这一份简单例子:

1、新建一张表用于存放ETL结果

create table job_test(a VARCHAR2(200));

2、新建存储过程,向结果表写入数据

create or replace procedure proc_job_test as
begin
  insert into job_test(a) values (to_char(sysdate, 'yyyyMMdd hh24:mi:ss'));
  commit;
end;

3、创建Job定时任务,实现定时任务调度

BEGIN
  DBMS_JOB.SUBMIT(  
        JOB => :job,   
        WHAT => 'proc_job_test;',  
        NEXT_DATE => to_date('23-10-2020 03:00:00', 'dd-mm-yyyy hh24:mi:ss'),  --初次执行时间
        INTERVAL => 'trunc(sysdate,'mi')+1/(24*60)' --每隔1分钟执行一次
      );  
  commit;
end;

--实用配置:

0)NEXT_DATE => sysdate+3/(24*60)

1)INTERVAL => ‘trunc(sysdate,'mi')+1/(24*60)’  --每隔1分钟执行一次

2)INTERVAL => ‘TRUNC(SYSDATE+1)+(3*60)/(24*60)'  --每天执行一次

每天早上8点30分         'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'     
每星期二中午12点         'NEXT_DAY(TRUNC(SYSDATE ), ''''TUESDAY'''' ) + 12/24'    
每个月第一天的午夜12点    'TRUNC(LAST_DAY(SYSDATE ) + 1)'     
每个季度最后一天的晚上11点 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), ''Q'' ) -1/24'    
每星期六和日早上6点10分    'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'   
每3秒钟执行一次             'sysdate+3/(24*60*60)'   
每2分钟执行一次           'sysdate+2/(24*60)'   
Interval => 'TRUNC(sysdate,'mi') + 1/ (24*60)' --每分钟执行  
interval => 'sysdate+1/(24*60)'  --每分钟执行  
interval => 'sysdate+1'    --每天  
interval => 'sysdate+1/24'   --每小时  
interval => 'sysdate+2/24*60' --每2分钟  
interval => 'sysdate+30/24*60*60'  --每30秒  
Interval => 'TRUNC(sysdate+1)+1/24'  --每天凌晨1点执行  
Interval => 'TRUNC(SYSDATE+1)+(8*60+30)/(24*60)'  --每天早上8点30分执行  
Interval => 'TRUNC(next_day(sysdate,'星期一'))+1/24'  --每周一凌晨1点执行  
Interval => 'TRUNC(next_day(sysdate,1))+2/24'  --每周一凌晨2点执行  
Interval => 'TTRUNC(LAST_DAY(SYSDATE)+1)'  --每月1日凌晨0点执行  
Interval => 'TRUNC(LAST_DAY(SYSDATE))+1+1/24'  --每月1日凌晨1点执行  
Interval => 'TRUNC(ADD_MONTHS(SYSDATE,3),'q')'  --每季度的第一天凌晨0点执行  
Interval => 'TRUNC(ADD_MONTHS(SYSDATE,3),'q') + 1/24'  --每季度的第一天凌晨1点执行  
Interval => 'TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24'  --每季度的最后一天的晚上11点执行  
Interval => 'ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24'  --每年7月1日和1月1日凌晨1点  
Interval => 'ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24'  --每年1月1日凌晨1点执行  

4、SELECT * FROM JOB_TEST;  --查看目标表的跑数结果

5、查看所有的JOB配置 SELECT* FROM ALL_JOBS;

5、查看job执行是否成功

select t.*
  from all_scheduler_job_run_details t
 where t.job_name in ('JOB_TEST')  --job名字
 order by log_date desc;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值