2013-11-05 79 views
1

我有一個工作計劃在後端(用於發送電子郵件)使用DBMS_Scheduler。但是,要求允許用戶安排電子郵件,並允許他們通過點擊按鈕立即發送電子郵件立即如何在Oracle中多次(並行)執行相同的作業?

爲了做到這一點,我做了以下安排:當用戶點擊一個按鈕時,調用一個過程。該過程執行我上面提到的工作(使用run_job)。這使我可以立即使用相同的工作發送電子郵件,並在預定的時間晚些時候發送。

我現在面臨的問題是:假設用戶A單擊按鈕。同時,用戶B點擊他系統上的按鈕。然後用戶B得到以下錯誤信息:作業已在運行。

如何在Oracle中多次執行相同作業並行)?

回答

2

DBMS_SCHEDULER.RUN參數USE_CURRENT_SESSION設置爲TRUE

--Create a test job. 
begin 
    dbms_scheduler.create_job(
     job_name => 'TEST_JOB', 
     job_type => 'PLSQL_BLOCK', 
     job_action => 'BEGIN dbms_lock.sleep(3); END;'); 
end; 
/

--This fails if run concurrently. 
begin 
    dbms_scheduler.run_job(job_name => 'TEST_JOB', use_current_session => FALSE); 
end; 
/

--This can run concurrently. 
begin 
    dbms_scheduler.run_job(job_name => 'TEST_JOB', use_current_session => TRUE); 
end; 
/
+0

非常感謝!我會試試這個!但是,你能告訴我「use_current_session」是如何工作的嗎? –

+0

@SinghSiddharth該文檔是開始的好地方:http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_sched.htm#ARPLS72395 –

1

如果您可以將您的工作轉換爲基於事件的工作,你可以使用在觸發它們的事件做出響應輕巧的工作。對於基於事件的作業,您可以將parallel_instances設置爲true,從而允許同一作業的多個實例並行運行。

這是做你想做的事。

輕量級並行作業旨在成爲具有簡單任務的簡短生活作業。

相關問題