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' |