oracle job 定時執行預存程序

來源:互聯網
上載者:User

http://cherryqq.iteye.com/blog/855022

http://www.cnblogs.com/lumnm/archive/2012/08/31/2666155.html


oracle job在oracle 重新啟動後,還會執行。


一:簡單測試job的建立過程案例: 

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

SQL> create table JOB_TEST(a date);

Table created

SQL> commit;

Commit complete

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

SQL> create or replace procedure JOB_PRO_TEST as

  2  begin

  3  insert into JOB_TEST values(sysdate);

  4  end;

  5  /

Procedure created

 

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

--命令視窗

SQL> variable job2010 number;

SQL> begin

  2  dbms_job.submit(:job2010,'JOB_PRO_TEST;',sysdate,'sysdate+1/1440');

  3  end;

  4  /

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

PL/SQL procedure successfully completed

job2010

---------

41

--sql視窗

declare  test_job_really number;  
begin  
   dbms_job.submit(test_job_really,'test_jobproce;',sysdate,'sysdate+1/1440');  
   commit;  
end;  


4,運行job2010

SQL> begin

  2  dbms_job.run(:job2010);

  3  end;

  4  /

PL/SQL procedure successfully completed

job2010

---------

41

5,刪除job2010

SQL> begin

  2  dbms_job.remove(:job2010);

  3  end;

  4  /

6,查詢jobs的相關視圖

select job,last_date,last_sec,broken,failures,interval, what from dba_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)'

每月25號00:00執行: 'TRUNC(LAST_DAY(SYSDATE ) + 25)'

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

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

3. 查看相關job資訊

相關視圖

dba_jobs

all_jobs

user_jobs

dba_jobs_running 包含正在運行job相關資訊

三:實際應用

 

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

SQL> variable job2010 number;

SQL> begin

SQL> dbms_job.submit(:job2010,'delete from i0216_inv_balance_curstock where trunc(sysdate-mtime) > 90 and  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.