使用dbms_job包提供的功能可以实现后台自动执行的定时操作。
首先把要执行的操作做成一个存储过程,如p_dojob。然后用dbms_job提供的submit方法创建一个事务(job),大概语法如下:
declare
n number;
begin
dbms_job.submit(n, 'p_xxx;', begindate, 'begindate + d');
commit;
end;
解释一下:
--p_xxx:过程名,如写成p_xxx;
--begindate:开始时间。立即执行设为sysdate,如果想设定时间比如晚上8电开始则写成: trunc(sysdate)+20/24
--'begindate + d':间隔执行,d为间隔天数,如果想设为间隔1小时则设为1/24,如果只执行一次,则填null;
示例如下:
SQL> declare
2 n number;
3 begin
4 dbms_job.submit(n, 'p_dojob;', sysdate, 'sysdate + 1/3600');
5 commit;
6 end;
7 /
PL/SQL procedure successfully completed
SQL> 可以从user_jobs视图查看你所有的事务:
SQL> select job,next_date,next_sec,failures,broken from user_jobs;
JOB NEXT_DATE NEXT_SEC FAILURES BROKEN
---------- ----------- ---------------- ---------- ------
458691 2007-6-6 16 16:19:20 0 N
437318 2007-6-7 00:00:00 0 N
462099 4000-1-1 00:00:00 16 Y
SQL> 如果事务到预定时间并没有执行,排除是过程本身的问题外,可能的原因是初始化参数job_queue_processes值为0或没有设置。用alter system set job_queue_processes=n;(n>0)做好设置。注:job_queue_processes最大值为1000
本文介绍如何使用Oracle数据库中的dbms_job包来实现定时任务。通过创建存储过程并利用dbms_job.submit方法,可以设置任务的开始时间和执行间隔。此外,文章还提到了job_queue_processes参数对于定时任务的重要性。
404

被折叠的 条评论
为什么被折叠?



