Oracle

Oracle 11g 中的計劃任務

  • June 28, 2018

我在 Oracle 11g 中有一個計劃任務,計劃在每天 12:00 和 17:00 執行。如果第一次執行時間超過五個小時,第二次預定執行會發生什麼情況?它會被簡單地刪除還是推遲到第一個完成之後?如果有可能,我如何檢查我的數據庫中使用了什麼?

我已經看到任務在第一次完成後執行了一段時間,但我不確定是否有其他人手動啟動它或者是否有其他東西影響它。

您可以輕鬆地自己測試它。

創建一個每分鐘 0 秒執行的作業,但需要 80 秒才能完成:

begin
 dbms_scheduler.create_job
 (
   job_name => 'TEST_JOB',
   job_type => 'PLSQL_BLOCK',
   job_action => 'begin dbms_lock.sleep(80); end;',
   enabled => true,
   auto_drop => false,
   repeat_interval => 'FREQ=MINUTELY;BYSECOND=0'
 );
end;
/

幾分鐘後:

select log_date, req_start_date, actual_start_date, run_duration
from dba_scheduler_job_run_details where job_name = 'TEST_JOB'
order by log_date;

LOG_DATE            REQ_START_DATE      ACTUAL_START_DATE   RUN_DURATION       
------------------- ------------------- ------------------- -------------------
2018-06-28 20:44:32 2018-06-28 20:42:00 2018-06-28 20:43:12 +00 00:01:20.000000
2018-06-28 20:45:52 2018-06-28 20:44:00 2018-06-28 20:44:32 +00 00:01:20.000000
2018-06-28 20:47:12 2018-06-28 20:45:00 2018-06-28 20:45:52 +00 00:01:20.000000
2018-06-28 20:48:32 2018-06-28 20:46:00 2018-06-28 20:47:12 +00 00:01:20.000000
2018-06-28 20:49:52 2018-06-28 20:48:00 2018-06-28 20:48:32 +00 00:01:20.000000
2018-06-28 20:51:12 2018-06-28 20:49:00 2018-06-28 20:49:52 +00 00:01:20.000000
2018-06-28 20:52:32 2018-06-28 20:50:00 2018-06-28 20:51:12 +00 00:01:20.000000
2018-06-28 20:53:52 2018-06-28 20:52:00 2018-06-28 20:52:32 +00 00:01:20.000000
2018-06-28 20:55:12 2018-06-28 20:53:00 2018-06-28 20:53:52 +00 00:01:20.000000

REQ_START_DATE從and ACTUAL_START_DATE(and )之間的區別可以看出LOG_DATE,每個後續執行都等待前一個執行完成。

這是最簡單的配置,但您可以使用允許您限製作業持續時間的參數更改此行為max_run_duration(您需要處理由此引發的事件)。

或者,如果您使用調度程序視窗,則可以使用參數將作業設置為在視窗關閉時自動停止stop_on_window_close

引用自:https://dba.stackexchange.com/questions/210892