2013-01-15 62 views
2

我需要安排一個從0600開始到1800年的工作。工作應在每兩個小時後執行一次。例如0800,1000,1200,1400,1600,1800每天幾個小時的工作安排

這是我設法到目前爲止做的代碼:

DECLARE 
    l_id binary_integer; 
    begin 
     sys.dbms_job.submit(job => l_id, what => 'integration_export;', interval => 'TRUNC(SYSDATE,''hh24'')+0/24/60'); 
     sys.dbms_output.put_line(l_id);  
end; 

這當然會,每2個小時後運行作業沒有在1801 - 0759停止。我該如何補充這個限制? 我的一件事是創建另一個時間表程序,它在1801處醒來併爲此作業更改NEXT_DATE。不過,我想知道這是不是一個好主意。

有什麼建議嗎?

在此先感謝:-)

+0

正如一個側面說明,我已經在很多的,像安排作業每隔x間隔的地方工作,他們似乎總是選擇「對時」恰好,爲整潔或東西的緣故。您可能會發現,通過錯開工作開始,您可以從系統中獲得更好的價值,這樣他們就不會全部嘗試從同一時間開始 - 大約1分鐘過去,大約2分鐘過去,諸如此類。 –

回答

7

dbms_job是舊的。我推薦你使用dbms_scheduler(在Oracle 10g中引入)。

dbms_scheduler.create_job(job_name  => 'YOUR_JOB', 
          job_type  => 'PLSQL_BLOCK', 
          job_action  => 'integration_export;', 
          start_date  => systimestamp, 
          repeat_interval => 'freq=hourly; byhour=8,10,12,14,16,18; byminute=0; bysecond=0;', 
         enabled   => true, 
         auto_drop  => false, 
         comments  => 'some comment about the job'); 
2

相反dmbs_job的,採用先進的DBMS_SCHEDULER。這裏是一個例子:

begin 
    DBMS_SCHEDULER.create_job (
    job_name  => 'Integration_export', 
    job_type  => 'PLSQL_BLOCK', 
    job_action  => 'integration_export;', 
    start_date  => SYSTIMESTAMP, 
    enabled   => TRUE, 
    repeat_interval => 'freq=daily; byhour=6,8,10,12,14,16,18; byminute=0; bysecond=0'); 
end; 
/
相關問題