使用 BizTalk Server 在 Oracle 資料庫上執行複合作業
Oracle Database 配接器可讓配接器用戶端在 Oracle 資料庫上執行複合作業。 複合作業可以包括:
在資料表和檢視表上插入、更新、刪除和選取作業。
封裝內部或外部的預存程式和函式。
單一複合作業可以有任意數目的這些作業,依任何順序排列。 例如,您可以有兩個插入,後面接著一個刪除,最後是預存程式執行。 此外,您也可以有不同的作業,以不同的資料庫資料表或檢視為目標。 如需配接器如何支援複合作業的詳細資訊,請參閱 在 Oracle 資料庫中執行複合作業。 如需複合作業之 SOAP 訊息結構的相關資訊,請參閱 複合作業的訊息架構。
如何在 Oracle 資料庫上執行複合作業?
搭配BizTalk Server使用 Oracle Database 配接器在 Oracle 資料庫上執行作業牽涉到建置組塊中所述的程式性工作,以使用 Oracle Database 開發 BizTalk 應用程式。 若要在 Oracle 資料庫上執行複合作業,這些工作如下:
在 Visual Studio 中建立 BizTalk 專案,並針對您想要叫用的所有作業產生架構。
手動建立架構檔案,其中包含您在上一個步驟中產生之所有架構的參考。
在 BizTalk 專案中建立訊息,以便從 Oracle 資料庫傳送和接收訊息。 這些訊息必須符合您在上一個步驟中建立的要求和回應架構。
建立協調流程以在 Oracle 資料庫上叫用複合作業。
建置和部署 BizTalk 專案。
藉由建立實體傳送和接收埠來設定 BizTalk 應用程式。
啟動 BizTalk 應用程式。
本主題提供有關如何執行這些工作的指示。
產生架構
在本主題中,為了示範如何執行複合作業,我們將以相同循序執行下列工作:
將記錄插入 ACCOUNTACTIVITY 資料表。
叫用ACCOUNT_PKG封裝內的GET_ALL_ACTIVITY程式,以擷取 ACCOUNTACTIVITY 資料表中的所有記錄。
從 ACCOUNTACTIVITY 資料表中刪除記錄。
執行範例所提供的腳本,以建立 ACCOUNTACTIVITY 資料表。 如需範例的詳細資訊,請參閱 架構範例。
您必須建立 BizTalk 專案,並使用取用配接器服務增益集來產生架構。 如需如何產生架構的詳細資訊,請參閱 在 Visual Studio 中擷取 Oracle 資料庫作業的中繼資料 。
建立複合架構定義
您現在必須在 Visual Studio BizTalk 專案中建立複合架構,以參考您為個別作業建立的架構。 執行下列步驟來建立複合架構定義。
加入複合架構定義
將架構檔案新增至 Visual Studio 中的 BizTalk 專案。 以滑鼠右鍵按一下方案名稱,指向 [ 新增],然後按一下 [ 新增專案]。 在 [ 新增專案 ] 對話方塊中,從 [ 類別] 方塊中,按一下 [ 架構檔案]。 從 [ 範本] 方塊中,按一下 [ 架構]。 指定架構檔案的名稱,然後按一下 [ 確定]。
在此範例中,請將架構檔案名指定為
CompositeSchema.xsd
。新增針對您要執行之不同作業所產生的架構參考。 在此範例中,針對作業所產生的不同架構為:
OracleDBBinding.xsd,用於 ACCOUNTACTIVITY 資料表上的插入和刪除作業。
GET_ALL_ACTIVITY程式的 OracleDBBinding2.xsd。
若要新增參考:
以滑鼠右鍵按一下 CompositeSchema.xsd 中的根< 架構 >節點,然後按一下 [屬性]。
在 [屬性]方塊中,按一下 [匯入] 屬性的省略號按鈕 (...) 。
在 [ 匯入 ] 對話方塊中,從 [匯入 新的架構為 ] 清單中,選取 [XSD 匯入],然後按一下 [ 新增]。
在 [ BizTalk 類型選擇器 ] 對話方塊中,展開 [BizTalk 專案名稱] 節點、展開 [ 架構],然後選取您要匯入的架構。 在此範例中,選取 < [BizTalk_project_name > ]。OracleDBBinding.xsd。 按一下 [確定]。
重複此步驟以匯 < 入 > BizTalk_project_name。OracleDBBinding2.xsd 也一樣。
在 [ 匯入 ] 對話方塊中,按一下 [ 確定]。
將兩個子節點新增至根架構節點。 一個子節點對應至執行複合作業的要求架構。 另一個子節點對應至回應架構。 對應至要求架構的節點可以有任何名稱。 對應至回應架構的節點必須在回應request_schema_node呼叫 <> 。 在此範例中,我們會將要求架構節點呼叫為 Request。 因此,回應架構節點稱為 RequestResponse。
注意
根據預設, 根 節點也會新增至新的架構檔案。 您可以將 根 節點重新命名為 [要求]。 若要重新命名節點,請以滑鼠右鍵按一下節點名稱,然後按一下 [ 重新命名]。
若要在[架構 > ] 節點下 <新增節點:
以滑鼠右鍵按一下[ < 架構] >節點,指向 [插入架構節點],然後按一下[子記錄]。
將新節點重新命名為 RequestResponse。
在 [ 要求 ] 節點下新增子節點,該節點對應至您將作為複合作業一部分執行之每個作業的要求架構。 在此範例中,您必須新增對應至下列專案的子節點:
在 ACCOUNTACTIVITY 資料表上插入和刪除作業。
GET_ALL_ACTIVITY程式。
重要
您必須以您想要執行作業的相同順序新增節點。 例如,如果您想要插入記錄,則執行預存程式,然後刪除記錄,您必須先新增插入作業的節點,後面接著預存程式的節點,最後是 Delete 作業的節點。
若要將子節點新增至 [要求 ] 節點:
以滑鼠右鍵按一下 [要求 ] 節點,指向 [ 插入架構節點],然後按一下 [ 子記錄]。
插入架構
重新命名記錄,以對應至您在複合作業中執行之作業的要求架構。 例如,將節點重新命名為 「Insert」。
將 [插入 ] 節點對應至 ACCOUNTACTIVITY 資料表上 Insert 作業的要求架構。 若要這樣做,請以滑鼠右鍵按一下[插入] 節點,然後按一下 [屬性]。 在 [ 屬性 ] 方塊的 [ 資料類型] 清單中,選取 [ 插入 (參考) 。
重複這些步驟,為GET_ALL_ACTIVITY預存程式和 Delete 作業新增要求架構的節點。 指定節點名稱,並將其對應至下表所述的對應架構。
節點名稱 對應至架構 GET_ALL_ACTIVITY GET_ALL_ACTIVITY (參考) 刪除 刪除 (參考)
在 RequestResponse 節點下新增子節點,此節點對應至您將作為複合作業一部分執行之每個作業的回應架構。 在此範例中,您必須新增對應至下列專案的子節點:
在 ACCOUNTACTIVITY 資料表上插入和刪除作業。
GET_ALL_ACTIVITY預存程式。
重要
您必須以與 要求 節點下子節點相同的順序新增子節點。
若要將子節點新增至 RequestResponse 節點:
以滑鼠右鍵按一下 RequestResponse 節點,指向 [ 插入架構節點],然後按一下 [ 子記錄]。
將記錄重新命名為對應至您在複合作業中執行之作業的回應架構。 例如,將節點重新命名為 「InsertResponse」。
將 InsertResponse 節點對應至 ACCOUNTACTIVITY 資料表上 Insert 作業的回應架構。 若要這樣做,請以滑鼠右鍵按一下 InsertResponse 節點,然後按一下 [ 屬性]。 在 [ 屬性 ] 方塊的 [ 資料類型 ] 清單中,選取 [插入][回應 (參考) 。
重複這些步驟,為GET_ALL_ACTIVITY預存程式和 Delete 作業的回應架構新增節點。 指定節點名稱,並將其對應至對應架構,如下表所述。
節點名稱 對應至架構 GET_ALL_ACTIVITYResponse GET_ALL_ACTIVITYResponse (參考) DeleteResponse DeleteResponse (參考)
儲存 CompositeSchema.xsd 檔案。
定義訊息和訊息類型
您在最後一個步驟中建立的複合架構描述協調流程中訊息所需的「類型」。 訊息通常是變數,其類型是由對應的架構所定義。 您現在必須建立協調流程的訊息,並將其連結至您在上一個步驟中建立的架構。
建立訊息並連結至架構
在 Visual Studio 中將協調流程新增至 BizTalk 專案。 從 方案總管,以滑鼠右鍵按一下 BizTalk 專案名稱,指向 [新增],然後按一下 [新增專案]。 輸入 BizTalk 協調流程的名稱,然後按一下 [ 新增]。
如果 BizTalk 專案尚未開啟,請開啟 [協調流程檢視] 視窗。 若要這樣做,請按一下 [ 檢視],指向 [其他 Windows],然後按一下 [ 協調流程檢視]。
在 [協調流程檢視] 中,以滑鼠右鍵按一下 [ 訊息],然後按一下 [ 新增訊息]。
以滑鼠右鍵按一下新建立的訊息,然後選取 [ 屬性視窗]。
在Message_1的 [屬性]窗格中,執行下列動作:
使用 作法 識別碼 輸入 Request
訊息類型 從下拉式清單中展開 [ 架構],然後選取 [Composite_Op.CompositeSchema.Request],其中 Composite_Op 是您 BizTalk 專案的名稱。 CompositeSchema 是您針對複合作業手動建立的架構。 重複步驟 2 以建立新的訊息。 在新訊息的 [ 屬性] 窗格中,執行下列動作:
使用 作法 識別碼 輸入 Response
訊息類型 從下拉式清單中展開 [ 架構],然後選取 [Composite_Op.CompositeSchema.RequestResponse]。
設定協調流程
您必須建立 BizTalk 協調流程,才能使用BizTalk Server在 Oracle 資料庫上執行複合作業。 在此協調流程中,您會在定義的接收位置卸載要求訊息。 要求訊息必須符合您稍早建立的複合架構。 Oracle 資料庫配接器會取用此訊息,並將其傳遞至 Oracle 資料庫。 Oracle 資料庫的回應會儲存到另一個位置。 您必須包含傳送和接收圖形,以分別將訊息傳送至 Oracle 資料庫和接收回應。 執行複合作業的基本協調流程如下所示:
新增訊息圖形
請確定您為每個訊息圖形指定下列屬性。 Shape 資料行中列出的名稱是訊息圖形的名稱,如剛才提及的協調流程所示。
圖形 | 圖形類型 | 屬性 |
---|---|---|
ReceiveMessage | 接收 | - 將 [名稱 ] 設定為 ReceiveMessage - 將 Activate 設定為 True |
SendMessage | 傳送 | - 將 [名稱 ] 設定為 SendMessage |
ReceiveResponse | 接收 | - 將 名稱 設定為 ReceiveResponse - 將 Activate 設定為 False |
SendResponse | 傳送 | - 將 名稱 設定為 SendResponse |
新增埠
請確定您為每個邏輯埠指定下列屬性。 [埠] 資料行中列出的名稱是協調流程中顯示的埠名稱。
連接埠 | 屬性 |
---|---|
MessageIn | - 將 識別碼 設定為 MessageIn - 將 類型 設定為 MessageInType - 將 通訊模式 設定為 單向 - 將 通訊方向 設定為 接收 |
LOBPort | - 將 識別碼 設定為 LOBPort - 將 類型 設定為 LOBPortType - 將 通訊模式 設定為 Request-Response - 將 通訊方向 設定為 Send-Receive |
ResponseOut | - 將 識別碼 設定為 ResponseOut - 將 類型 設定為 ResponseOutType - 將 通訊模式 設定為 單向 - 設定要傳送的通訊方向 |
指定動作圖形的訊息,並將其連線至埠
下表指定屬性及其值,您應該設定為指定動作圖形的訊息,以及將訊息連結至埠。 Shape 資料行中列出的名稱是訊息圖形的名稱,如先前所述的協調流程所示。
圖形 | 屬性 |
---|---|
ReceiveMessage | - 將 訊息 設定為 要求 - 將 作業 設定為 MessageIn.CompositeOp.Request |
SendMessage | - 將 訊息 設定為 要求 - 將 作業 設定為 LOBPort.CompositeOp.Request |
ReceiveResponse | - 將 訊息 設定為 回應 - 將 作業 設定為 LOBPort.CompositeOp.Response |
SendResponse | - 將 訊息 設定為 回應 - 將 作業 設定為 ResponseOut.CompositeOp.Request |
指定這些屬性之後,訊息圖形和埠會連線,而且您的協調流程已完成。
您現在必須建置 BizTalk 解決方案,並將其部署至BizTalk Server。 如需詳細資訊,請參閱 建置和執行協調流程。
設定 BizTalk 應用程式
部署 BizTalk 專案之後,您稍早建立的協調流程會列在 BizTalk Server 管理主控台的 [協調流程] 窗格底下。 您必須使用 BizTalk Server 管理主控台來設定應用程式。 如需逐步解說,請參閱 逐步解說:部署基本 BizTalk 應用程式。
設定應用程式牽涉到:
選取應用程式的主機。
將您在協調流程中建立的埠對應至 BizTalk Server 管理主控台中的實體埠。 針對此協調流程,您必須:
定義硬碟上的位置,以及您將卸載要求訊息的對應檔案埠。 BizTalk 協調流程會取用要求訊息,並將其傳送至 Oracle 資料庫。
定義硬碟上的位置和對應的檔案埠,BizTalk 協調流程將會卸載包含 Oracle 資料庫回應的回應訊息。
定義實體 WCF-Custom 或 WCF-OracleDB 傳送埠,以將訊息傳送至 Oracle 資料庫。 因為做為複合作業一部分的作業是在單一交易中執行,所以請確定 UseAmbientTransaction 系結屬性已設定為 True。
您也必須在傳送埠中指定動作。 複合作業的動作為 「 <http://Microsoft.LobServices.OracleDB/2007/03/CompositeOperation 」。 > 如需如何建立埠的詳細資訊,請參閱 手動設定實體埠系結至 Oracle 資料庫配接器。 如需如何指定埠動作的詳細資訊,請參閱 設定 Oracle 資料庫的 SOAP 動作。
注意
使用取用配接器服務 BizTalk 專案增益集產生架構也會建立系結檔案,其中包含要針對這些埠設定的埠和動作的相關資訊。 您可以從 BizTalk Server 管理主控台匯入此系結檔案,以建立輸出通話的傳送埠 () ,或針對輸入呼叫) 接收埠 (。 如需詳細資訊,請參閱 使用埠系結檔案設定實體埠系結至 Oracle Database。 如果您匯入此系結檔案,傳送埠上的動作會設定為動態動作,牽涉到您在產生架構時取用配接器服務增益集中選取的所有作業。 針對複合作業,您必須將動態動作取代為 「 <http://Microsoft.LobServices.OracleDB/2007/03/CompositeOperation 」。 >
啟動應用程式
您必須啟動 BizTalk 應用程式,才能在 Oracle 資料庫上執行複合作業。 如需啟動 BizTalk 應用程式的指示,請參閱 如何啟動協調流程。
在這個階段,請確定:
要接收協調流程要求訊息的 FILE 接收埠正在執行。
從協調流程接收回應訊息的 FILE 傳送埠正在執行。
WCF-Custom 或 WCF-OracleDB 傳送埠,以將訊息傳送至 Oracle 資料庫正在執行。
作業的 BizTalk 協調流程正在執行。
執行作業
執行應用程式之後,您必須將要求訊息卸載至 FILE 接收位置。 要求訊息的架構必須符合您稍早建立之複合作業的架構。 例如,在 ACCOUNTACTIVITY 資料表中插入記錄的要求訊息、叫用GET_ALL_ACTIVITY預存程式,並從 ACCOUNTACTIVITY 資料表中刪除記錄為:
<Request xmlns="http://Composite_Op.CompositeSchema">
<Insert xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/ACCOUNTACTIVITY">
<RECORDSET>
<ACCOUNTACTIVITYRECORDINSERT>
<TID>1</TID>
<ACCOUNT>100001</ACCOUNT>
<AMOUNT>1500</AMOUNT>
<DESCRIPTION></DESCRIPTION>
<TRANSDATE>2008-06-21T15:52:19</TRANSDATE>
<PROCESSED>n</PROCESSED>
</ACCOUNTACTIVITYRECORDINSERT >
</RECORDSET>
</Insert>
<GET_ALL_ACTIVITY xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG"/>
<Delete xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/ACCOUNTACTIVITY">
<FILTER>WHERE AMOUNT = 1500</FILTER>
</Delete>
</Request>
上述要求訊息會先插入記錄,然後叫用GET_ALL_ACTIVITY程式,以取得 ACCOUNTACTIVITY 資料表中的所有記錄。 然後,藉由指定 FILTER 子句來刪除插入的記錄。 如需使用 Oracle 資料庫配接器在 Oracle 資料庫上執行複合作業之要求訊息架構的詳細資訊,請參閱 複合作業的訊息 架構。
協調流程會取用訊息,並將其傳送至 Oracle 資料庫。 Oracle 資料庫的回應會儲存在定義為協調流程一部分的其他 FILE 位置。 例如,上述要求訊息的 Oracle 資料庫的回應類似如下:
<?xml version="1.0" encoding="utf-8" ?>
<RequestResponse xmlns="http://Composite_Op.CompositeSchema">
<InsertResponse xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOOT/Table/ACCOUNTACTIVITY">
<InsertResult>1</InsertResult>
</InsertResponse>
<GET_ALL_ACTIVITYResponse xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG">
<ALLRECS>
<xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element msdata:IsDataSet="true" name="NewDataSet">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="NewTable">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="TID" type="xs:decimal" />
<xs:element minOccurs="0" name="ACCOUNT" type="xs:decimal" />
<xs:element minOccurs="0" name="AMOUNT" type="xs:decimal" />
<xs:element minOccurs="0" name="DESCRIPTION" type="xs:string" />
<xs:element minOccurs="0" name="TRANSDATE" type="xs:dateTime" />
<xs:element minOccurs="0" name="PROCESSED" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<NewTable>
......
......
</NewTable>
......
......
<NewTable>
<TID>10</TID>
<ACCOUNT>100001</ACCOUNT>
<AMOUNT>1000</AMOUNT>
<TRANSDATE>2008-07-28T21:39:57</TRANSDATE>
<PROCESSED>n</PROCESSED>
</NewTable>
</NewDataSet>
</diffgr:diffgram>
</ALLRECS>
</GET_ALL_ACTIVITYResponse>
<DeleteResponse xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/ACCOUNTACTIVITY">
<DeleteResult>1</DeleteResult>
</DeleteResponse>
</RequestResponse>
上述回應包含多個結果集,對應做為複合作業一部分執行的不同作業。 例如, InsertResult
元素包含 '1',表示 Insert 作業所插入的資料列數目。 同樣地,元素 DeleteResult
包含 '1',表示 Delete 作業所刪除的資料列數目。
重要
如果您在執行複合作業時遇到逾時問題,可能是因為連接數目小於涉及下列複合作業的作業數目:
包含 BFILE、BLOB、CLOB、NCLOB 和 REF CURSOR 做為 OUT 或 IN OUT 參數的預存程式。
- 選取作業。
若要解決此問題,您必須確定複合作業中有 「n」 個這類作業數目, 則為 MinPoolSize 系結屬性指定的值為 「n+1」 或更新版本。 如需 MinPoolSize 系結屬性的詳細資訊,請參閱 使用系結屬性。
最佳做法
部署並設定 BizTalk 專案之後,您可以將組態設定匯出至稱為系結檔案的 XML 檔案。 產生系結檔案之後,您可以從檔案匯入組態設定,因此您不需要為相同的協調流程建立傳送埠和接收埠等專案。 如需系結檔案的詳細資訊,請參閱 重複使用 Oracle 資料庫配接器系結。