关闭

oracle数据库定时任务

标签: 定时任务oracle存储过程
109人阅读 评论(0) 收藏 举报
分类:

不久前,做的项目中需要用到定时任务(有两种实现方式:应用程序,数据库。),决定采用数据库的定时任务。关于数据库定时任务的资料,网上有很多文章,但当自己在设计时,并没有仅通过一篇文章就解决问题。于是决定综合网上资料和自己的项目,写一篇oracle数据库自带的job来实现定时任务。

一、定时任务的创建、启动、修改、停止、删除

1、首先需创建一存储过程,然后让定时任务按照设定的时间和时间间隔去执行存储过程。

variable jobno number;——系统会自动分配一个任务号jobno(在此段代码执行完成后,即可显示出jobno,如22)
dbms_job.submit(:jobno, ——自动分配的jobno号 ,前边必须有:号 
       your_procedure;',——需执行的存储过程, ';'不能省略 varchar类型
        next_date, ——下次执行时间  date类型
        'interval' ,——每次间隔时间,interval以天为单位 varchar类型(interval的参数问题,可参见第二部分)

no_parse——可不配置 布尔类型

); 

no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE 指示此PL/SQL代码在它第一次执行时应进行语法分析, 而FALSE指示本PL/SQL代码应立即进行语法分析。

上述执行完成后,会显示

PL/SQL procedure successfully completed
jobno
---------
22

如:

variable jobno numberb;

begin

dbms_job.submit(:jobno,'proce_receivedOrder;',sysdate,'TRUNC(sysdate) + 1 +14 / (24)'); (每天14点执行)

commit;
end;

2、启动定时任务

执行如下代码:

begin 
dbms_job.run(
22);(此处22为,第一步执行后,显示出来的jobno)
commit;
end;

3、查看定时任务

select job, next_date, next_sec, failures, broken from user_jobs;

如果信息正确,即创建成功。

4、修改定时任务:

1) 修改要执行的操作: dbms_job.what(jobno, what);  
2) 修改下次执行时间:dbms_job.next_date(jobno, next_date);  
3) 修改间隔时间:dbms_job.interval(jobno, interval);

如:

begin

dbms_job.next_date (22, TRUNC(sysdate) + 1 +14 / (24) );

commit;

end;

5、停止和删除定时任务

1)停止: dbms_job.broken(jobno, broken, nextdate); –broken为boolean值 

如:

begin

dbms_job.broken(22,true,sysdate);
commit;

end;

2)删除:dbms_job.remove(jobno); 

如:

begin

dbms_job.remove(22);
commit;

end;

二、interval参数

1:每分钟执行 TRUNC(sysdate,'mi') + 1/(24*60)

2:每天定时执行

例如:每天的凌晨1点1分1秒执行TRUNC(sysdate) + 1 +1/(24)+1/24/60+1/24/60/60
3:每周定时执行
例如:每周一凌晨1点执行

TRUNC(next_day(sysdate,2))+2/24 --星期一,一周的第二天

TRUNC(next_day(sysdate,'星期一'))+1/24
4:每月定时执行
例如:每月1日凌晨1点执行
TRUNC(LAST_DAY(SYSDATE))+1+1/24
5:每季度定时执行
例如每季度的第一天凌晨1点执行
TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
6:每半年定时执行
例如:每年7月1日和1月1日凌晨1点
ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
7:每年定时执行
例如:每年1月1日凌晨1点执行
ADD_MONTHS(trunc(sysdate,'yyyy'), 12)+1/24

8.每个小时的第15分钟运行

例如:8:15,9:15,10:15…:

trunc(sysdate,'hh')+(60+15)/(24*60)。

注:TRUNC(for dates) 函数一些说明

