共用方式為


使用 BizTalk Server 在 Oracle 資料庫上執行複合作業

Oracle Database 配接器可讓配接器用戶端在 Oracle 資料庫上執行複合作業。 複合作業可以包括:

  • 在資料表和檢視表上插入、更新、刪除和選取作業。

  • 封裝內部或外部的預存程式和函式。

    單一複合作業可以有任意數目的這些作業,依任何順序排列。 例如,您可以有兩個插入,後面接著一個刪除,最後是預存程式執行。 此外,您也可以有不同的作業,以不同的資料庫資料表或檢視為目標。 如需配接器如何支援複合作業的詳細資訊,請參閱 在 Oracle 資料庫中執行複合作業。 如需複合作業之 SOAP 訊息結構的相關資訊,請參閱 複合作業的訊息架構

如何在 Oracle 資料庫上執行複合作業?

搭配BizTalk Server使用 Oracle Database 配接器在 Oracle 資料庫上執行作業牽涉到建置組塊中所述的程式性工作,以使用 Oracle Database 開發 BizTalk 應用程式。 若要在 Oracle 資料庫上執行複合作業,這些工作如下:

  1. 在 Visual Studio 中建立 BizTalk 專案,並針對您想要叫用的所有作業產生架構。

  2. 手動建立架構檔案,其中包含您在上一個步驟中產生之所有架構的參考。

  3. 在 BizTalk 專案中建立訊息,以便從 Oracle 資料庫傳送和接收訊息。 這些訊息必須符合您在上一個步驟中建立的要求和回應架構。

  4. 建立協調流程以在 Oracle 資料庫上叫用複合作業。

  5. 建置和部署 BizTalk 專案。

  6. 藉由建立實體傳送和接收埠來設定 BizTalk 應用程式。

  7. 啟動 BizTalk 應用程式。

    本主題提供有關如何執行這些工作的指示。

產生架構

在本主題中,為了示範如何執行複合作業,我們將以相同循序執行下列工作:

  • 將記錄插入 ACCOUNTACTIVITY 資料表。

  • 叫用ACCOUNT_PKG封裝內的GET_ALL_ACTIVITY程式,以擷取 ACCOUNTACTIVITY 資料表中的所有記錄。

  • 從 ACCOUNTACTIVITY 資料表中刪除記錄。

    執行範例所提供的腳本,以建立 ACCOUNTACTIVITY 資料表。 如需範例的詳細資訊,請參閱 架構範例

    您必須建立 BizTalk 專案,並使用取用配接器服務增益集來產生架構。 如需如何產生架構的詳細資訊,請參閱 在 Visual Studio 中擷取 Oracle 資料庫作業的中繼資料

建立複合架構定義

您現在必須在 Visual Studio BizTalk 專案中建立複合架構,以參考您為個別作業建立的架構。 執行下列步驟來建立複合架構定義。

