共用方式為


使用預存程式、函式或封裝程式和函式輪詢 Oracle 資料庫

您可以使用預存程式、函式或封裝程式和函式,設定 Oracle 資料庫配接器來接收定期的數據變更訊息,以定期輪詢 Oracle 資料庫。 您可以指定預存程序、函數或封裝的程序和函數作為輪詢語句,讓配接器定期執行以輪詢 Oracle 資料庫。

若要啟用此功能,您必須在 Oracle Database 配接器上指定特定系結屬性。 您也可以在連線 URI 中設定 PollingId 屬性,以修改 POLLINGSTMT 作業的目標命名空間。 如需詳細資訊,請參閱 支援在 Oracle 資料庫中接收輪詢型資料變更訊息 ,以及在 Oracle 資料庫配接器中接收輪詢型數據變更訊息。 如需輪詢作業之 SOAP 訊息結構的相關信息,請參閱 輪詢作業的訊息架構

使用 Oracle 資料庫配接器綁定屬性設定輪詢操作

Oracle Database 配接器會在交易內執行輪詢查詢以及任何輪詢後的 PL/SQL 程式碼區塊。 下表摘要說明您用來設定配接器以接收數據變更訊息的 Oracle 資料庫配接器系結屬性。 您必須在 BizTalk Server 管理控制台中設定 WCF-Custom 或 WCF-OracleDB 接收埠時,指定這些系結屬性。

綁定屬性 說明
InboundOperationType 指定您要執行輪詢或通知輸入作業。 預設為 輪詢
PolledDataAvailableStatement 指定配接器執行的 SQL 語句,以判斷是否有任何數據可供輪詢。 只有當記錄可用時,才會執行您為 PollingStatement系結 屬性指定的預存程式。
PollingInterval 指定 Oracle 資料庫配接器執行 PolledDataAvailableStatement 系結屬性所指定的語句的間隔,以秒為單位。 預設值為500秒。 輪詢間隔會決定連續輪詢之間的時間間隔。 如果語句在指定的間隔內執行,適配器會在間隔的剩餘時間內暫停。 默認值為 SELECT 1 FROM DUAL,這表示無論所輪詢的數據表是否有數據,配接器都必須繼續輪詢。
PollingStatement 指定輪詢語句。 若要使用預存程序、函式或封裝好的程序或函式進行輪詢,您必須在此繫結屬性中針對相應的作業指定整個請求訊息。 要求訊息必須與您傳送至配接器相同,才能將個別作業叫用為輸出作業。 預設值為 null。

您必須指定PollingStatement綁定屬性的值,才能啟用輪詢。 只有在有數據可供輪詢時,才會執行輪詢語句,這是 由 PolledDataAvailableStatement 系結 屬性所決定。
PollingAction 指定輪詢作業的動作。 您可以使用「取用配接器服務」附加元件為操作產生的元數據,判斷特定操作的輪詢動作。
PostPollStatement 指定在執行由 PollingStatement 系結屬性所指定的語句之後執行的語句區塊。
PollWhileDataFound 指定如果正在輪詢的數據表中有數據可用,Oracle Database 配接器是否忽略輪詢間隔,並持續執行輪詢語句。 如果數據表中沒有可用的數據,配接器會還原為在指定的輪詢間隔執行輪詢語句。 預設值為 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 資料表中的所有數據列,而且您會從配接器取得回應消息。

  • 執行 PL/SQL 區塊做為 PostPollStatement 系結 屬性的一部分。 此語句會將所有數據從 ACCOUNTACTIVITY 資料表移至資料庫中的另一個數據表。 一旦發生這種情況,下次執行 PollingStatement 時,它將不會擷取任何數據,因此GET_ACTIVITYS預存程式會傳回空的回應消息。

  • 在將更多數據新增至 ACCOUNTACTIVITY 資料表之前,您將會繼續取得空的回應消息。 因此,您必須使用新的記錄重新填入 ACCOUNTACTIVITY 資料表。 您可以執行範例所提供的more_activity_data.sql腳本來執行此動作。 執行此腳本之後,下一個輪詢作業會擷取插入數據表的新記錄。

