2011-02-16 60 views
2

我有兩個PL/SQL系統,駐留在兩個單獨的數據庫中。 SystemA需要填充SystemB的表格。這可能會在數據鏈路上完成。每次將一組記錄插入到SystemB的表中時,系統B中的進程必須運行。我可以等待SystemA完成,然後運行一個腳本以開始在SystemB中進行處理,但由於SystemA可能需要花費很多小時來處理然後填充SystemB,所以我寧願SystemB儘快處理每一組記錄(每個記錄設置可以獨立處理,所以這應該工作正常)。PL/SQL中的事件驅動編程

我不確定的是我如何在PL/SQL中執行偶數驅動的編程。我需要SystemA通知SystemB一套已準備好處理。我的第一個想法是在SystemB中有一個特殊的「事件」表,然後當SystemA完成一個集合時,它將插入到「事件」表中,並在插入時觸發一個啓動流程的觸發器(並且流程可能是一個很長的流程,每個進程可能需要5-10分鐘)在SystemB中。我沒有足夠的Oracle觸發器經驗來知道這是否是一種既定的方法,或者是否有更好的機制。建議?提示?建議嗎?

回答

6

使用Oracle高級隊列;它是爲此而設計的。我相信你仍然需要在兩個系統之間建立一個數據庫鏈接(在這種情況下,從B到A,消耗A上的隊列)。

+0

將有一個從A到B的dblink,因此A可以插入到B的表格中。隊列必須在A中,B需要連接到B? – FrustratedWithFormsDesigner 2011-02-16 19:30:02

+0

最常見的情況是,你在A上有一個隊列,A上的進程將插入,B上的隊列將B上的進程從隊列中取出隊列,並且你會使用AQ來告訴A上的隊列傳遞消息到B上的隊列。這樣,你的代碼永遠不需要處理臨時中斷的網絡連接的問題--AQ將處理到遠程機器的交付。 – 2011-02-16 19:42:01

2

是的,Oracle高級隊列或者甚至讓甲提交一份令人尊敬的Oracle作業給B是更好的主意。

而且,如果您的流程需要將數據從A完全複製到B,那麼您可能希望看起來像Oracle Streams流程,以複製數據並進行處理。