使用鏡像架構時鏡像伺服器上的判斷提示失敗 SQL Server

本文討論使用 SQL Server 鏡像架構時,夥伴伺服器上可能發生的 Microsoft SQL Server 判斷提示失敗。

原始產品版本:SQL Server 2014、SQL Server 2012、SQL Server 2008 R2 SQL Server 2008
原始 KB 編號: 2729953

徵狀

在 SQL Server 鏡像架構中,您可能會在夥伴 (鏡像) 伺服器上遇到 SQL Server 判斷提示檢查失敗。 在這種情況下,請檢查 SQL Server 錯誤記錄檔以取得詳細數據。 在記錄中,您會發現類似下列訊息的錯誤訊息。 此錯誤通常表示您必須重建鏡像組。

SQL Server 判斷提示:檔案:loglock.cpp,line=834 Failed Assertion = 'result == LCK_OK' 。 此錯誤可能與時間有關。 如果在重新執行語句之後仍持續發生錯誤,請使用 DBCC CHECKDB 檢查資料庫的結構完整性,或重新啟動伺服器以確保記憶體內部數據結構不會損毀。

錯誤:3624,嚴重性:20,狀態:1。

判斷提示失敗通常是由軟體 Bug 或數據損毀所造成。 若要檢查資料庫損毀,請考慮執行 DBCC CHECKDB。 如果您同意在安裝期間將傾印傳送給 Microsoft,則會將小型傾印傳送給 Microsoft。 Microsoft 可能會在最新的 Service Pack 或技術支援的 QFE 中取得更新。

注意事項

發生此問題時,SQL Server 錯誤記錄檔資料夾中會產生小型傾印檔案。 此檔案的名稱類似 SQLDumpnnnn.mdmp 檔名。

原因

此問題可能會在不同的案例中發生。 每個案例都有不同的原因和解決方式,而且每個案例都可能導致相同的錯誤訊息和判斷提示失敗。

注意事項

  • 雖然錯誤簽章似乎非常明確,但實際的錯誤是由失敗的判斷提示所造成。 例如,此錯誤可能是因為判斷提示在 SQL Server 程式代碼中執行主動式檢查,以驗證狀況良好的狀況盡可能地失敗,而不是造成整個進程的當機。
  • 您無法輕易判斷實際原因。 Microsoft 客戶支援服務通常會決定原因。 這通常是藉由收集主體資料庫完整備份文件和涵蓋問題時間的事務歷史記錄備份來完成。 此外,可能需要鏡像的完整進程傾印檔案,才能在特定設定中重現問題。

解決方案

若要解決此問題,請取得您版本 SQL Server 的最新修正。 如需詳細資訊,請參閱下表。

原因 知識庫文章 第一個修正於
主要和鏡像之間的不同鎖定行為 2938828修正:資料庫鏡像叫用判斷提示,而鏡像會話在 2012 年或 2014 年 SQL Server SQL Server 顯示暫停狀態 2931693 2014 年 SQL Server 的累積更新 1,2931078 2012 SP1 SQL Server 累積更新 9
使用 Check_Constraints OFF 大量插入/BCP SQL Server 2012
加密金鑰的變更:資料庫主要金鑰、伺服器實例主要金鑰 SQL Server 2012

注意事項

  • 在上表中,最後一個數據行只會列出包含修正程式的第一個組建。 因為 SQL Server 組建是累積的,所以後續的組建,例如 SQL Server 2014 SP1 包含這些修正。 不過,這些組建不會列在數據表中。
  • 如需如何取得您版本之 SQL Server 的最新 Service Pack 的詳細資訊,請參閱判斷版本、版本和更新層級。 BCP/大量插入案例是針對 SQL Server 2008 和 SQL Server 2008 R2 保持未設定的常見案例,也是在這些版本上lck_ok判斷提示的最可能已知原因。 此問題在 2012 SQL Server 首次修正。 在舊版中未修正此問題的原因,是需要重新架構 SQL Server 事務歷史記錄內部。 這類變更只能包含在主要版本的 SQL Server 中。

另請參閱

執行大量插入或 BCP 時的判斷提示