使用 Oracle 資料庫配接器接收資料庫變更通知的考慮
本主題提供在使用 Oracle 資料庫配接器從 Oracle 資料庫接收資料庫通知時必須記住的一些考慮和最佳做法。
使用配接器接收通知時的考慮
使用 Oracle 資料庫配接器來接收查詢通知時,您必須考慮下列事項。
Oracle Database 配接器只會將它從 Oracle 資料庫接收的通知傳遞給配接器用戶端。 配接器不會區分不同作業的通知,亦即配接器沒有任何資訊,不論特定通知是針對插入作業還是更新作業。
作業的通知訊息不會受到該作業所影響的記錄數目所影響。 例如,不論插入 Oracle 資料庫資料表中的記錄數目為何,配接器用戶端只會收到一則通知訊息。
我們建議配接器用戶端應用程式包含邏輯,以解譯從 Oracle 資料庫收到的通知種類。 配接器用戶端應用程式可以藉由擷取所接收通知訊息之Info > 元素中 <的資訊來進行。 以下是針對插入作業收到的通知訊息範例。
<?xml version="1.0" encoding="utf-8" ?> <Notification xmlns="http://Microsoft.LobServices.OracleDB/2007/03/Notification/"> <Details> <NotificationDetails> <ResourceName>SCOTT.ACCOUNTACTIVITY</ResourceName> <Info>1</Info> <QueryId>0</QueryId> </NotificationDetails> </Details> <Info>Insert</Info> <ResourceNames> <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">SCOTT.ACCOUNTACTIVITY</string> </ResourceNames> <Source>Data</Source> <Type>Change</Type> </Notification>
請注意Info > 元素中的 <值。 此值提供收到通知訊息之作業的相關資訊。 您的應用程式應該具有在Info > 元素內 <擷取值,然後根據值執行後續工作的功能。 處理通知訊息以完成 Oracle 資料庫中特定工作的主題有如何擷取Info > 元素內 <值的指示。
在理想情況下,在用戶端應用程式收到通知之後,它應該更新已收到通知的記錄,讓後續的通知不會用於相同的記錄。 例如,請考慮具有已處理資料行的ACCOUNTACTIVITY資料表。 對於插入 ACCOUNTACTIVITY 資料表的所有新記錄, [已處理 ] 資料行中的值一律為 'n'。 例如,在插入作業之後, ACCOUNTACTIVITY 資料表中的記錄看起來會如下所示:
帳戶交易識別碼 已處理 10001 n 若要取得新插入記錄的通知,配接器用戶端會將 NotificationStatement 系結屬性設定為:
SELECT * FROM SCOTT.ACCOUNTACTIVITY WHERE PROCESSED = ‘n’
在收到通知之後,用戶端應用程式必須將 [已處理 ] 資料行的值設定為 'y',讓通知語句不會在已經收到通知的記錄上運作。 因此,若要達到此目的,用戶端應用程式必須在 ACCOUNTACTIVITY 資料表上執行更新作業。 更新作業之後, ACCOUNTACTIVITY 資料表中的相同記錄看起來會像下面這樣:
帳戶交易識別碼 已處理 10001 y 有趣的是,更新作業會再次傳送通知給配接器用戶端,而整個程式將會再次重複。 因此,用戶端應用程式必須具有必要的邏輯,才能捨棄這類垃圾通知。
如果 NotifyOnListenerStart 系結屬性為 true,配接器會在每次接收位置啟動時傳送通知給配接器用戶端。 如需如何使用系結屬性和解譯通知訊息的詳細資訊,請參閱 在接收位置分解之後接收 Oracle 資料庫變更通知。
接收通知的典型協調流程
本節概述使用 Oracle 資料庫配接器接收通知的典型協調流程流程。
協調流程必須執行的第一件事是檢查收到的通知種類。 要檢查的專案如下:
是否收到接收位置重新開機的通知。
是否收到資料庫資料表上作業的通知,例如 Insert、Update 或 Delete。
協調流程必須包含 運算式 圖形,而且在該 xpath 查詢中,才能決定收到何種訊息。
通知類型可用之後,協調流程必須包含決策區塊,才能根據收到的通知類型來執行特定動作。 若要達成此目的,協調流程必須包含 決定 圖形。 決定圖形是由規則區塊和Else區塊所組成。 在 規則 區塊中,您必須指定條件,然後包含協調流程圖形,以在符合條件時執行特定作業。 在 Else 區塊內,您必須包含協調流程圖形,才能在 不符合 條件時執行特定作業。