加入複合架構定義

  1. 將架構檔案新增至 Visual Studio 中的 BizTalk 專案。 以滑鼠右鍵按一下方案名稱,指向 [ 新增],然後按一下 [ 新增專案]。 在 [ 新增專案 ] 對話方塊中,從 [ 類別] 方塊中,按一下 [ 架構檔案]。 從 [ 範本] 方塊中,按一下 [ 架構]。 指定架構檔案的名稱,然後按一下 [ 確定]。

    在此範例中,請將架構檔案名指定為 CompositeSchema.xsd

  2. 新增針對您要執行之不同作業所產生的架構參考。 在此範例中,針對作業所產生的不同架構為:

    • OracleDBBinding.xsd,用於 ACCOUNTACTIVITY 資料表上的插入和刪除作業。

    • GET_ALL_ACTIVITY程式的 OracleDBBinding2.xsd。

      若要新增參考:

    1. 以滑鼠右鍵按一下 CompositeSchema.xsd 中的根< 架構 >節點,然後按一下 [屬性]。

    2. 在 [屬性]方塊中,按一下 [入] 屬性的省略號按鈕 (...)

      匯入架構定義

    3. 在 [ 匯入 ] 對話方塊中,從 [匯入 新的架構為 ] 清單中,選取 [XSD 匯入],然後按一下 [ 新增]。

    4. 在 [ BizTalk 類型選擇器 ] 對話方塊中,展開 [BizTalk 專案名稱] 節點、展開 [ 架構],然後選取您要匯入的架構。 在此範例中,選取 < [BizTalk_project_name > ]。OracleDBBinding.xsd。 按一下 [確定]。

      重複此步驟以匯 < 入 > BizTalk_project_name。OracleDBBinding2.xsd 也一樣。

    5. 在 [ 匯入 ] 對話方塊中,按一下 [ 確定]。

  3. 將兩個子節點新增至根架構節點。 一個子節點對應至執行複合作業的要求架構。 另一個子節點對應至回應架構。 對應至要求架構的節點可以有任何名稱。 對應至回應架構的節點必須在回應request_schema_node呼叫 <> 。 在此範例中,我們會將要求架構節點呼叫為 Request。 因此,回應架構節點稱為 RequestResponse

    注意

    根據預設, 節點也會新增至新的架構檔案。 您可以將 節點重新命名為 [要求]。 若要重新命名節點,請以滑鼠右鍵按一下節點名稱,然後按一下 [ 重新命名]。

    若要在[架構 > ] 節點下 <新增節點:

    1. 以滑鼠右鍵按一下[ < 架構] >節點,指向 [插入架構節點],然後按一下[子記錄]。

    2. 將新節點重新命名為 RequestResponse

  4. 在 [ 要求 ] 節點下新增子節點,該節點對應至您將作為複合作業一部分執行之每個作業的要求架構。 在此範例中,您必須新增對應至下列專案的子節點:

    • 在 ACCOUNTACTIVITY 資料表上插入和刪除作業。

    • GET_ALL_ACTIVITY程式。

    重要

    您必須以您想要執行作業的相同順序新增節點。 例如,如果您想要插入記錄,則執行預存程式,然後刪除記錄,您必須先新增插入作業的節點,後面接著預存程式的節點,最後是 Delete 作業的節點。

    若要將子節點新增至 [要求 ] 節點:

    1. 以滑鼠右鍵按一下 [要求 ] 節點,指向 [ 插入架構節點],然後按一下 [ 子記錄]。

      58992131-13a6-45c3-9513-5c0995091fae插入架構

    2. 重新命名記錄,以對應至您在複合作業中執行之作業的要求架構。 例如,將節點重新命名為 「Insert」。

    3. [插入 ] 節點對應至 ACCOUNTACTIVITY 資料表上 Insert 作業的要求架構。 若要這樣做,請以滑鼠右鍵按一下[插入] 節點,然後按一下 [屬性]。 在 [ 屬性 ] 方塊的 [ 資料類型] 清單中,選取 [ 插入 (參考)

      對應子節點以要求架構

    4. 重複這些步驟,為GET_ALL_ACTIVITY預存程式和 Delete 作業新增要求架構的節點。 指定節點名稱,並將其對應至下表所述的對應架構。

      節點名稱 對應至架構
      GET_ALL_ACTIVITY GET_ALL_ACTIVITY (參考)
      刪除 刪除 (參考)
  5. RequestResponse 節點下新增子節點,此節點對應至您將作為複合作業一部分執行之每個作業的回應架構。 在此範例中,您必須新增對應至下列專案的子節點:

    • 在 ACCOUNTACTIVITY 資料表上插入和刪除作業。

    • GET_ALL_ACTIVITY預存程式。

    重要

    您必須以與 要求 節點下子節點相同的順序新增子節點。

    若要將子節點新增至 RequestResponse 節點:

    1. 以滑鼠右鍵按一下 RequestResponse 節點,指向 [ 插入架構節點],然後按一下 [ 子記錄]。

    2. 將記錄重新命名為對應至您在複合作業中執行之作業的回應架構。 例如,將節點重新命名為 「InsertResponse」。

    3. InsertResponse 節點對應至 ACCOUNTACTIVITY 資料表上 Insert 作業的回應架構。 若要這樣做,請以滑鼠右鍵按一下 InsertResponse 節點,然後按一下 [ 屬性]。 在 [ 屬性 ] 方塊的 [ 資料類型 ] 清單中,選取 [插入][回應 (參考)

    4. 重複這些步驟,為GET_ALL_ACTIVITY預存程式和 Delete 作業的回應架構新增節點。 指定節點名稱,並將其對應至對應架構,如下表所述。

      節點名稱 對應至架構
      GET_ALL_ACTIVITYResponse GET_ALL_ACTIVITYResponse (參考)
      DeleteResponse DeleteResponse (參考)
  6. 儲存 CompositeSchema.xsd 檔案。

定義訊息和訊息類型

您在最後一個步驟中建立的複合架構描述協調流程中訊息所需的「類型」。 訊息通常是變數,其類型是由對應的架構所定義。 您現在必須建立協調流程的訊息,並將其連結至您在上一個步驟中建立的架構。

  1. 在 Visual Studio 中將協調流程新增至 BizTalk 專案。 從 方案總管,以滑鼠右鍵按一下 BizTalk 專案名稱,指向 [新增],然後按一下 [新增專案]。 輸入 BizTalk 協調流程的名稱,然後按一下 [ 新增]。

  2. 如果 BizTalk 專案尚未開啟,請開啟 [協調流程檢視] 視窗。 若要這樣做,請按一下 [ 檢視],指向 [其他 Windows],然後按一下 [ 協調流程檢視]。

  3. 在 [協調流程檢視] 中,以滑鼠右鍵按一下 [ 訊息],然後按一下 [ 新增訊息]。

  4. 以滑鼠右鍵按一下新建立的訊息,然後選取 [ 屬性視窗]。

  5. Message_1的 [屬性]窗格中,執行下列動作:

    使用 作法
    識別碼 輸入 Request
    訊息類型 從下拉式清單中展開 [ 架構],然後選取 [Composite_Op.CompositeSchema.Request],其中 Composite_Op 是您 BizTalk 專案的名稱。 CompositeSchema 是您針對複合作業手動建立的架構。
  6. 重複步驟 2 以建立新的訊息。 在新訊息的 [ 屬性] 窗格中,執行下列動作:

    使用 作法
    識別碼 輸入 Response
    訊息類型 從下拉式清單中展開 [ 架構],然後選取 [Composite_Op.CompositeSchema.RequestResponse]。

設定協調流程

您必須建立 BizTalk 協調流程,才能使用BizTalk Server在 Oracle 資料庫上執行複合作業。 在此協調流程中,您會在定義的接收位置卸載要求訊息。 要求訊息必須符合您稍早建立的複合架構。 Oracle 資料庫配接器會取用此訊息,並將其傳遞至 Oracle 資料庫。 Oracle 資料庫的回應會儲存到另一個位置。 您必須包含傳送和接收圖形,以分別將訊息傳送至 Oracle 資料庫和接收回應。 執行複合作業的基本協調流程如下所示:

協調流程至 peform 複合作業

新增訊息圖形

請確定您為每個訊息圖形指定下列屬性。 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 資料庫配接器系結

另請參閱

使用 Oracle 資料庫開發 BizTalk 應用程式的建置組塊