症狀
假設您在 Microsoft SQL Server 2016 或 2017 中至少有一個 DTC_SUPPORT=PER_DB 的 AlwaysOn 可用性群組。 如果執行的 SQL Server 觸發程序包含至少一個可用性群組資料庫的跨資料庫交易,則可能會發生判斷提示失敗。 SQL Server 錯誤記錄檔會報告下列判斷提示失敗訊息:
DateTime spid20s * *******************************************************************************
DateTime spid20s * BEGIN STACK DUMP:
DateTime spid20s * Location: FileName:3880
DateTime spid20s * 運算式: m_state == BaseXact::XACT_PREPARED ||m_state == BaseXact::XACT_COMMITTED
DateTime spid20s * SPID: 20
DateTime spid20s Error: 17066, Severity: 16, state: 1.
DateTime spid20s SQL Server Assertion: File: FileName><, line=LineNumber failed Assertion = 'm_state == BaseXact::XACT_PREPARED || m_state == BaseXact::XACT_COMMITTED'。 此錯誤可能與時間有關。 如果重新執行陳述式後仍持續發生錯誤,請使用 DBCC CHECKDB 來檢查資料庫的結構完整性,或重新啟動伺服器以確保記憶體內資料結構未損毀。
DateTime spid20s 錯誤:3624,嚴重性:20,狀態:1。
DateTime spid20s 系統判斷提示檢查失敗。 如需詳細資料,請檢查 SQL Server 錯誤記錄檔。 一般而言,判斷提示失敗是由軟體錯誤或資料損毀所造成。 若要檢查資料庫損毀,請考慮執行 DBCC CHECKDB。 如果您同意在安裝期間傳送傾印給 Microsoft,將會將迷你傾印傳送給 Microsoft。 更新可能會從 Microsoft 的最新 Service Pack 或技術支援的 Hotfix 中取得。
此外,您可能會收到類似下列的錯誤訊息:
日期時間 伺服器錯誤:19407,嚴重性:16,狀態:1。
日期時間Server 可用性群組 'GroupName' 與 Windows Server 容錯移轉叢集之間的租用已過期。 SQL Server 執行個體與 Windows Server 容錯移轉叢集之間發生連線問題。 若要判斷可用性群組是否正確容錯移轉,請檢查 Windows Server 容錯移轉叢集中對應的可用性群組資源。
狀態
Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。
解決方式
累積更新資訊:
此問題已在下列 SQL Server 累積更新中修正:
關於 SQL Server 的累積更新:
SQL Server 的每個新累積更新都包含所有 Hotfix 和先前累積更新的所有安全性修正程式。 查看 SQL Server 的最新累積更新:
隨選 Hotfix 資訊:
這個問題已在下列 SQL Server 隨選 Hotfix 中修正:
參考資料
了解 Microsoft 用來說明軟體更新的術語。