如何從 Oracle 接收數據變更訊息

搭配 BizTalk Server 使用 Oracle 資料庫配接器在 Oracle 資料庫上執行作業牽涉到建置組塊中所述的下列程式性工作 ,以使用 Oracle Database 開發 BizTalk 應用程式。 若要設定配接器以使用預存程式輪詢 Oracle 資料庫:

  1. 建立 BizTalk 專案,並為您想要用於輪詢的儲存過程產生架構。

  2. 在 BizTalk 專案中建立訊息,以便從 Oracle 資料庫接收訊息。

  3. 建立協調流程以接收來自 Oracle 資料庫的訊息,並將其儲存至資料夾。

  4. 建置及部署 BizTalk 專案。

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

    這很重要

    針對內部輪詢案例,您必須一律設定單向接收埠。 不支援輸入操作的雙向接收埠。

  6. 啟動 BizTalk 應用程式。

    本主題提供執行這些工作的指示。

產生架構

您必須產生GET_ACTIVITYS作業的架構。 使用取用配接器服務增益集產生架構時,請執行下列工作。

定義訊息和訊息類型

您稍早產生的架構描述協調流程中訊息所需的「類型」。 訊息通常是變數,其類型是由對應的架構所定義。 一旦架構產生後,您必須從 BizTalk 專案的 Orchestration 視圖中將其連結到訊息。

針對本主題,您必須建立一則訊息,以接收來自 Oracle 的訊息。

執行下列步驟來建立訊息,並將其連結至架構。

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

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

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

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

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

    使用此 若要這樣做
    識別碼 輸入 Receive
    訊息類型 從下拉式清單中展開 [架構],然後選取 [Polling.OracleEBSBindingSchema],其中 Polling 是 BizTalk 項目的名稱。 OracleEBSBindingSchema 是針對 GET_ACTIVITYS 預存程式所產生的回應架構。

    重要: 因為輪詢是單向作業,所以配接器所產生的架構不包含響應節點,因此架構中只有一個根節點。 如果您針對訊息類型使用這類架構,則必須依所產生架構的檔名來識別架構。

    例如,如果您為雙向作業建立架構,則架構檔案中名稱為 OracleEBSBindingSchema 的節點可能看起來像是 “Request” 和 “Response”。 如果您想在協調流程中建立與要求架構對應的訊息,可以在清單中尋找 OracleEBSBindingSchema.Request 來識別架構。 不過,在輪詢作業的情況下,由於唯一的節點是 「輪詢」,因此無法輕易識別您想要對應的架構,因為具有單一節點的架構不會列為 <schemafilename>。<rootnodename>。 相反地,這類架構只會以檔名列出。 在這種情況下,識別架構的唯一方式是架構檔名,例如 OracleEBSBindingSchema。

    取用配接器服務附加元件會為 GET_ACTIVITYS 預存程序產生輸入和輸出操作的結構。 您必須使用架構進行輸入作業,才能:

    • 映射作為協同的一部分建立的訊息。

    • 若要擷取動作,您必須在運行時間指定 PollingAction 系結屬性。

      您必須使用輸出作業的架構來取得要求訊息,您必須指定為 PollingStatement 系結 屬性的一部分。

設定協調流程

