MSSQLSERVER_824

適用於:SQL Server

詳細資料

屬性
產品名稱 SQL Server
事件識別碼 824
事件來源 MSSQLSERVER
元件 SQLEngine
符號名稱 B_HARDSSERR
訊息文字 SQL Server 偵測到邏輯的一致性 I/O 錯誤: %ls。 這是當在檔案 '%ls' 中位移 %#016I64x 的資料庫識別碼 %d 之頁面 %S_PGID 進行 %S_MSG 的期間所發生的。 SQL Server 錯誤記錄檔和作業系統錯誤記錄檔中的訊息,或許可以提供其他詳細資訊。 這是嚴重的錯誤狀況,且可能會損及資料庫的完整性,所以必須立即更正。 完成完整資料庫一致性檢查 (DBCC CHECKDB)。 導致這個錯誤的原因有許多可能性;如需詳細資訊,請參閱 https://go.microsoft.com/fwlink/?linkid=2252374

徵兆

如果在讀取或寫入資料庫頁面之後,發生邏輯一致性檢查失敗,SQL Server 錯誤記錄檔或 Windows 應用程式事件記錄檔中可能會遇到下列錯誤訊息:

2022-11-02 15:46:42.90 spid51      Error: 824, Severity: 24, State: 2.
2022-11-02 15:46:42.90 spid51      SQL Server detected a logical consistency-based I/O error: incorrect pageid (expected 1:43686; actual 0:0). It occurred during a read of page (1:43686) in database ID 23 at offset 0x0000001554c000 in file 'H:\MSSQL16.MSSQLSERVER\MSSQL\DATA\my_db.mdf'. Additional messages in the SQL Server error log or operating system error log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see https://go.microsoft.com/fwlink/?linkid=2252374.

如果 SELECT 或 DML 查詢執行至此訊息,則會將錯誤訊息傳回至應用程式,並終止資料庫連線。

原因

此錯誤指示 Windows 報告已成功從磁碟讀取頁面,但 SQL Server 發現頁面發生錯誤。 此錯誤類似於錯誤 823,不同之處在於 Windows 未偵測到錯誤。 錯誤 824 通常指示 I/O 子系統發生問題,例如磁碟機失敗、韌體問題、裝置驅動程式等等。 如需有關 I/O 錯誤的詳細資訊,請參閱 Microsoft SQL Server I/O 基本概念,第 2 章

SQL Server 會使用下列 Windows API 來執行 I/O 作業:ReadFileWriteFileReadFileScatterWriteFileGather。 完成這些 I/O 作業之後,SQL Server 會檢查與這些 API 呼叫關聯的任何錯誤狀況。 如果這些 API 呼叫失敗,並發生作業系統錯誤,則 SQL Server 會報告錯誤 823。 在某些情況下,Windows API 呼叫實際上會成功,但 I/O 作業傳輸的資料可能會遇到邏輯一致性問題。 這些邏輯一致性問題會透過錯誤 824 報告。

824 錯誤包含下列資訊:

  • 執行 I/O 作業的資料庫檔案
  • 嘗試 I/O 作業的檔案位移
  • 此檔案所屬的資料庫
  • I/O 作業涉及的頁碼
  • 作業是讀取還是寫入作業
  • 有關失敗的邏輯一致性檢查的詳細資料 (用於此檢查的檢查類型、實際值和預期值)

這些邏輯一致性檢查是由 SQL Server 執行的完整性檢查,以確保整個 I/O 作業中涉及 I/O 傳輸的資料關鍵元素保持完整。 檢查包括總和檢查碼、損毀頁面、簡短傳輸、不正確的頁面識別碼、過時的讀取,以及頁面稽核失敗。 執行檢查的性質視乎資料庫和伺服器層級的不同組態選項而有所差異。

824 錯誤訊息通常指示,基礎儲存體系統或硬體或驅動程式在 I/O 要求路徑中發生問題。 若檔案系統中存在不一致或資料庫檔案損毀,您可能會遇到此錯誤。

解決方法

如果發生錯誤 824,可嘗試下列解決方法:

  • 檢閱 msdb 中的 suspect_pages 資料表,以查看是否有其他頁面 [在相同或不同的資料庫中] 發生此問題。

    SELECT * FROM msdb..suspect_pages
    WHERE (event_type = 1 OR event_type = 2 OR event_type = 3);
    
  • 使用 DBCC CHECKDB 命令來檢查 (與 824 訊息所報告的) 相同磁碟區的資料庫是否一致。 如果 DBCC CHECKDB 命令找出不一致,則請使用知識庫文章如何針對 DBCC CHECKDB 報告的資料庫一致性錯誤進行疑難排解中的指引。

    DBCC CHECKDB;
    
  • 如果發生這些 824 錯誤的資料庫未開啟 PAGE_VERIFY CHECKSUM 資料庫選項,請立即開啟該選項。 824 錯誤可能有總和檢查碼失敗以外的其他發生原因,但 CHECKSUM 是將頁面寫入磁碟之後驗證頁面一致性的最佳選擇。 使用此指令碼來識別未啟用 CHECKSUM 選項的資料庫:

    SELECT * FROM sys.databases
    WHERE page_verify_option_desc != 'CHECKSUM';
    
  • 檢查 Windows 事件記錄檔中是否有從作業系統或儲存裝置或裝置驅動程式回報的任何錯誤或訊息。 如其在某方面與此錯誤相關,您應先解決這些錯誤。 例如,除 824 訊息以外,您可能也會注意到事件記錄檔中由磁碟來源回報的「驅動程式在 \Device\Harddisk4\DR4 上偵測到控制器錯誤」之類事件。 在此情況下,您必須評估此檔案是否存在於此裝置上,然後先更正這些磁碟錯誤。

  • 使用 SQLIOSim 公用程式,找出這些 824 錯誤能否在一般 SQL Server I/O 要求外重現。 SQLIOSim 隨附於 SQL Server 2008 (10.0.x) 和更新版本,因此不需要另行下載。

  • 請與硬體廠商或裝置製造商合作,以確保:

    • 硬體裝置和組態符合 SQL Server 的 I/O 需求
    • I/O 路徑中所有裝置的裝置驅動程式和其他支援軟體元件都已更新。
  • 如果硬體廠商或裝置製造商提供了任何診斷公用程式,則請使用這些程式來評估 I/O 系統的健全狀況。

  • 評估這些 I/O 要求路徑中是否存在篩選器驅動程式。 您可執行下列命令來列出系統上的所有篩選器驅動程式:

    fltmc filters
    fltmc instances
    
    • 排除此類篩選器驅動程式正在掃描的資料庫和記錄檔。 如需詳細資訊,請參閱要從病毒掃描中排除的目錄和副檔名
    • 檢查這些篩選器驅動程式是否有任何更新
    • 可否移除或停用這些篩選器驅動程式,以觀察導致 824 錯誤的問題是否消失?
  • 如果您正在執行虛擬機器,請確定所有虛擬化驅動程式都已更新,或諮詢虛擬化廠商以取得詳細資訊。

  • 如果問題與硬體無關,而且確定有未受影響的備份可以使用,請利用該備份來還原資料庫。