oracle定制定时执行任务

oracle定制定时执行任务

主要通过oracle数据库的job来定制一个简单的定时执行任务(eg:定制每隔一分钟向一个表中插入语句)

oacle定时任务的缘由:项目中要在固定的时间,把一个数据库中某些表的数据同步到另外一个数据库。把同步的脚本放在一个存储过程中。然后在固定的时间去执行这个存储过程就可以了。

注意:以下所有的操作都是在system用户下执行。采用pl/sql做的客户端登录。

(1)新建一个表,命名为test,建表语句如下:

create table system.test(

id number(2) primary key,

btime date

)

(2)新建一个存储过程(在sql窗口下执行),命名为test_proc,存储过程的语句如下:

create or replace procedure test_proc is

begin

  insert into system.test(id,btime) values(nvl((select max(id) from system.test)+1,0),sysdate);

commit;

exception

 when others then

  dbms_output.put_line('Exception happened,data was rollback');

rollback;

end;

(3)定制定时执行任务

假设我们要每隔一分钟向表test中插入一条记录,我们只需要每隔一分钟执行一次存储过程test_proc即可。

在pl/sql的command window输入一下语句:

variable job_num number;

begin

  dbms_job.submit(:job_num,'test_proc;',sysdate,'sysdate+1/24/60');

commit;

end;

/

(4)查看执行结果

  a.查看新增的job是否成功

  通过查看dba_jobs表中的what字段可以看到最后一条记录即时我们刚新建的定时任务;

  

  select * from dba_jobs;

  b.查看test表是否插入了数据

  select * from test;

(5)如何删除一个job

  在pl/sql的command window执行一下语句:

  exec dbms_job.remove(81);

  说明:这里的数字81是对应dba_jobs表中当前要删除的job记录所在行的job字段的值

每天运行一次 'SYSDATE+1'
每小时运行一次 'SYSDATE+1/24'
每10分钟运行一次 'SYSDATE+10/(60*24)'
每30秒运行一次 'SYSDATE+30/(60*24*60)'
每隔一星期运行一次 'SYSDATE+7'
原文地址:https://www.cnblogs.com/quxiaojie/p/4184103.html