您必須建立 BizTalk 協調流程,才能使用 BizTalk Server 從 Oracle 接收輪詢式數據變更訊息。 在此協調流程中,配接器會執行預存程式,將要求訊息指定為 PollingStatement 系結屬性的一部分來接收回應。 預存程序的回應消息會儲存至 FILE 位置。 查詢 Oracle 資料庫的典型調度過程會包含:

  • 接收和傳送圖形以接收來自 Oracle 的訊息,並分別傳送至 FILE 埠。

  • 從 Oracle 資料庫接收訊息的單向接收埠。

    這很重要

    針對內部輪詢案例,您必須一律設定單向接收埠。 不支援輸入操作的雙向接收埠。

  • 從 Oracle 資料庫傳送輪詢回應的單向傳送埠。

    範例編排如下所示。

    輪詢查詢的協調流程 Oracle

新增訊息圖形

請確定您為每個訊息圖形指定下列屬性。 Shape 數據行中所列的名稱是訊息圖形的名稱,如剛才提及的協調流程所示。

形狀 圖形類型 性能
接收訊息 收到 - 將 名稱 設定為 ReceiveMessage

- 將 Activate 設定為 True
儲存訊息 發送 - 將 [名稱] 設定為 SaveMessage

新增埠

請確定您為每個邏輯埠指定下列屬性。 [埠] 資料行中所列的名稱是協調流程中顯示的埠名稱。

港口 性能
OracleReceivePort - 將 標識符 設定為 OracleReceivePort

- 將 類型 設定為 OracleReceivePortType

- 將 通訊模式 設定為 單向

- 將 通訊方向 設定為 接收
SaveMessagePort - 將 標識碼 設定為 SaveMessagePort

- 將 類型 設定為 SaveMessagePortType

- 將 通訊模式 設定為 單向

- 將 通訊方向 設定為 傳送

指定動作圖形的訊息並連線到埠

下表指定您應該設定的屬性及其值,以配置動作圖形的訊息並將其連結至埠。 Shape 數據行中所列的名稱是訊息圖形的名稱,如先前所述的協調流程所示。

形狀 性能
接收訊息 - 將 訊息 設定為 接收

- 將 作業 設定為 OracleReceivePort.Polling.Request
儲存訊息 - 將 訊息 設定為 接收

- 將 作業 設定為 SaveMessagePort.Polling.Request

指定這些屬性之後,訊息圖形和埠會連線,且您的協調流程已完成。

您現在必須建置 BizTalk 解決方案,並將其部署至 BizTalk Server。 如需詳細資訊,請參閱 建置和執行協調流程

設定 BizTalk 應用程式

部署 BizTalk 項目之後,您稍早建立的協調流程會列在 BizTalk Server 管理控制台的 [ 協調流程 ] 窗格底下。 您必須使用 BizTalk Server 管理主控台來設定應用程式。 如需逐步講解,請參閱 逐步解說:部署基本 BizTalk 應用程式

設定應用程式牽涉到:

  • 選取應用程式的主機。

  • 將您在協調流程中建立的埠對應至 BizTalk Server 管理控制台中的實體埠。 為了這次編排,您必須:

    • 請定義硬碟上的某個位置,以及一個對應的 FILE 埠,讓 BizTalk 協調流程可以將來自 Oracle 的訊息放置於其中。 這些訊息將會是對您為接收埠指定的輪詢語句的回應。

    • 定義實體 WCF-Custom 或 WCF-OracleDB 單向接收埠。 這個端口會定期輪詢 Oracle 資料庫。 如需如何建立接收埠的資訊,請參閱 手動設定實體埠系結至 Oracle 資料庫配接器。 請確定您為接收埠指定下列系結屬性。

      綁定屬性 價值觀
      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 Database 配接器將持續進行輪詢,直到您從 BizTalk Server 管理控制台中明確停用接收埠為止。

最佳做法

部署並設定 BizTalk 項目之後,您可以將組態設定匯出至稱為系結檔案的 XML 檔案。 產生系結檔案之後,您可以從檔案匯入組態設定,讓您不需要為相同的協調流程建立傳送埠和接收埠。 如需系結檔案的詳細資訊,請參閱 重複使用 Oracle 資料庫配接器系結

另請參閱

使用 BizTalk Server 輪詢 Oracle 資料庫