oracle job 定時,啟動,停止,察看狀態。運行指令碼

來源:互聯網
上載者:User

job裡面的 last_date 和 next_date ,以及interval之間是什麼關係,last_date到底是記的 job 的開始執行時間,還是執行結束的時間。next_date到底是 job 的開始時間還是結束時間加上 interval 得出的呢?

如果一個Job的執行時間比較長(比如超過了interval),會不會出現多個同樣的 job 同時執行呢?

last_date=開始時間
last_date+interval=next_date

但要清楚,next_date 通常不是真正的開始時間,真正的開始時間往往比next_date 晚幾秒,
也就是延時。

2、不會。

1
job的next time是在job開始執行的時候就算好了
不過是在job成功執行之後才寫上去
當job的執行時間長過interval時候 也就是說在job的執行過程中nexttime就已經過了
那麼nexttime就變為job執行完時的時間
2
你所說的情況不存在

SQL> exec dbms_job.broken(21,true);

PL/SQL 過程被成功完成

SQL> select * from user_jobs;

       JOB LOG_USER                       PRIV_USER                      SCHEMA_USER                    LAST_DATE   LAST_SEC         THIS_DATE   THIS_SEC         NEXT_DATE   NEXT_SEC         TOTAL_TIME BROKEN INTERVAL                                                                           FAILURES WHAT                                                                             NLS_ENV                                                                          MISC_ENV                                                           INSTANCE
---------- ------------------------------ ------------------------------ ------------------------------ ----------- ---------------- ----------- ---------------- ----------- ---------------- ---------- ------ -------------------------------------------------------------------------------- ---------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ---------------------------------------------------------------- ----------
        21 UNIONS                         UNIONS                         UNIONS                         2006-11-30  16:32:27                                      4000-1-1    00:00:00                  0 Y      trunc(sysdate)+16/24+1                                                                    0 ACHIEVETOHISTORY;                                                                NLS_LANGUAGE='SIMPLIFIED CHINESE' NLS_TERRITORY='CHINA' NLS_CURRENCY='RMB' NLS_I 0102000200000000                                                          0

SQL> exec dbms_job.run(21);

PL/SQL 過程被成功完成

SQL> select * from user_jobs;

       JOB LOG_USER                       PRIV_USER                      SCHEMA_USER                    LAST_DATE   LAST_SEC         THIS_DATE   THIS_SEC         NEXT_DATE   NEXT_SEC         TOTAL_TIME BROKEN INTERVAL                                                                           FAILURES WHAT                                                                             NLS_ENV                                                                          MISC_ENV                                                           INSTANCE
---------- ------------------------------ ------------------------------ ------------------------------ ----------- ---------------- ----------- ---------------- ----------- ---------------- ---------- ------ -------------------------------------------------------------------------------- ---------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ---------------------------------------------------------------- ----------
        21 UNIONS                         UNIONS                         UNIONS                         2006-11-30  16:46:14                                      2006-12-1 1 16:00:00                  0 N      trunc(sysdate)+16/24+1                                                                    0 ACHIEVETOHISTORY;                                                                NLS_LANGUAGE='SIMPLIFIED CHINESE' NLS_TERRITORY='CHINA' NLS_CURRENCY='RMB' NLS_I 0102000200000000                                                          0

試寫一計劃任務:

declare

v_job number :=1;

begin

dbms_job.submit(v_job,'sp_fact_charge_code;',sysdate,'sysdate+1/1440');

commit;

end;

/

解釋一下上面的程式

程式主體有四個參數,分別意為:v_job是計劃任務號,'sp_fact_charge_code'是計劃任務名,如果是多個計劃任務,就都用分號隔開,第三個sysdate意為立即執行此任務,第四個參數是間隔時間的設定,此處為每分鐘執行一次,1/1440=1/24/60。

查看任務:select * from user_jobs;select * from all_jobs;

查看正在啟動並執行任務(不推薦使用,速度慢):select * from dba_jobs_running;

另外值得一提的是,在安裝oracle配置的時候,有這麼一個參數:

job_queue_processes=4  (預設4)

這個參數是定義當前最多可同時運行幾個job,它的最大值能設定為36。

除了submit參數外,其餘的幾個參數有:

        dbms_job.run(v_job);         //運行job

        dbms_job.broken(v_job,true,next_date);        //停止一個job,裡面參數true也可是false,next_date(某一時刻停止)也可是sysdate(立刻停止)。

        dbms_job.remove(v_job);        //刪除某個job

        dbms_job.what(v_job,'sp_fact_charge_code;');        //修改某個job名

        dbms_job.next_date(v_job,sysdate);        修改下一次已耗用時間

例題,設定每天2:10:10運行

trunc(sysdate)+2/24+10/24/60+10/24/60/60        //已耗用時間

trunc(sysdate)+1+2/24+10/24/60+10/24/60/60        //間隔已耗用時間

例題,設定每月2號的2:10:10運行

trunc(sysdate,'mm')+1+2/24+10/24/60+10/24/60/60        //已耗用時間

trunc(add_mouths(sysdate,1),'mm')+1+2/24+10/24/60+10/24/60/60           //間隔已耗用時間

例題,設定每個季度……

trunce(sysdate,'Q')+1+2/24+10/24/60+10/24/60/60         //已耗用時間

trunce(add_mouths(sysdate,3),'Q'))+1+2/24+10/24/60+10/24/60/60         //間隔已耗用時間

另外年為'Y;

例題,設定每周一……

next_day(sysdate'星期一')

……

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.