共用方式為


MSSQLSERVER_832

適用於:SQL Server

詳細資料

屬性
產品名稱 SQL Server
事件識別碼 832
事件來源 MSSQLSERVER
元件 SQLEngine
符號名稱 B_CONSTPAGECHANGED
訊息文字 應該為常數的頁面已變更(預期總和檢查碼:預期值、實際總和檢查碼: < 實際值 >> 、資料庫 < dbid > 、檔案 ' < filename > '、pageno >< )。 < 這通常代表記憶體錯誤,或其他硬體或作業系統損毀。

說明

外部因素導致資料庫頁面在用來變更資料庫頁面的一般 SQL Server 引擎程式碼之外修改。 條件可能是:

  • 在 SQL Server 進程中執行的執行緒,在資料庫頁面上寫入不正確。 這通常稱為「塗鴉」
  • 硬體或作業系統問題是資料庫頁面的記憶體修改或損毀

當 SQL Server 偵測到此行為錯誤 832 時。

使用者動作

若要尋找錯誤的原因,請考慮下列選項:

  • 您應該執行任何一般硬體或系統檢查,以判斷記憶體、CPU 或其他硬體相關問題是否存在。 確定所有系統驅動程式、作業系統更新和硬體更新都已套用至我們的系統。 請考慮執行任何硬體製造診斷,包括記憶體相關測試。
  • 評估 SQL Server 中可能會載入哪些「外部」DLL,這可能會造成此問題,包括擴充預存程式、COM 物件或其他 DLL,這些 DLL 可能會錯誤地修改保留給資料庫頁面的 SQL Server 記憶體。

每當您看到此錯誤時,您應該立即考慮針對錯誤訊息中 dbid > 所 < 參考的資料庫執行 DBCC CHECKDB

其他相關資訊

背景工作通常稱為 LazyWriter,偵測到此錯誤。 (此工作的 「command」 被視為 LAZY WRITER)。 因此,這個錯誤不會傳回至用戶端應用程式。 錯誤會寫入 Windows 應用程式事件記錄檔作為 EventID=832。

只會檢查快取中目前未修改的頁面(或「已變更」)。 這就是為什麼訊息使用「常數」一詞的原因,因為頁面自從磁片讀取後從未變更過。 此外,頁面已從磁片讀取「乾淨」,因為它在頁面上有總和檢查碼值,而且沒有遇到總和檢查碼失敗(Msg 824)。 不過,在發生此錯誤之後,頁面可能會在某個時間點修改,然後以不正確的修改寫入磁片。 如果發生此錯誤,則會根據所有修改計算新的總和檢查碼,再寫入磁片。 因此,頁面可能會在磁片上損毀,但磁片的後續讀取可能不會觸發總和檢查碼失敗。 請務必在此錯誤所參考的任何資料庫上執行 DBCC CHECKDB

即使寫入磁片之後,甚至 DBCC CHECKDB 不會報告處於此狀態的分頁錯誤。 這是因為不正確的修改可能位於頁面上未保存任何資料的位置,或包含任何重要的頁面或資料列結構資訊,或是可能修改 CHECKDB 無法偵測的資料。

如需有關 Msg 832 的詳細資訊,請參閱 白皮書 SQL Server I/O 基本概念第 2 章。