variable
jobno
number
;
begin
? sys.dbms_job.submit(job => :jobno,
??
???????????????????what =>
'your_procedure1;
?????????????????????????????? your_procedure2;'
,
????????????????????? next_date => to_date(
'20080918 18:50:00'
,
'yyyymmdd hh24:mi:ss'
),
?????????????????????
interval
=>
'sysdate+1/24'
);
?
commit
;
end
;
/
?
?
2、刪除Job
?
print jobno;
?
begin
? dbms_job.remove(:jobno);
?
commit
;
end
;
/
?
?
3、其他操作:
?
修改要執(zhí)行的操作:dbms_job.what(jobno,what);
修改下次執(zhí)行時間: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的值:
可通過select * from v$parameter;查看其值;
或者直接用show parameter job_queue_processes;查看如下:
?
NAME TYPE VALUE
--------------- ----------- ------------
job_queue_processes integer 10
?
方法1.startup pfile='C: oracleora90databaseinitorcl.ora';
//這個方法用來修改initorcl.ora文件的job_queue_processes參數(shù),然后重新啟動數(shù)據(jù)庫
方法2.alter system set job_queue_processes=10
//這個方法不用重啟數(shù)據(jù)庫就可以生效,系統(tǒng)自動修改init.ora文件以后即可生效 。
?
注意:保證參數(shù)不為0,否則JOB不自動運行
?
?
4、時間間隔偏移的問題:
?
SQL> create table t10 (a int ,b date);
?
Table created
SQL> create or replace procedure k
? 2? as
? 3??? i int := 0;
? 4? begin
? 5??? insert into t10 values(i,sysdate);
? 6??? commit;
? 7? end;
? 8? /
?
Procedure created
SQL> begin
? 2??? sys.dbms_job.submit(job => :jobno,
? 3??????????????????????? what => 'k;',
? 4??????????????????????? next_date => to_date(sysdate),
? 5??????????????????????? interval => 'sysdate+1/1440');
? 6??? commit;
? 7? end;
? 8? /
?
PL/SQL procedure successfully completed
jobno
---------
47
?
SQL> column B format a30
SQL> column?A format a5
SQL> select * from t10;
?
??? A B
----- ------------------------------
??? 0 2008-9-18 17:07:38
??? 0 2008-9-18 17:08:39
??? 0 2008-9-18 17:09:40
??? 0 2008-9-18 17:10:41
?
發(fā)現(xiàn)雖然設(shè)置了每分鐘執(zhí)行一次,但是每次執(zhí)行時間是在向后偏移
所以需要進行調(diào)整,將job建為如下:
?
SQL> begin
??2??? dbms_job.remove(:jobno);
??3??? commit;
??4? end;
??5? /
?
PL/SQL procedure successfully completed
jobno
---------
47
?
SQL> begin
? 2??? sys.dbms_job.submit(job => :jobno,
? 3??????????????????????? what => 'k;',
? 4??????????????????????? next_date => to_date(sysdate),
? 5??????????????????????? interval => 'trunc(sysdate,''mi'')+1/1440');
? 6??? commit;
? 7? end;
? 8? /
?
PL/SQL procedure successfully completed
jobno
---------
48
?
SQL> truncate table t10;
?
Table truncated
?
SQL> select * from t10;
?
??? A B
----- ------------------------------
??? 0 2008-9-18 17:19:02
??? 0 2008-9-18 17:20:03
??? 0 2008-9-18 17:21:04
??? 0 2008-9-18 17:22:01
??? 0 2008-9-18 17:23:02
?
雖然秒數(shù)還是有稍微的不同,這是由于每次job的運行時間所致
但是不會像之前一樣一直往后偏移。