日期:2014-05-16  浏览次数:20494 次

Oracle--定时任务

创建一个任务的完整的格式是:

variable jobno number;
begin
sys.dbms_job.submit(job => :jobno,
what => 'pro_test;',
next_date => to_date('21-02-2008 17:37:26', 'dd-mm-yyyy hh24:mi:ss'),
interval => 'sysdate+1/24/12');
commit;
end;
-- 系统会自动分配一个任务号jobno。

?

删除JOB
SQL> begin
2 dbms_job.remove(:job1);
3 end;

?

删除: job:dbms_job.remove(jobno);
修改要执行的操作: job:dbms_job.what(jobno,what);
修改下次执行时间: dbms_job.next_date(job,next_date);
修改间隔时间: dbms_job.interval(job,interval);
停止job: dbms.broken(job,broken,nextdate);
启动job: dbms_job.run(jobno)

?

设置初始化参数job_queue_processes
sql> alter system set job_queue_processes=n;(n>0)
job_queue_processes最大值为1000

?

查看 job queue 后台进程
sql>select name,description from v$bgprocess;

?

跟踪任务的情况(查看任务队列):

?

SQL>  select job,next_date,next_sec,failures,broken from user_jobs;

       JOB NEXT_DATE   NEXT_SEC           FAILURES BROKEN
---------- ----------- ---------------- ---------- ------
         1 2008-2-22 ?01:00:00                  0 N
?

?

?

例:有存储过程 p_dosomethings,需要被不同的时间间隔执行

declare    
	jobno number;    
begin    
	dbms_job.submit(jobno, 
			'p_dosomething;',  --what 
			to_date('20090101020000','yyyy-mm-dd hh24:mi:ss'), -- next_date,可以不填
			'Interval时间字符串' --interval,关键设置
        );    
        commit;    
end; 

?

例:

begin
     dbms_job.change(1688,'PKG_COUNT_COD_PERIOD.COUNT_PERIOD_JOB;',trunc(sysdate+1),'TRUNC(sysdate) +1+1/24');
end;

?



?