TRUNC函数按一定格式截取日期的值。 
语法如下: 
TRUNC(date[,fmt]) 其中fmt参数可无,默认为截取天
1)按年截取显示当年第一天
select  TRUNC(sysdate,'yyyy')  from dual 
2)按月截尾 显示当年当月第一天
select  TRUNC(TO_DATE('2008-03-01 08:23','yyyy-mm-dd hh:mi'),'mm')  from dual 
3)按日截尾 显示当年当月当日
select  TRUNC(TO_DATE('2008-03-01 08:23','yyyy-mm-dd hh:mi'),'dd')  from dual 
4)按时截尾 显示当年当月当日当时0分0秒
select  TRUNC(TO_DATE('2008-03-01 08:23','yyyy-mm-dd hh:mi'),'hh')  from dual 
5)按分截尾 显示当年当月当日当时当分0秒
select  TRUNC(TO_DATE('2008-03-01 08:23','yyyy-mm-dd hh:mi'),'mi')  from dual 

0
0
查看评论

ORACLE数据库定时任务

用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务。 一、dbms_job涉及到的知识点 1、创建job: variable jobno number; dbms_job.submit(:jobno, —-job号     &#...
  • u013531928
  • u013531928
  • 2015-08-17 12:31
  • 3149

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

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

oracle创建存储过程定时任务时报错的问题

写了四张表的存储过程,并要分别建四个定时任务去执行这四个过程,其中三个存储过程创建,然后创建定时任务,没问题,维有一个始终报错,报的错也看不懂是啥。 于是就在网上查找相关问题码,最后找到一篇文章说是编译存储过程时有错误导致定时任务无法创建, 于是就在网上查找怎么查看编译错误, 后来找到,原来在...
  • zyc2009
  • zyc2009
  • 2017-11-09 15:32
  • 65

oracle的定时任务demo

1、创建测试表 [sql] create table job_test(id integer,add_time date);   2、创建过程 [sql] create or...
  • mazhihao99
  • mazhihao99
  • 2017-05-11 12:28
  • 82

oracle数据库定时任务

常要oracle数据库定时的自动执行一些脚本,或做数据库备份,或做数据的提炼,或做数据库的性能优化,包括重建索引等等的工作,这时需要用到一个函数dbms_job.submit,来完成Oracle定时器Job时间的处理上。使用dbms_job.submit这个函数,我们只需要考虑两个事情:安排某一任务...
  • yztezhl
  • yztezhl
  • 2015-03-26 17:11
  • 245

oracle数据库做定时任务(插入) 笔记

--创建测试表 create table test_user(name varchar2(20),age int,addr varchar2(50)); --创建一个自定义过程 create or replace procedure test_procedureas  i...
  • longmapang
  • longmapang
  • 2016-11-22 16:34
  • 776

oracle定时任务的编写及查看删除

declare jobno number; begin dbms_job.submit(   jobno,--定时器ID,系统自动获得   'PRC_INSERT;', --what执行的过程名    sysdate,--next_date,定...
  • heidou_2016
  • heidou_2016
  • 2016-08-15 17:39
  • 5638

oracle创建存储过程和定时任务

存储过程在sql窗口上直接执行sql语句即可生成,一共可分为七个模块学习:--<--模块一-->-- create table allmsgtable( id number(20) primary key, createtime date,gjjname varchar(20)...
  • Aeyewp
  • Aeyewp
  • 2017-04-15 15:24
  • 576

ORACLE数据库定时任务—DBMS_JOB

创建 DBMS_JOB 使用以下语句: ? 1 2 3 4 5 6 7 8 9 10 VARIABLE jobno number; begin   DBMS_JOB.SUBMIT( &#...
  • zhang308
  • zhang308
  • 2016-04-13 15:00
  • 237

Oracle数据库Java备份恢复定时任务

/** * java 导入导出数据库 做到程序定时 ( 结合 quartz,log) 自动备份,防止数据丢失 * * */ public class BackupDB { Runtime runtime = Runtime.getRuntim...
  • Leeq554180507
  • Leeq554180507
  • 2016-02-25 13:35
  • 100
    个人资料
    • 访问:4409次
    • 积分:114
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:9篇
    • 译文:0篇
    • 评论:0条