Überlegungen zum Empfangen von Datenbankänderungsbenachrichtigungen mithilfe des Oracle Database-Adapters
Dieses Thema enthält einige Überlegungen und bewährte Methoden, die Sie beachten müssen, wenn Sie den Oracle Database-Adapter zum Empfangen von Datenbankbenachrichtigungen von einer Oracle-Datenbank verwenden.
Überlegungen zur Verwendung des Adapters zum Empfangen von Benachrichtigungen
Beachten Sie Folgendes, wenn Sie den Oracle Database-Adapter verwenden, um Abfragebenachrichtigungen zu empfangen.
Der Oracle Database-Adapter übergibt einfach die Benachrichtigung, die er von der Oracle-Datenbank erhält, an die Adapterclients. Der Adapter unterscheidet nicht zwischen den Benachrichtigungen für verschiedene Vorgänge, d. h., der Adapter verfügt nicht über Informationen, ob eine bestimmte Benachrichtigung für einen Einfügevorgang oder einen Updatevorgang gilt.
Die Benachrichtigung für einen Vorgang wird von der Anzahl der datensätzen, die von diesem Vorgang betroffen sind, nicht beeinflusst. Beispielsweise erhalten die Adapterclients unabhängig von der Anzahl der in eine Oracle-Datenbanktabelle eingefügten Datensätze nur eine Benachrichtigung.
Es wird empfohlen, dass die Adapterclientanwendung die Logik zum Interpretieren der Art von Benachrichtigungen enthält, die von der Oracle-Datenbank empfangen werden. Die Adapterclientanwendungen können dazu die Informationen im <Info-Element> der empfangenen Benachrichtigung extrahieren. Hier sehen Sie ein Beispiel für eine Benachrichtigung, die für einen Einfügevorgang empfangen wurde.
<?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>
Beachten Sie den Wert im <Info-Element> . Dieser Wert enthält Informationen zu dem Vorgang, für den die Benachrichtigung empfangen wurde. Ihre Anwendung sollte über die Funktionalität verfügen, den Wert innerhalb des <Info-Elements> zu extrahieren und anschließend basierend auf dem Wert nachfolgende Aufgaben auszuführen. Das Thema Verarbeiten von Benachrichtigungen zum Abschließen bestimmter Aufgaben in Oracle-Datenbank enthält Anweisungen zum Extrahieren des Werts im <Info-Element> .
Im Idealfall sollte die Clientanwendung, nachdem sie eine Benachrichtigung erhalten hat, den Datensatz aktualisieren, für den die Benachrichtigung bereits empfangen wurde, sodass die nachfolgenden Benachrichtigungen nicht für denselben Datensatz gelten. Betrachten Sie beispielsweise eine ACCOUNTACTIVITY-Tabelle , die über eine Verarbeitete Spalte verfügt . Für alle neuen Datensätze, die in die TABELLE ACCOUNTACTIVITY eingefügt werden, lautet der Wert in der Spalte Verarbeitet immer "n". Nach einem Einfügevorgang sehen die Datensätze in der TABELLE ACCOUNTACTIVITY beispielsweise wie folgt aus:
Kontotransaktions-ID Verarbeitet 10001 n Um Benachrichtigungen für den neu eingefügten Datensatz zu erhalten, legt der Adapterclient die NotificationStatement-Bindungseigenschaft wie folgt fest:
SELECT * FROM SCOTT.ACCOUNTACTIVITY WHERE PROCESSED = ‘n’
Nachdem die Benachrichtigung empfangen wurde, muss die Clientanwendung den Wert der Spalte Verarbeitet auf "y" festlegen, damit die Benachrichtigungsanweisung nicht für den Datensatz ausgeführt wird, für den bereits benachrichtigt wurde. Um dies zu erreichen, muss die Clientanwendung einen Updatevorgang für die Tabelle ACCOUNTACTIVITY ausführen. Nach dem Update-Vorgang sieht derselbe Datensatz in der Tabelle ACCOUNTACTIVITY wie folgt aus:
Kontotransaktions-ID Verarbeitet 10001 j Interessanterweise sendet der Updatevorgang erneut eine Benachrichtigung an den Adapterclient, und der gesamte Prozess wird erneut wiederholt. Daher muss die Clientanwendung über die erforderliche Logik verfügen, um solche unerwünschten Benachrichtigungen zu verwerfen.
Wenn die NotifyOnListenerStart-Bindungseigenschaft true ist, sendet der Adapter bei jedem Start des Empfangsspeicherorts eine Benachrichtigung an den Adapterclient. Weitere Informationen zur Verwendung der Bindungseigenschaft und zum Interpretieren der Benachrichtigung finden Sie unter Empfangen von Oracle Database-Änderungsbenachrichtigungen nach einer Aufschlüsselung des Empfangsspeicherorts.
Typische Orchestrierung für den Empfang von Benachrichtigungen
In diesem Abschnitt wird der typische Orchestrierungsablauf für den Empfang von Benachrichtigungen mithilfe des Oracle Database-Adapters beschrieben.
Die Orchestrierung muss zunächst die Art der empfangenen Benachrichtigung überprüfen. Folgende Punkte müssen überprüft werden:
Gibt an, ob die Benachrichtigung für den Neustart des Empfangsspeicherorts empfangen wurde.
Gibt an, ob die Benachrichtigung für einen Vorgang für eine Datenbanktabelle empfangen wurde, z. B. Einfügen, Aktualisieren oder Löschen.
Die Orchestrierung muss ein Ausdrucks-Shape und darin eine xpath-Abfrage enthalten, um zu entscheiden, welche Art von Nachricht empfangen wird.
Nachdem der Benachrichtigungstyp verfügbar ist, muss die Orchestrierung einen Entscheidungsblock enthalten, um bestimmte Aktionen basierend auf dem Typ der empfangenen Benachrichtigung auszuführen. Um dies zu erreichen, muss die Orchestrierung eine Decide-Form enthalten. Das Shape Decide besteht aus einem Regelblock und einem Else-Block . Innerhalb des Regelblocks müssen Sie die Bedingung angeben und dann Orchestrierungsformen einschließen, um bestimmte Vorgänge auszuführen, wenn die Bedingung erfüllt ist. Im Else-Block müssen Sie Orchestrierungs-Shapes einschließen, um bestimmte Vorgänge auszuführen, wenn die Bedingung nicht erfüllt ist.
Die obigen Empfehlungen werden unter Verarbeiten von Benachrichtigungen zum Ausführen bestimmter Aufgaben in Oracle-Datenbank mithilfe von BizTalk Server ausführlich beschrieben.
Weitere Informationen
Empfangen von Oracle Database-Änderungsbenachrichtigungen mithilfe von BizTalk Server