Oracle Job定时任务的使用详解

转载 2018年04月14日 22:56:52

转自:http://www.cnblogs.com/Chestnuts/p/7068456.html

Oracle中的job能为你做的就是在你规定的时间格式里执行存储过程,定时执行一个任务 。

下面是一个小案例,定时每15分钟向一张表插入一条数据

一、步骤1
1.创建一张测试表
-- Create table
create table A8
(
  a1 VARCHAR2(500)
)
tablespace DSP_DATA
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );

 2.创建存储过程 实现向测试表插入数据

create or replace procedure proc_add_test as
begin
  insert into a8 values (to_char(sysdate, 'yyyy-mm-dd hh:mi'));/*向测试表插入数据*/
  commit;
end;

3.创建job定时任务  实现自动调用存储过程(当前时间 17:03)

declare
  job number;
BEGIN
  DBMS_JOB.SUBMIT(  
        JOB => job,  /*自动生成JOB_ID*/  
        WHAT => 'proc_add_test;',  /*需要执行的存储过程名称或SQL语句*/  
        NEXT_DATE => sysdate+3/(24*60),  /*初次执行时间-下一个3分钟*/  
        INTERVAL => 'trunc(sysdate,''mi'')+1/(24*60)' /*每隔1分钟执行一次*/
      );  
  commit;
end;

4.也就是应该从17:06开始 每隔1分钟执行一次存储过程   下面是截止17:12分的测试表的数据


二、步骤2

1.可以通过查询系统表查看该job信息

select * from user_jobs;

2.手动sql调用job   (直接调用job可以忽略开始时间)

 begin
   DBMS_JOB.RUN(40); /*40 job的id*/
 end;

3.删除任务

begin
  /*删除自动执行的job*/
  dbms_job.remove(40);
end;

4.停止job

begin
dbms_job.broken(v_job,true,next_date);        /*停止一个job,里面参数true也可是false,next_date(某一时刻停止)也可是sysdate(立刻停止)。   */
commit;
end;


5.修改间隔时间

begin
dbms_job.interval(job,interval);
commit;
end;

6.修改下次执行时间

begin
dbms_job.next_date(job,next_date);
commit;
end;

7.修改要执行的操作 

begin
dbms_job.what(jobno,'sp_fact_charge_code;');  --修改某个job名
commit;
end;

 

三 其他知识

1.存job信息的表user_jobs主要字段说明

 

列名数据类型解释
JOBNUMBER任务的唯一标示号
LOG_USERVARCHAR2(30)提交任务的用户
PRIV_USERVARCHAR2(30)赋予任务权限的用户
SCHEMA_USERVARCHAR2(30)对任务作语法分析的用户模式
LAST_DATEDATE最后一次成功运行任务的时间
LAST_SEC VARCHAR2(8)如HH24:MM:SS格式的last_date日期的小时,分钟和秒
THIS_DATEDATE 正在运行任务的开始时间,如果没有运行任务则为null
THIS_SECVARCHAR2(8) 如HH24:MM:SS格式的this_date日期的小时,分钟和秒
NEXT_DATEDATE下一次定时运行任务的时间
NEXT_SECVARCHAR2(8)如HH24:MM:SS格式的next_date日期的小时,分钟和秒
TOTAL_TIMENUMBER该任务运行所需要的总时间,单位为秒
BROKENVARCHAR2(1)标志参数,Y标示任务中断,以后不会运行
INTERVALVARCHAR2(200)用于计算下一运行时间的表达式
FAILURESNUMBER任务运行连续没有成功的次数
WHAT VARCHAR2(2000)执行任务的PL/SQL块

 

