共用方式為


疑難排解路由和訊息傳遞

此章節提供與路由和訊息傳遞相關之常見徵兆的更正建議。

徵兆:保留在傳輸佇列內的訊息

請確定已在資料庫內啟動 Service Broker 訊息傳遞。sys.databasesis_broker_enabled 資料行會顯示是否已啟動 Broker 訊息傳遞,如下列範例所示:

SELECT is_broker_enabled FROM sys.databases
WHERE database_id = DB_ID() ;

可以停用 Broker 訊息傳遞,以防止將訊息傳遞至錯誤的資料庫。如需有關 Service Broker 訊息傳遞的詳細資訊,請參閱<管理 Service Broker 識別>。如需啟動 Service Broker 訊息傳遞的詳細資訊,請參閱<如何:啟動資料庫中的 Service Broker 訊息傳遞 (Transact-SQL)>。

如果 Service Broker 訊息傳遞為使用中狀態,請檢查 sys.transmission_queue 目錄檢視的 transmission_status 資料行中的訊息。常見錯誤訊息包括:

訊息 描述

服務沒有路由。

Service Broker 找不到指定之服務的路由。

無法連上目標 Service Broker。

Service Broker 無法將訊息傳遞至目標 Service Broker。

傳輸層無法使用。

執行個體中不存在 Service Broker 端點,或 Service Broker 端點未成功啟動。

目標佇列已停用。

目的地服務使用之佇列的 STATUS 選項設定為 OFF。Service Broker 不會將新的訊息加入 STATUS 為 OFF 的佇列中。

接收資料時發生錯誤:「10054(現有的連線已被遠端主機強制關閉。)」。

交談的遠端接受了 TCP/IP 連接,但在允許訊息傳送之前關閉了連接。

(無)

Service Broker 尚未嘗試傳送訊息。這可能表示在資料庫內尚未啟動 Service Broker 訊息傳遞。

徵兆:路由存在,但傳輸狀態顯示服務沒有路由

如果路由建立於訊息之後,則此徵兆的最常見原因是在建立路由之後未重試訊息。如需有關重試的詳細資訊,請參閱<Service Broker 路由和網路>。

請檢查並確定訊息中指定的服務名稱,與路由中指定的服務名稱完全相符。Service Broker 會使用逐一位元組的二進位比較方式,來比對服務名稱。如果指定服務名稱的路由存在,則檢查此比較的一種方法是執行類似下列的查詢:

SELECT N'No Exact Match' = tq.to_service_name
FROM sys.transmission_queue AS tq
WHERE NOT EXISTS
    (SELECT remote_service_name
     FROM sys.routes AS routes
     WHERE tq.to_service_name = routes.remote_service_name) ;

出現在結果集中的服務名稱,在資料庫路由表中沒有完全相符項。請注意,未指定服務名稱的路由與任何服務名稱都相符。如需有關路由的詳細資訊,請參閱<Service Broker 路由>。

如果訊息指定了 Broker 執行個體識別碼,請檢查路由是否也指定了同一 Broker 執行個體識別碼,或未指定 Broker 執行個體識別碼。

檢查路由是否尚未過期。sys.routes 目錄檢視的存留時間資料行包含路由的到期日和時間。

徵兆:傳輸狀態顯示無法連上目標 Service Broker

目的地不接受訊息。這可能表示指定的服務名稱與目的地 SQL Server 執行個體所裝載之服務的名稱不符,或目的地不包含該服務的路由。若要疑難排解此問題,請檢查目的地的路由和服務組態。

徵兆:傳輸狀態顯示傳輸層無法使用

請檢查 Service Broker 端點是否存在,且狀態為 STARTED。如果不存在,則建立端點。如需有關 Service Broker 端點的詳細資訊,請參閱<Service Broker 端點>。如需有關建立端點的詳細資訊,請參閱<如何:啟動 Service Broker 網路 (Transact-SQL)>。

徵兆:傳輸狀態顯示「遠端主機已強制關閉現有的連接」

可能未正確設定傳輸安全性,或路由的 TCP/IP 位址所指定之通訊埠正由 Service Broker 之外的其他服務使用。請注意,Service Broker 不使用「表格式資料流」通訊協定。該路由必須指定通訊埠,對應至遠端 SQL Server 執行個體上之 Service Broker 端點所使用的通訊埠。

檢查 Service Broker 端點組態,以確定兩個執行個體具有相容的網路安全性設定。如果一個執行個體的 Service Broker 端點指定 REQUIRED 或 ENABLED,則另一執行個體的 Service Broker 端點無法指定 NONE。

檢查 Service Broker 傳輸安全性的憑證、使用者和權限。<Service Broker 傳輸安全性>主題對傳輸安全性的組態進行了說明。

請參閱

工作

如何:啟動 Service Broker 網路 (Transact-SQL)

概念

Service Broker 路由和網路
Service Broker 端點
Service Broker 路由
啟動和停止佇列

其他資源

sys.databases (Transact-SQL)
sys.transmission_queue (Transact-SQL)
sys.routes (Transact-SQL)
sys.service_broker_endpoints (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助