共用方式為


疑難排解啟動預存程序

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

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

Database Engine 會將啟動預存程序的輸出寫入 SQL Server 錯誤記錄檔。如果啟動預存程序產生了不正確的結果,或無法從佇列讀取,則請檢查 SQL Server 錯誤記錄檔以找到此程序的輸出。通常,預存程序的輸出提供了足以找到問題的資訊。

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

疑難排解啟動預存程序的其中一個最佳方法就是關閉佇列上的啟動,然後從 SQL Server Management Studio (或 sqlcmd 公用程式) 執行預存程序。從互動式工作階段執行預存程序可讓您查看由預存程序傳回的任何錯誤。

但是,當預存程序由 Database Engine 啟動時,資料庫設定和安全性內容可能會有所不同。執行此程序前,請使用 EXECUTE AS 將工作階段的使用者設定成為啟動指定的使用者,並將工作階段的選項設定成資料庫預設值。

如需詳細資訊,請參閱<Internal Activation Context>。

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

有數個出現此徵兆的常見原因。

可能變更了佇列的設定。使用目錄檢視 sys.service_queues 以確認佇列的設定。特別是,檢查以確定佇列的啟動是否啟用、佇列指定的預存程序是否正確,以及佇列指定的安全性主體是否正確。請確認安全性主體具有對預存程序的執行權限。

預存程序可能無法啟動,或啟動後可能立即結束。在此情況下,請檢查 SQL Server 錯誤記錄檔以查看來自預存程序的錯誤。您還可以從 SQL Server Management Studio 執行預存程序並檢查結果。

徵兆:訊息保留在佇列上

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

  • 請檢查動態管理檢視 sys.dm_broker_queue_monitors,以確定佇列的佇列監視器是否處於使用中狀態。如果不在使用中,則佇列的啟動將不為 ON。請使用 ALTER QUEUE 陳述式將啟動變為 ON。
  • 佇列之佇列監視器的狀態應為 RECEIVES_OCCURRING。如果佇列監視器未處於此狀態,請檢查動態管理檢視 sys.dm_broker_activated_tasks 以確定佇列的已啟動工作目前正在執行。如果沒有已啟動工作,則啟動將失敗。請參閱此章節中的「徵兆:啟動預存程序未執行」。

如果已啟動工作正在執行,但訊息仍保留在佇列上,則工作將或者無法 RECEIVE 或者無法認可交易。請檢查 SQL Server 錯誤記錄檔以查看來自預存程序的錯誤。停止啟動並手動執行預存程序可協助疑難排解此問題。

請參閱

其他資源

sys.service_queues (Transact-SQL)
sys.dm_broker_queue_monitors
sys.dm_broker_activated_tasks

說明及資訊

取得 SQL Server 2005 協助