创建一个任务的完整的格式是:
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;
?
?