2009-06-25 25 views
4

這可能只是我缺少找出如何做到這一點的詞彙:如何在oracle中創建「單例」預定作業?

計劃定期運行每5分鐘,但跟蹤有從來沒有在同一時間運行它的兩個實例,即作業如果先前的運行時間超過5分鐘,下一個實例將被推遲或跳過。

什麼是最簡單/最優雅的方式來實現這一目標?

回答

3

DBMS_JOB需要的照顧。只要使用它。

+0

+1不重新發明車輪。另外,如果您需要確定最後/下一次運行信息,請參閱DBA_JOBS和DBA_JOBS_RUNNING視圖。 – dpbradley 2009-06-25 12:10:44

+0

非常感謝您的回覆。 是否照顧避免同時運行兩個作業的實例?如果是的話,我應該使用哪個選項? 這是我還沒有設法找出... – PeterP 2009-06-25 15:49:30

+2

IIRC,dbms_job將一次只能運行一個(你不會有兩個作業運行的實例)。 Dbms_scheduler允許在作業失敗時做什麼更大的靈活性。 – DCookie 2009-06-25 17:34:51

4

從Oracle 10g的管理員指南:

「的DBMS_JOB包已被DBMS_SCHEDULER包取代特別是,如果你正在管理的工作管理系統的負荷,你應該考慮撤銷包執行禁用DBMS_JOB。用戶特權「。

DBMS_SCHEDULER是Oracle的推薦方式,現在做到這一點。它具有的一個優點是,如果您正在使用此功能,則可以通過企業管理器/網格控制管理您的作業。

1

是DBMS_SCHEDULER具有上述DBMS_JOB的另一個優點是,你可以更好地控制負載,資源使用,並且也可以運行外部數據庫作業。

心連心, 羅納德。

-1

如果由於某種原因dbms_job或dbms_scheduler不適用於您,也可以使用DBMS_APPLICATION_INFO.SET_APPLICATION_INFO來設置作業的模塊名稱,並且您可以查詢v $ session以查看當前有多少會話正在執行該模塊。

這是什麼類型的工作?一個PL/SQL存儲過程?