共用方式為


疑難排解啟動預存程序

已啟動的預存程序會在背景工作階段上執行。因此,啟動預存程序的疑難排解技術與用於互動式工作階段一部份之預存程序的疑難排解技術之間稍有不同。

技術:分析 Service Broker 組態

如果已啟動的預存程序沒有成功執行,請使用 ssbdiagnose 公用程式來尋找相關聯之服務中的組態錯誤。如需詳細資訊,請參閱<ssbdiagnose 公用程式>。

技術:檢視啟動預存程序輸出

如果已啟動的預存程序產生不正確的結果,或者沒有從佇列讀取,請檢查 SQL Server 錯誤記錄檔中的錯誤與訊息以協助找出問題。已啟動的預存程序不會任何應用程式產生關聯。一般傳回給呼叫應用程式的資訊會放入 SQL Server 錯誤記錄檔中。這包括 PRINT 和 RAISERROR 陳述式的錯誤、訊息和輸出。

技術:從互動式工作階段執行預存程序

若要為啟動預存程序進行疑難排解,您可以在佇列上關閉啟動,然後從 SQL Server Management Studio 或 sqlcmd 公用程式執行預存程序。如果您從互動式工作階段執行預存程序,您可以看到該預存程序傳回的任何錯誤。

不過,如果互動式工作階段中的安全性內容和資料庫設定不同於預存程序啟動 Database Engine 時的安全性內容和資料庫設定,您可能會看到不同的結果。執行此程序前,請執行下列操作:

  • 使用 EXECUTE AS,將互動式工作階段的使用者設定為針對啟動所指定的使用者。

  • 將工作階段的選項設定為資料庫預設值。

如需詳細資訊,請參閱<內部啟動內容>。

徵兆:啟動預存程序未執行

下列為此徵兆的常見原因:

  • 佇列的設定可能已遭到變更。使用目錄檢視 sys.service_queues 來確認佇列的設定。請確認有啟用佇列的啟動、佇列指定正確的預存程序,而且佇列指定正確的安全性主體。確認安全性主體具備預存程序的執行權限。

  • 預存程序可能沒有啟動,或者可能在啟動後立即結束。在這個情況下,請檢查 SQL Server 錯誤記錄檔中是否有來自預存程序的錯誤。您也可以從 SQL Server Management Studio 執行預存程序,然後檢查結果。

徵兆:訊息保留在佇列上

請確定啟動預存程序正確啟動:

  • 檢查動態管理檢視 sys.dm_broker_queue_monitors 來確認佇列監視器可用於佇列。否則,請使用 ALTER QUEUE 陳述式來開啟啟動。

  • 用於佇列之佇列監視器的狀態應該為 RECEIVES_OCCURRING。如果佇列監視器不處於此狀態,請檢查動態管理檢視 sys.dm_broker_activated_tasks 以確定佇列的已啟動工作目前正在執行。如果沒有已啟動的工作,啟動就會失敗。如需詳細資訊,請參閱本主題稍早的「徵兆:啟動預存程序未執行」一節。

如果已啟動的工作正在執行,但是訊息仍然在佇列上,此工作就會無法 RECEIVE,或者無法認可交易。請檢查 SQL Server 錯誤記錄檔中是否有來自預存程序的錯誤。手動停止啟動與停止執行預存程序可能有助於疑難排解問題。