關於數據庫中的Job

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);  
用其過程修改各自參數所表示的特性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章