Oracle中定时执行问题

来源:互联网 发布:淘宝导航条如何全屏 编辑:程序博客网 时间:2024/05/16 07:11

经常碰到一个问题就是,在Oracle中,需要定时执行一定的存储过程来处理数据,自然人们都会想到Job。

1、JOB创建,这个比较简单,很多工具提供可视化界面创建,参数解释也很详细,主要是三个参数 

what, 存储过程名

next date 下次执行时间  如果马上执行可以写为Sysdate

interval 执行间隔 Sysdate + X  其中X表示天数,如果少于一天用小数或分数表示 例如十分钟执行一次可以写为 10 / 1440 (每天为1440分钟)

通过dbms_job.submit来提交,例子:

begin
  sys.dbms_job.submit(job => :job,
                      what => 'proc_getrptstatus;',
                      next_date => to_date('23-10-2007 08:21:47', 'dd-mm-yyyy hh24:mi:ss'),
                      interval => 'sysdate+1/288');
  commit;
end;
/

提交之后,还不会自动执行,你需要首先执行一下,记录下上面生成的JOBID

exec dbms_job.run(job_id)

2、通过上面的步骤你可能会发现,并没有自动执行,为什么呢?

因为还有一个参数需要设置,就是Oracle允许执行的JOB数,默认执行数为0 最大不能超过1000

你可以通过语句查看

show parameter job_queue_processes;

如果需要修改,使用alter system来做,例子

alter system set job_queue_processes=10;

3、这样处理之后你会发现,数据库重启之后job_queue_processes仍然会变成0

这是因为你通过Alter system改变参数之后,没有将这个数据保存,

你可以打开init.ora,增加或者修改

job_queue_processes=10

重启之后,这个参数就会生效

 

这样Job就能自动执行了,详细的应用还很多,可以查看文档

dbms_