2.INTERVAL参数常用值示例

 

  1. 每天午夜12点            ''TRUNC(SYSDATE + 1)''     
  2. 每天早上8点30分         ''TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)''     
  3. 每星期二中午12点         ''NEXT_DAY(TRUNC(SYSDATE ), ''''TUESDAY'''' ) + 12/24''     
  4. 每个月第一天的午夜12点    ''TRUNC(LAST_DAY(SYSDATE ) + 1)''     
  5. 每个季度最后一天的晚上11点 ''TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), ''Q'' ) -1/24''     
  6. 每星期六和日早上6点10分    ''TRUNC(LEAST(NEXT_DAY(SYSDATE, ''''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)''    
  7. 每3秒钟执行一次             'sysdate+3/(24*60*60)'   
  8. 每2分钟执行一次           'sysdate+2/(24*60)'   
  9.   
  10. 1:每分钟执行  
  11. Interval => TRUNC(sysdate,'mi') + 1/ (24*60) --每分钟执行  
  12. interval => 'sysdate+1/(24*60)'  --每分钟执行  
  13. interval => 'sysdate+1'    --每天  
  14. interval => 'sysdate+1/24'   --每小时  
  15. interval => 'sysdate+2/24*60' --每2分钟  
  16. interval => 'sysdate+30/24*60*60'  --每30秒  
  17. 2:每天定时执行  
  18. Interval => TRUNC(sysdate+1)  --每天凌晨0点执行  
  19. Interval => TRUNC(sysdate+1)+1/24  --每天凌晨1点执行  
  20. Interval => TRUNC(SYSDATE+1)+(8*60+30)/(24*60)  --每天早上8点30分执行  
  21. 3:每周定时执行  
  22. Interval => TRUNC(next_day(sysdate,'星期一'))+1/24  --每周一凌晨1点执行  
  23. Interval => TRUNC(next_day(sysdate,1))+2/24  --每周一凌晨2点执行  
  24. 4:每月定时执行  
  25. Interval =>TTRUNC(LAST_DAY(SYSDATE)+1)  --每月1日凌晨0点执行  
  26. Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24  --每月1日凌晨1点执行  
  27. 5:每季度定时执行  
  28. Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q')  --每季度的第一天凌晨0点执行  
  29. Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q') + 1/24  --每季度的第一天凌晨1点执行  
  30. Interval => TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24  --每季度的最后一天的晚上11点执行  
  31. 6:每半年定时执行  
  32. Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24  --每年7月1日和1月1日凌晨1点  
  33. 7:每年定时执行  
  34. Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24  --每年1月1日凌晨1点执行  

Oracle 数据库采用Job 实现定时任务

 Oracle 数据库采用Job 实现定时任务      最近在工作中有这样一个需要,就是在特定的时间进行数据的备份以提高系统性能.因此了解了关于在Oralce 数据中实现定时任务的方法: 1 .定义...
  • crazy_rain
  • crazy_rain
  • 2007-01-17 19:14:00
  • 5197

Oracle中的job的定时任务

oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。  一、查询系统中的job,可以查询视图 --相关视图 select * from dba_jobs; sele...
  • YSC1123
  • YSC1123
  • 2016-01-28 12:51:33
  • 4408

Oracle 创建、暂停、更改、删除 定时任务job

Oracle 定时任务 job
  • sinat_35626559
  • sinat_35626559
  • 2017-12-27 15:30:38
  • 235

Oracle Job定时任务

  • 2014年04月28日 14:22
  • 29KB
  • 下载

Oracle中的定时执行任务job

Oracle中的定时执行任务job2008-12-30 14:49众所周知,一般操作系统会提供定时执行任务的方法,例如:Unix平台上提供了 让系统定时执行任务的命令Crontab。但是,对于某些需求...
  • suncrafted
  • suncrafted
  • 2009-02-12 12:56:00
  • 16219

Oracle定时JOB任务异常退出排查查看Oracle日志文件

找日志路径:/u01/app/oracle/diag/rdbms/itgs/itgs1/trace/itgs1_ora_15432.trc 查询oarcle的日志文件路径sql:  SQL> s...
  • superhoy
  • superhoy
  • 2016-12-01 17:45:58
  • 2822

Oracle JOB 定时任务

  • 2011年12月18日 14:51
  • 651B
  • 下载

oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。

oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。   一、查询系统中的job,可以查询视图   --相关视图 select * f...
  • fu_pengfei_love822
  • fu_pengfei_love822
  • 2017-05-04 17:30:58
  • 3216

Oracle定时调度(schedule和job结合)

--创建定时调度 begin sys.dbms_scheduler.create_schedule( repeat_interval => 'FREQ=DAILY;BYHOUR=02;BYMI...
  • shinyprince
  • shinyprince
  • 2014-09-11 17:57:34
  • 738
收藏助手
不良信息举报
您举报文章:Oracle Job定时任务的使用详解
举报原因:
原因补充:

(最多只允许输入30个字)