Chinaunix首页 | 论坛 | 博客
  • 博客访问: 894727
  • 博文数量: 101
  • 博客积分: 2256
  • 博客等级: 大尉
  • 技术积分: 1481
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-19 17:52
文章存档

2017年(1)

2013年(2)

2012年(25)

2011年(73)

分类: Oracle

2011-04-21 00:28:27

在oracle中我们使用job来定期执行存储过程的时候,有时候下一次执行的时间就成为了4000-1-1,这个一般是因为job失败超过16次后自动失效导致的。所以为了不再出现这种情况,我们首先要估计一下我们要执行的存储过程中的SQL语句要执行的时间长短,然后我们JOB中的时间要比存储过程执行的时间要大。
例如:下面是一个删除数据的存储过程,大概意思就说删除90天以前的1000条数据,然后提交;
create or replace procedure proc_del_data as
begin
delete from b_kkqp_wfzj where jgsjcommit;
end;
/
我们首先要在数据库中将存储过程中的语句执行一些,看一下执行时间;
如果没有PL/DEVELOPER工具,用命令行set timing on,然后再执行语句,就可以看出执行语句所花的时间;
因为还要考虑到一些意外因素,例如数据库的性能,硬件方面,网络方面对job的干扰;
所以在不影响JOB所要达到的效果之前,应该将JOB执行的时间跨度尽可能加长;
例如:
variable job_del number;
begin
dbms_job.submit(:job_del,'proc_del_data;',sysdate,'sysdate+20/1440');
commit;
end;
/
上面的语句是创建一个job,它每20分钟执行一次存储过程proc_del_data,即使执行proc_del_data
所花的时间可能只有几十秒钟,远远小于20分钟,但是在数据库繁忙的时候可能执行的时间就比较长了。
所以这个job执行的时间间隔大家还是要自己把握好!呵呵!
或者要定期检查job是否异常等,具体解决办法等以后再补充吧!
阅读(6543) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~