1。什麼叫做job?有什麼優點?
獨立於平臺,可以在Oracle的所以平臺上通用
類似於unix的crontab和windows的at。
2。怎麼運行JOB?
首先要運行JOB,數據庫裏面必須有兩個參數手工設定:
scott@QINGH> show parameter job
NAME TYPE VALUE
------------------------------------ -------------- --------
job_queue_interval integer 60
job_queue_processes integer 1
第一個表示JOB後臺進程每個多少時間喚醒一次,檢查有無job。
第二個參數表示有多少個JOB後臺進程,不能爲0,否則無法運行JOB。最多可以是36個。
其次,系統必須存在DBMS_JOB包,可以通過desc
dbms_job檢查它的存在。如果沒有,可以通過catproc.sql來生成,或者僅僅運行下面三個腳本:
catjobq.sql dbmsjob.sql prvtjob.plb
3。DBMS_JOB的詳細用法:參考Oracle supplied package reference手冊
4。具體例子:
declare v_job number;
begin
dbms_job.submit(v_job, -- the resultant job number
'PLSQL_program_I_want_to_run;', -- WHAT: What PL/SQL do I want to run
sysdate, -- NEXT_DATE: When do I want to run the PL/SQL
'sysdate+2/24'); -- INTERVAL: How OFTEN do I want to run the PL/SQL
end;
當然,最後還需要Commit,不要忘記了!
5。常見問題:
1。爲什麼提交成功,卻沒有見到JOB在運行?
1。檢查job_queue_processes是否爲0?
2。檢查系統是否處於restricted session狀態,是,着JOB不會運行
scott@QINGH> select logins from v$instance;
LOGINS
--------------------
RESTRICTED
2。當遇到submit的過程有輸入參數的時候怎麼辦?
簡介:數據庫定時作業相當與UNIX下CRON進程,定時執行某程序。
使用包:dbms_job
ORACLE8最多可以運行定時作業:36個SNP進程
在INIT.ORA文件中三個參數控制着SNP進程的行爲
JOB_QUEUE_PROCESS 缺省值爲0 要啓動多少進程
JOB_QUEUE_INTERVAL 缺省值60 進程喚醒之間的時間間隔,在對新作業檢查以前該進程
將要睡眠的秒數。
JOB_QUEUE_KEEP_CONNECTIONS 缺省值FALSE 控制SNP進程是否關閉它的遠程數據庫連接。
如果爲TRUE,那麼所有的連接都將保持直到改進程終止
爲止,如果爲FALSE,那麼將這些連接的保持時間將和
作業的執行時間一樣長。
1.作業提交:
procedure submit(job out binary_integer,
what in varchar2,
next_date in date default sysdate,
interval in varchar2 default null,
no_parse in boolean defalut false);
參數說明:
類型
job binary_integer 作業號。當作業被創建時,它被賦予一個號碼,只要作業
存在,它的作業號碼保持不變,對於實例而言它是唯一的。
what varchar2 該作業的PL/SQL代碼,通常是一個過程的調用
next_date date 作業下一次運行的時間
interval varchar2 計算作業再次運行的時間函數.
no_parse boolean 如果爲TRUE,作業代碼將在第一次被執行以前不被分析。如果爲
FALSE,那麼作業代碼在提交時就被分析。
作業號從序列sys.jobseg生成的。
what參數是調用該過程的字符串,所有的參數都是IN參數,唯一例外是處理特殊標識符號next_date
與broken.
例如:
begin
dbms_job.submit(:v_jobnum,'procedcure',sysdate,'sysdate+1/24');
end;
每小時運行一次過程procedure.
改變失效作業。
如果作業失敗了,ORACLE將自動嘗試再次運行它,該作業將在失敗後的一分鐘以後再次運行。
如果這次嘗試也失敗了,那麼下一次嘗試是在兩分鐘以後,每次嘗試失敗了,間隔時間爲前
一次的2被,如超過了作業的間隔時間,將會使用執行間隔時間,總次數爲16次,16次還失敗
標記爲失效(broken),失效作業不再自動運行。
procedre broken(job in binary_integer,
brlken in boolean,
next_date in date default sysdate);
改變作業狀態
job binary_integer 改變狀態的作業號
broken boolean 作業的新狀態,如果爲TRUE,該作業爲失效,如果爲FALSE,
該作業不失效並且再NEXT_DATE指定時間運行。
next_date date 作業將要運行的是時間。
刪除作業
procedure remove(job in binary_interger);
如果next_date求值爲NULL(interval設置爲NULL),那麼在執行完成以後作業將會被刪除。
修改作業
procedure change(job in binary_interger,
what in varchar2,
next_date in date,
interval in varchar2);
procedure what(job in binary_interger,
what in varchar2);
procedure next_date(job in binary_interger,
next_date in date);
procedure interval(job in binary_interger,
interval in varchar2);
用其過程修改各自參數所表示的特性
關於數據庫中的Job
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.