基於事件的排程

jidongzheng發表於2008-08-04
Oracle 資料庫 10g 第 1 版中引入的 Oracle Scheduler 是下一代作業排程系統,它取代了 DBMS_JOB 附帶的程式包。與該程式包相比,此 Scheduler 工具有一些顯著的優點(詳見最初的介紹)

在 Oracle Scheduler 的第一版中,作業基於時間並根據時間觸發。但如果要使觸發器基於事件該怎麼辦?例如,當帳戶的 Account Manager 更改時,您可能希望一個批處理程式自動執行以重新計算收入並重新發布報表。

可以在 Oracle 資料庫 10g 第 2 版的 Scheduler 工具中實現此類基於事件的觸發。事件透過 Advanced Queueing (AQ)(其中有效載荷是一個物件型別)傳遞給 Scheduler。因此,您首先需要建立一個 AQ(如 proc_queue),在這裡將把任意這樣的事件排隊。然後,您必須基於此事件建立一個排程。
begin
dbms_scheduler.create_event_schedule (
schedule_name   => 'accadmin.acc_mgr_change',
start_date      => systimestamp,
event_condition => 'tab.user_data.event_name = ''acc_mgr_change''',
queue_spec      => 'proc_queue');
end;
接著,您將建立一個作業以遵循此排程。您也可以直接排程一個作業而不用先建立一個排程。
begin
dbms_scheduler.create_job (
job_name        => acc_mgr_change,
program_name    => acc_mgr_change_procs,
start_date      => 'systimestamp,
event_condition => 'tab.user_data.event_name = ''acc_mgr_change''',
queue_spec       => 'proc_queue'
enabled          => true);
end;
預設值是 UNLIMITED

如果事件(而不是特定時間)是觸發作業的決定因素,則基於事件的排程很有幫助。[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/197458/viewspace-1008487/,如需轉載,請註明出處,否則將追究法律責任。

相關文章