oracle job管理

longqidong發表於2012-02-22

建立測試表
SQL> create table TEST(a int);

表已建立。

建立一個自定義過程
SQL> create or replace procedure MYPROC as
  2  begin
  3  insert into TEST values(1);
  4  end;
  5  /

過程已建立。

建立JOB
SQL> variable job1 number;
SQL> 
SQL> begin
  2  dbms_job.submit(:job1,''MYPROC;'',sysdate,''sysdate+1/1440'');  --每天1440分鐘,即一分鐘執行test過程一次
  3  end;
  4  /

PL/SQL 過程已成功完成。

begin
  sys.dbms_job.submit(job => :job,--job標號
                      what => 'myProc;myProcs;myProcss(''測試'');',//用分號將多個儲存過程分開,有引數的話直接寫就可以了
                      next_date => to_date('07-04-2011 22:00:00', 'dd-mm-yyyy hh24:mi:ss'),--下一次執行的時間
                      interval => 'sysdate+1'); --執行的時間隔
  commit;
end;



執行JOB
SQL> begin
  2  dbms_job.run(:job1);
  3  end;
  4  /

PL/SQL 過程已成功完成。

SQL> select * from TEST;

a
-------------------
1

1

1

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

PL/SQL 過程已成功完成。

=======================================

a、利用dbms_job.run()立即執行該job
   sql>begin
   sql>dbms_job.run(:jobno) 該jobno為submit過程提交時返回的job number
   sql>end;
   sql>/
b、利用dbms_job.broken()重新將broken標記為false
   sql>begin
   sql>dbms_job.broken (:job,false,next_date)
   sql>end;
   sql>/

========================================
SQL> create table a(a date);
Table created

建立一個過程
SQL> create or replace procedure test as
  2  begin
  3  insert into a values(sysdate);
  4  end;
  5  /
Procedure created

提交作業
SQL> declare
  2  job1 number;   //定義一個數字型變數
  3  begin
  4  dbms_job.submit(:job1,''test;'',sysdate,''sysdate+1/1440'');  //按分鐘算一天1440分鐘
  5  end;
  6  /
PL/SQL procedure successfully completed
job1
---------
4
SQL> commit;
Commit complete

執行作業
SQL> begin
  2  dbms_job.run(4);
  3  end;
  4  /
PL/SQL procedure successfully completed

刪除作業
SQL> begin
  2  dbms_job.remove(4);
  3  end;
  4  /
PL/SQL procedure successfully completed
SQL> commit;
Commit complete

job change//修改作業
execute dbms_job.change(186,null,null,''sysdate+3'');
execute dbms_job.change(186,''scott.test(update)'');

DBA_JOBS
===========================================
欄位(列)          型別                 描述 
JOB                NUMBER          任務的唯一標示號 
LOG_USER           VARCHAR2(30)    提交任務的使用者 
PRIV_USER          VARCHAR2(30)    賦予任務許可權的使用者 
SCHEMA_USER        VARCHAR2(30)    對任務作語法分析的使用者模式 
LAST_DATE          DATE            最後一次成功執行任務的時間 
LAST_SEC           VARCHAR2(8)     如HH24:MM:SS格式的last_date日期的小時,分鐘和秒 
THIS_DATE     DATE            正在執行任務的開始時間,如果沒有執行任務則為null 
THIS_SEC     VARCHAR2(8)     如HH24:MM:SS格式的this_date日期的小時,分鐘和秒 
NEXT_DATE          DATE            下一次定時執行任務的時間 
NEXT_SEC           VARCHAR2(8)     如HH24:MM:SS格式的next_date日期的小時,分鐘和秒 
TOTAL_TIME         NUMBER          該任務執行所需要的總時間,單位為秒 
BROKEN             VARCHAR2(1)     標誌引數,Y標示任務中斷,以後不會執行 
INTERVAL           VARCHAR2(200)   用於計算下一執行時間的表示式 
FAILURES    NUMBER     任務執行連續沒有成功的次數 
WHAT               VARCHAR2(2000)  執行任務的PL/SQL塊 
CURRENT_SESSION_LABEL RAW          MLSLABEL 該任務的信任Oracle會話符 
CLEARANCE_HI      RAW MLSLABEL     該任務可信任的Oracle最大間隙 
CLEARANCE_LO      RAW              MLSLABEL 該任務可信任的Oracle最小間隙 
NLS_ENV           VARCHAR2(2000)   任務執行的NLS會話設定 
MISC_ENV          RAW(32)          任務執行的其他一些會話引數

描述                    INTERVAL引數值 
每天午夜12點            ''TRUNC(SYSDATE + 1)'' 
每天早上8點30分         ''TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'' 
每星期二中午12點         ''NEXT_DAY(TRUNC(SYSDATE ), ''''TUESDAY'''' ) + 12/24'' 
每個月第一天的午夜12點    ''TRUNC(LAST_DAY(SYSDATE ) + 1)'' 
每個季度最後一天的晚上11點 ''TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), ''Q'' ) -1/24'' 
每星期六和日早上6點10分    ''TRUNC(LEAST(NEXT_DAY(SYSDATE, ''''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)''

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22418990/viewspace-716966/,如需轉載,請註明出處,否則將追究法律責任。

相關文章