共用方式為


支援在 Oracle 資料庫中接收輪詢型資料變更訊息

Oracle 資料庫配接器可讓用戶端程式接收來自 Oracle 資料庫的訊息,通知它們對儲存在 Oracle 資料庫中的資料所做的變更。 Oracle 資料庫配接器支援接收「輪詢型」訊息,其中配接器會在其中執行指定的 SELECT 查詢、預存程式、函數或封裝內的程式或函數、擷取資料,並以定期間隔將結果提供給用戶端。 若要啟用此功能,Oracle 資料庫配接器會公開 POLLINGSTMT 作業。 此外,封裝內的所有預存程式、函式和函式都會公開為輪詢的輸入作業。

配接器提供兩種輪詢 Oracle 資料庫的方式:

  • 使用 SELECT 語句。 您可以指定簡單的 SELECT 語句來輪詢 Oracle 資料庫中的資料表和檢視。 配接器會以指定的間隔執行 SELECT 語句,並將結果傳回給配接器用戶端。

  • 在封裝內使用預存程式、函式或程式或函式。 您可以指定封裝內的預存程式、函式或程式或函式來輪詢 Oracle 資料庫。 配接器會以指定的間隔執行要求訊息,並將結果傳回給配接器用戶端。

輪詢作業工作流程

使用 Oracle 資料庫配接器的一般輪詢作業牽涉到下列事項:

  1. 配接器用戶端必須將 Polling 指定為 InboundOperationType 系結屬性中的輸入作業。 這個系結屬性的預設值為 Polling

  2. 配接器用戶端必須指定 PolledDataAvailableStatement 系結屬性的 SELECT 語句,以判斷是否有資料可供輪詢。 在執行這個語句時,如果傳回之結果集第一列的第一個資料行包含正整數值,則有日期可供輪詢。 根據預設,這個系結屬性的值會設定為 Select 1 FROM DUAL ,這表示不論輪詢的資料表是否有資料,配接器都必須繼續輪詢。

  3. 配接器用戶端必須指定 PollingInterval 系結屬性的輪詢間隔,以秒為單位定義 執行 PolledDataAvailableStatement 系結屬性中指定的語句間隔。 在每個輪詢間隔結束時,會執行輪詢的資料可用語句,並傳回結果集。

  4. 配接器用戶端必須指定 PollingStatement 系結屬性的 SELECT 語句或預存程式。

    • 如果您想要輪詢資料表或檢視表,您必須在此系結屬性中指定 SELECT 查詢。

    • 如果您想要在封裝內使用預存程式、函式或程式或函數進行輪詢,您必須為此系結屬性中的個別作業指定整個要求訊息。

      只有在有資料可供輪詢時, 才會執行 PollingStatement 系結屬性中的 語句,這是由步驟 1 中的 PolledDataAvailableStatement 系結屬性所決定。

  5. 配接器用戶端必須在 PollingAction 系結屬性中指定輪詢作業的動作。 特定作業的輪詢動作取決於使用取用配接器服務增益集為作業產生的中繼資料。

    注意

    如果您要在 PollingStatement 系結屬性中使用 SELECT 語句輪詢資料表或檢視表,則不需要為 PollingAction 系結屬性指定任何值。 在此案例中會傳遞預設值 Null。

  6. 配接器用戶端可以使用 PollWhileDataFound 系結屬性來忽略輪詢間隔,並在可用時持續輪詢資料。

    重要

    如果您將 PollWhileDataFound 系結屬性的值設定為 True,配接器用戶端會持續輪詢來自 Oracle 的資料,並在程式中開啟並關閉迴圈中 Oracle 資料庫的連線。 由於 ODP.NET 開啟連線的速率大於關閉的連線,因此連線會在一段時間後耗盡,並擲回例外狀況。 若要解決此問題,請確定 UseOracleConnectionPool 的值設定為 True,而且 IncrPoolSize 系結屬性中提及適當的值,以控制介面卡用戶端可以開啟的連接數目。

  7. 配接器用戶端可以指定 PostPollStatement 系結屬性的輪詢後語句 Oracle PL/SQL 區塊。 執行 PollingStatement 系結屬性中指定的語句之後,就會執行這個系結屬性中指定的語句。

    配接器會將輪詢語句和輪詢後語句包裝在交易中,而交易逾時值會設定為 PollingInterval 系結屬性所指定的值。 因此,請務必指定大於或等於處理傳入訊息並傳送回復所需的時間的逾時值。 如果用戶端程式取用訊息或執行輪詢後查詢所花費的時間超過逾時值,則會回復交易。 如果花費的時間小於逾時值,配接器會在執行下一次輪詢之前,認可交易和「睡眠」。

    配接器會隱藏來自 Oracle 資料庫的任何空白輪詢回應。

輪詢和通知之間的差異

雖然輪詢和通知都是輸入作業,並通知配接器用戶端 Oracle 資料庫中的資料變更,但下表說明兩者之間的一些差異。 下列差異可協助您根據需求決定作業:

輪詢 通知
Oracle 資料庫配接器支援的所有 Oracle 資料庫版本輪詢。 只有 Oracle 資料庫 10.2 版和更新版本才支援通知。
您可以設定輪詢間隔,以定期檢查可供輪詢的資料,或當資料可用時立即進行輪詢。 提示: 輪詢可在資料變更持續發生的情況下提供更佳的輸送量,而且您不想在發生變更時收到每個變更的通知。 相反地,您會指定輪詢間隔,之後您想要收到自上次變更通知之後發生的所有變更通知。 資料變更通知一律是立即的。
輪詢是由配接器起始。 配接器會執行 SQL 語句來驗證資料是否可供輪詢,然後在某些資料可供輪詢時,藉由執行輪詢語句來起始輪詢。 通知是由 Oracle 資料庫起始。 介面卡所發出的通知語句只會指示資料庫在語句的結果集中發生變更時起始通知。 通知是 Oracle 資料庫的一項功能。
您可以使用輪詢語句來讀取或更新 Oracle 資料庫中的資料。 您可以使用通知語句,唯讀取 Oracle 資料庫中的資料。
輪詢會通知您已變更的實際資料。 通知只會通知資料中的變更類型,例如插入、更新和刪除。

如需下列詳細資訊︰

另請參閱

可以使用配接器執行哪些作業?