使用預存程式、函式或封裝程式和函式輪詢 Oracle 資料庫
您可以設定 Oracle 資料庫配接器,以使用預存程式、函式或封裝程式和函式來定期輪詢 Oracle 資料庫,以接收週期性資料變更訊息。 您可以將預存程式、函式或封裝程式及函式指定為配接器定期執行的輪詢語句,以輪詢 Oracle 資料庫。
若要啟用此功能,您必須在 Oracle 資料庫配接器上指定特定系結屬性。 您也可以在連線 URI 中設定 PollingId 屬性,以修改 POLLINGSTMT 作業的目標命名空間。 如需詳細資訊,請參閱 支援在 Oracle 資料庫中接收輪詢型資料變更訊息 ,以及在 Oracle 資料庫配接 器中接收輪詢型資料變更訊息。 如需輪詢作業之 SOAP 訊息結構的相關資訊,請參閱 輪詢作業的訊息架構。
使用 Oracle 資料庫配接器系結屬性設定輪詢作業
Oracle 資料庫配接器會在交易內執行輪詢查詢和任何輪詢後 PL/SQL 程式碼區塊。 下表摘要說明您用來設定配接器以接收資料變更訊息的 Oracle 資料庫配接器系結屬性。 您必須在BizTalk Server管理主控台中設定 WCF-Custom 或 WCF-OracleDB 接收埠時指定這些系結屬性。
Binding 屬性 | Description |
---|---|
InboundOperationType | 指定您是否要執行輪詢或通知輸入作業。 預設值為 輪詢。 |
PolledDataAvailableStatement | 指定配接器執行的 SQL 語句,以判斷是否有任何資料可供輪詢。 只有在記錄可用時,才會執行您為 PollingStatement 系結屬性指定的預存程式。 |
PollingInterval | 指定 Oracle 資料庫配接器針對 PolledDataAvailableStatement 系結屬性所指定的語句,以秒為單位指定間隔。 預設值為 500 秒。 輪詢間隔會決定連續輪詢之間的時間間隔。 如果語句是在指定的間隔內執行,配接器會睡眠間隔中的剩餘時間。 預設值為 SELECT 1 FROM DUAL ,這表示配接器必須繼續輪詢,不論所輪詢的資料表是否有資料。 |
PollingStatement | 指定輪詢語句。 若要使用預存程式、函式或封裝程式或函式進行輪詢,您必須為此系結屬性中的個別作業指定整個要求訊息。 要求訊息必須與傳送至配接器相同,才能將個別作業叫用為輸出作業。 預設值是 null。 您必須指定 PollingStatement 系結屬性的值,才能啟用輪詢。 只有在有資料可供輪詢時,才會執行輪詢語句,這是 由 PolledDataAvailableStatement 系結屬性所決定。 |
PollingAction | 指定輪詢作業的動作。 您可以從您使用取用配接器服務增益集為作業產生的中繼資料,判斷特定作業的輪詢動作。 |
PostPollStatement | 指定執行 PollingStatement 系結屬性所指定語句之後所執行的語句區塊。 |
PollWhileDataFound | 指定 Oracle 資料庫配接器是否忽略輪詢間隔,並在輪詢的資料表中提供資料時持續執行輪詢語句。 如果資料表中沒有可用的資料,配接器會還原為在指定的輪詢間隔執行輪詢語句。 預設值為 false。 |
如需這些屬性的更完整描述,請參閱 閱讀 Oracle 資料庫配接器系結屬性。 如需如何使用 Oracle 資料庫配接器輪詢 Oracle 資料庫的完整描述,請參閱進一步閱讀。
本主題示範輪詢的方式
本主題示範如何使用預存程式輪詢 Oracle 資料庫。 建立 BizTalk 專案,並針對您想要用來輪詢 Oracle 資料庫的預存程式產生架構。 在本主題中,我們使用GET_ACTIVITYS預存程式來輪詢 ACCOUNTACTIVITY 資料表。 此預存程式可在 SCOTT 架構中的 ACCOUNT_PKG 套件中使用。 您可以執行範例所提供的 SQL 腳本,在資料庫中建立這些物件。
注意
本主題中的協調流程會輪詢 ACCOUNTACTIVITY 資料表,這是執行範例所提供的腳本所建立的資料庫資料表。 您必須執行類似本主題所述的程式,才能輪詢任何其他資料表。
為了示範輪詢作業,我們會執行下列動作:
指定 PolledDataAvailableStatement 系結屬性的 SELECT 語句,以判斷要輪詢的資料表 (ACCOUNTACTIVITY) 具有任何資料的位置。 在此範例中,您可以將這個系結屬性設定為:
SELECT COUNT (*) FROM ACCOUNTACTIVITY
這可確保配接器只有在 ACCOUNTACTIVITY 資料表有一些記錄時,才會執行輪詢語句。
藉由在 PollingStatement 系結屬性中提供要求訊息,以執行預存程式GET_ACTIVITYS。 此預存程式會擷取 ACCOUNTACTIVITY 資料表中的所有資料列,而且您會從配接器取得回應訊息。
在 PostPollStatement 系結屬性中執行 PL/SQL 區塊。 此語句會將所有資料從 ACCOUNTACTIVITY 資料表移至資料庫中的另一個資料表。 發生這種情況之後,下次執行 PollingStatement 時,它不會擷取任何資料,因此GET_ACTIVITYS預存程式會傳回空的回應訊息。
在將更多資料新增至 ACCOUNTACTIVITY 資料表之前,您將會繼續取得空的回應訊息。 因此,您必須使用新的記錄重新填入 ACCOUNTACTIVITY 資料表。 您可以執行範例所提供的 more_activity_data.sql 腳本來執行此動作。 執行此腳本之後,下一個輪詢作業會擷取插入資料表的新記錄。
如何從 Oracle 接收資料變更訊息
搭配使用 Oracle Database 配接器對 Oracle 資料庫執行作業BizTalk Server牽涉到下列建置組塊中所述的程式工作,以使用 Oracle Database 開發 BizTalk 應用程式。 若要設定配接器以使用預存程式輪詢 Oracle 資料庫:
建立 BizTalk 專案,並針對您想要用於輪詢的預存程式產生架構。
在 BizTalk 專案中建立訊息,以便從 Oracle 資料庫接收訊息。
建立協調流程以接收來自 Oracle 資料庫的訊息,並將其儲存至資料夾。
建置和部署 BizTalk 專案。
藉由建立實體傳送和接收埠來設定 BizTalk 應用程式。
重要
針對輸入輪詢案例,您必須一律設定單向接收埠。 輸入作業不支援雙向接收埠。
啟動 BizTalk 應用程式。
本主題提供執行這些工作的指示。
產生架構
您必須產生GET_ACTIVITYS作業的架構。 使用取用配接器服務增益集產生架構時,請執行下列工作。
選取合約類型作為 服務 (輸入作業) 。
產生 GET_ACTIVITYS 程式的架構。
如需如何產生架構的詳細資訊,請參閱 流覽、搜尋及取得 Oracle 資料庫作業的中繼資料。
定義訊息和訊息類型
您稍早產生的架構描述協調流程中訊息所需的「類型」。 訊息通常是變數,其類型是由對應的架構所定義。 產生架構之後,您必須從 BizTalk 專案的協調流程檢視將它連結到訊息。
針對本主題,您必須建立一則訊息,以接收來自 Oracle 的訊息。
執行下列步驟來建立訊息,並將其連結至架構。
建立訊息並連結至架構
將協調流程新增至 BizTalk 專案。 從方案總管中,以滑鼠右鍵按一下 BizTalk 專案名稱,指向 [新增],然後按一下 [新增專案]。 輸入 BizTalk 協調流程的名稱,然後按一下 [ 新增]。
如果 BizTalk 專案尚未開啟,請開啟協調流程檢視視窗。 按一下 [ 檢視],指向 [其他 Windows],然後按一下 [ 協調流程檢視]。
在 [ 協調流程檢視]中,以滑鼠右鍵按一下 [ 訊息],然後按一下 [ 新增訊息]。
以滑鼠右鍵按一下新建立的訊息,然後選取 [ 屬性視窗]。
在Message_1的 [屬性]窗格中,執行下列動作:
使用 作法 識別碼 輸入 Receive。 訊息類型 從下拉式清單中展開 [ 架構],然後選取 [Polling.OracleEBSBindingSchema],其中 Polling 是您 BizTalk 專案的名稱。 OracleEBSBindingSchema 是針對 GET_ACTIVITYS 預存程式產生的回應架構。
重要: 因為輪詢是單向作業,所以介面卡所產生的架構不包含回應節點,因此架構中只有一個根節點。 如果您針對訊息類型使用這類架構,則必須依產生的架構檔案名來識別架構。
例如,如果您為雙向作業建立架構,則具有名稱OracleEBSBindingSchema
的架構檔案中的節點看起來可能會像 「要求」和「回應」。 如果您想要在對應至要求架構的協調流程中建立訊息,您可以尋找OracleEBSBindingSchema.Request
來識別清單中的架構。 不過,在輪詢作業的情況下,因為唯一的節點是「輪詢」,所以您很難識別您想要對應的架構,因為具有單一節點的架構並未列為 < schemafilename > 。 <rootnodename > 。 相反地,這類架構只會以檔案名列出。 在這種情況下,識別架構的唯一方法是依架構檔名,例如 OracleEBSBindingSchema。取用配接器服務增益集會產生GET_ACTIVITYS預存程式的輸入和輸出作業架構。 您必須使用架構進行輸入作業,才能:
對應在協調流程中建立的訊息。
若要擷取動作,您必須在執行時間指定 PollingAction 系結屬性。
您必須使用輸出作業的架構來取得要求訊息,您必須指定為 PollingStatement 系結屬性的一部分。
設定協調流程
您必須建立 BizTalk 協調流程,以使用BizTalk Server從 Oracle 接收輪詢型資料變更訊息。 在此協調流程中,配接器會藉由執行您指定要求訊息作為 PollingStatement 系結屬性一部分的預存程式來接收回應。 預存程式的回應訊息會儲存至 FILE 位置。 輪詢 Oracle 資料庫的一般協調流程會包含:
接收和傳送圖形以接收來自 Oracle 的訊息,並分別傳送至 FILE 埠。
單向接收埠,可從 Oracle 資料庫接收訊息。
重要
針對輸入輪詢案例,您必須一律設定單向接收埠。 輸入作業不支援雙向接收埠。
單向傳送埠,可從 Oracle 資料庫傳送輪詢回應。
範例協調流程如下所示。
Oracle
新增訊息圖形
請確定您為每個訊息圖形指定下列屬性。 Shape 資料行中列出的名稱是訊息圖形的名稱,如剛才提及的協調流程所示。
圖形 | 圖形類型 | 屬性 |
---|---|---|
ReceiveMessage | 接收 | - 將 [名稱 ] 設定為 ReceiveMessage - 將 Activate 設定為 True |
SaveMessage | 傳送 | - 將 [名稱 ] 設定為 SaveMessage |
新增埠
請確定您為每個邏輯埠指定下列屬性。 [埠] 資料行中列出的名稱是協調流程中顯示的埠名稱。
連接埠 | 屬性 |
---|---|
OracleReceivePort | - 將 識別碼 設定為 OracleReceivePort - 將 類型 設定為 OracleReceivePortType - 將 通訊模式 設定為 單向 - 將 通訊方向 設定為 接收 |
SaveMessagePort | - 將 識別碼 設定為 SaveMessagePort - 將 類型 設定為 SaveMessagePortType - 將 通訊模式 設定為 單向 - 設定要傳送的通訊方向 |
指定動作圖形的訊息並連接到埠
下表指定屬性及其值,您應該設定為指定動作圖形的訊息,以及將訊息連結至埠。 Shape 資料行中列出的名稱是訊息圖形的名稱,如先前所述的協調流程所示。
圖形 | 屬性 |
---|---|
ReceiveMessage | - 設定要接收的訊息 - 將 作業 設定為 OracleReceivePort.Polling.Request |
SaveMessage | - 設定要接收的訊息 - 將 作業 設定為 SaveMessagePort.Polling.Request |
指定這些屬性之後,訊息圖形和埠就會連線,而且您的協調流程已完成。
您現在必須建置 BizTalk 解決方案,並將其部署至BizTalk Server。 如需詳細資訊,請參閱 建置和執行協調流程) 。
設定 BizTalk 應用程式
部署 BizTalk 專案之後,您稍早建立的協調流程會列在 [BizTalk Server 管理主控台] 的 [協調流程] 窗格中。 您必須使用 BizTalk Server 管理主控台來設定應用程式。 如需逐步解說,請參閱逐步解說 :部署基本 BizTalk 應用程式。
設定應用程式牽涉到:
選取應用程式的主機。
將您在協調流程中建立的埠對應至 BizTalk Server 管理主控台中的實體埠。 針對此協調流程,您必須:
定義硬碟上的位置,以及 BizTalk 協調流程將從 Oracle 卸載訊息的對應 FILE 埠。 這些訊息將會回應您為接收埠指定的輪詢語句。
定義實體 WCF-Custom 或單向接收埠 WCF-OracleDB。 此埠會輪詢 Oracle 資料庫。 如需如何建立接收埠的詳細資訊,請參閱 手動設定實體埠系結至 Oracle 資料庫配接器。 請確定您為接收埠指定下列系結屬性。
Binding 屬性 值 InboundOperationType 將此設定為 [輪詢]。 PolledDataAvailableStatement 在此範例中,將此系結屬性設定為:
SELECT COUNT (*) FROM ACCOUNTACTIVITY
這可確保配接器只有在 ACCOUNTACTIVITY 資料表有一些記錄時,才會執行輪詢語句。PollingAction 從針對GET_ACTIVITYS程式的輸入訊息產生的架構擷取輪詢動作。 在此範例中,將此系結屬性設定為 http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/PollingPackage/ACCOUNT_PKG/GET_ACTIVITYS
。PollingStatement 針對這個系結屬性,指定要叫用GET_ACTIVITYS預存程式的要求訊息。 您可以從取用配接器服務增益集所產生的輸出作業架構取得要求訊息。 您必須提供整個 XML 訊息做為此系結屬性的輸入。 在此範例中,將此系結屬性設定為:
<GET_ACTIVITYS xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACTIVITY"> <INRECS>OPEN ? FOR SELECT * FROM ACCOUNTACTIVITY</INRECS> </GET_ACTIVITYS>
GET_ACTIVITYS預存程式會採用輸入 REF CURSOR 作為參數。PostPollStatement 指定輪詢後語句,將所有資料從 ACCOUNTACTIVITY 資料表移至另一個資料表。 在此範例中,將此系結屬性設定為:
BEGIN ACCOUNT_PKG.PROCESS_ACTIVITY(); END;
如需不同系結屬性的詳細資訊,請參閱 閱讀 Oracle 資料庫配接器系結屬性。
注意
建議您在使用 Oracle 資料庫配接器執行輸入作業時設定交易隔離等級和交易逾時。 您可以藉由在設定接收埠時新增服務行為來執行此動作。 如需如何新增服務行為的指示,請參閱 設定交易隔離等級和交易逾時。
啟動應用程式
您必須啟動 BizTalk 應用程式來輪詢 Oracle 資料庫。 如需啟動 BizTalk 應用程式的指示,請參閱 如何啟動協調流程。
在這個階段,請確定:
WCF-Custom 或 WCF-OracleDB 單向接收埠,它會使用 針對 PollingStatement 系結屬性指定的預存程式輪詢 Oracle。
從 Oracle 資料庫接收訊息的 FILE 傳送埠正在執行。
作業的 BizTalk 協調流程正在執行。
執行作業
執行應用程式之後,會以相同循序執行下列一組動作:
配接器會執行 PolledDataAvailableStatement ,其會傳回正值,指出要執行 PollingStatement 系結屬性所指定的語句的配接器。
配接器會執行 針對 PollingStatement 系結屬性指定的GET_ACTIVITYS預存程式,並傳回 ACCOUNTACTIVITY 資料表中的所有資料列。 Oracle 資料庫的回應類似如下:
<?xml version="1.0" encoding="utf-8" ?> <GET_ACTIVITYS xmlns=" http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/PollingPackage/ACCOUNT_PKG"> <OUTRECS> <OUTRECSRecord xmlns=" http://Microsoft.LobServices.OracleDB/2007/03/ReferencedRecordTypes/SCOTT/ACCOUNT_PKG/GET_ACTIVITYS/SCOTT/GET_ACTIVITYS"> <TID>1</TID> <ACCOUNT>100001</ACCOUNT> <AMOUNT>500</AMOUNT> <DESCRIPTION /> <TRANSDATE>2008-06-21T15:52:19</TRANSDATE> <PROCESSED>n</PROCESSED> </OUTRECSRecord> <OUTRECSRecord xmlns=" http://Microsoft.LobServices.OracleDB/2007/03/ReferencedRecordTypes/SCOTT/ACCOUNT_PKG/GET_ACTIVITYS/SCOTT/GET_ACTIVITYS"> ...... ...... </OUTRECSRecord> ...... ...... </OUTRECS> </GET_ACTIVITYS>
配接器會執行輪詢後語句,將所有資料從 ACCOUNTACTIVITY 資料表移至另一個資料表。
輪詢間隔之後,配接器會再次執行 PolledDataAvailableStatement。 由於 ACCOUNTACTIVITY 資料表現在沒有記錄, PolledDataAvailableStatement 不會傳回正值,因此配接器不會執行 PollingStatement 系結屬性所指定的語句。 因此,配接器用戶端不會收到任何輪詢訊息。
配接器用戶端將不會再取得輪詢訊息,直到某些記錄明確插入 ACCOUNTACTIVITY 資料表為止。 若要插入更多記錄,您可以執行範例所提供的 more_activity_data.sql 腳本。 執行此腳本之後,下次執行 PolledDataAvailableStatement 時,它會傳回正值。 因此,配接器會再次執行輪詢語句,而配接器用戶端會再次接收輪詢訊息。
注意
Oracle 資料庫配接器會繼續輪詢,直到您從 BizTalk Server 管理主控台明確停用接收埠為止。
最佳做法
部署並設定 BizTalk 專案之後,您可以將組態設定匯出至稱為系結檔案的 XML 檔案。 產生系結檔案之後,您可以從檔案匯入組態設定,因此您不需要為相同的協調流程建立傳送埠和接收埠。 如需系結檔案的詳細資訊,請參閱 重複使用 Oracle 資料庫配接器系結。