使用鏡像架構時鏡像伺服器上的判斷提示失敗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 年 SQL Server 或 2014 SQL Server顯示暫停狀態 2931693 2014 年 SQL Server 的累積更新 1,2931078 2012 年 SQL Server SP1 的累積更新 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 時的判斷提示