Oracle
Oracle 11g 中的計劃任務
我在 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
從andACTUAL_START_DATE
(and )之間的區別可以看出LOG_DATE
,每個後續執行都等待前一個執行完成。這是最簡單的配置,但您可以使用允許您限製作業持續時間的參數更改此行為
max_run_duration
(您需要處理由此引發的事件)。或者,如果您使用調度程序視窗,則可以使用參數將作業設置為在視窗關閉時自動停止
stop_on_window_close
。