经常碰到一个问题就是,在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_