Oracle job + 預存程序學習筆記

來源:互聯網
上載者:User

導讀:

第一部分:下面的步驟完整的示範了job的建立過程:

第二部分:job的相關知識:

第三部分:實際應用

發現:刪除jobs的時候必須使用該job的owner來做,sys也不能刪別人的job!(先這樣理解,以後再更正。嘿嘿·)


本文:


第一部分:下面的步驟完整的示範了job的建立過程:


1,先建立一張pig表,欄位為a日期格式

SQL> create table pig(a date);

Table created

SQL> commit;

Commit complete

2,建立一個預存程序bb作用是往pig表中插入資料

SQL> create or replace procedure bb as

 2 begin

 3 insert into pig values(sysdate);

 4 end;

 5 /

Procedure created

 

3,建立一個job,名稱為job2009;作用是每分鐘(60×24=1440)執行一次預存程序bb。

SQL> variable job2009 number;

SQL> begin

 2 dbms_job.submit(:job2009,'bb;',sysdate,'sysdate+1/1440');

 3 end;

 4 /

注意:這裡系統自動產生job id為41

PL/SQL procedure successfully completed

job2009

---------

41

4,運行job2009

SQL> begin

 2 dbms_job.run(:job2009);

 3 end;

 4 /

PL/SQL procedure successfully completed

job2009

---------

41

5,刪除job2009

SQL> begin

 2 dbms_job.remove(:job2009);

 3 end;

  4 /

6,查詢jobs的相關視圖

selectjob,last_date,last_sec,broken,failures,interval, whatfromdba_jobs

詳解dba_jobs中幾個比較重要的欄位

job:指的是job的id號。比如上面的41

failures:job執行的時候失敗次數,如果超過了15次,那麼broken列將被標為Y,以後就不會運行該job了


broken:預設為N,如果為Y,意味著不再執行該job!

interval:執行job的間隔時間。

what:該job的實際工作。

 


第二部分:job的相關知識:

1,DBA_JOBS

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)任務啟動並執行其他一些會話參數

--------------------------

2,描述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)'

--------------------------

 

1:每分鐘執行

Interval => TRUNC(sysdate,'mi') + 1/ (24*60)

Interval => sysdate+1/1440

 

2:每天定時執行

例如:每天的淩晨1點執行

Interval => TRUNC(sysdate) + 1 +1/ (24)

 


3:每周定時執行

例如:每周一淩晨1點執行

Interval => TRUNC(next_day(sysdate,'星期一'))+1/24

 

4:每月定時執行

例如:每月1日淩晨1點執行

Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24

 

5:每季度定時執行

例如每季度的第一天淩晨1點執行

Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24

 

6:每半年定時執行

例如:每年7月1日和1月1日淩晨1點

Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24

 

7:每年定時執行

例如:每年1月1日淩晨1點執行

Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24

 


第三部分:實際應用

-->-->--></STYLE. < P>

步驟一:建立一個job,每月25日執行下面sql。

SQL>variable job2010 number;

SQL>begin

SQL>dbms_job.submit(:job2010,'delete from i0216_inv_balance_curstock where trunc(sysdate-mtime) > 90and ib_qty = 0;commit;',sysdate,'TRUNC(LAST_DAY(SYSDATE ) + 25)');     <==每月25號00:00執行

SQL>end;

SQL>/

 

步驟二:查詢產生的job id

SQL> select job, what from dba_jobs;

job         what

61          ..........

 

步驟三:運行剛才建立的job

SQL> begin

SQL> dbms_job.run(61);

SQL> end;

SQL> /

 

步驟四:查詢該job下次執行的時間

SQL> select job,next_date,what from dba_jobs

SQL> where job=’61’;

 

步驟五:刪除該job

SQL> begin

SQL> dbms_job.remove(61);

SQL> end;

SQL> /

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.