管理和理解 suspect_pages 表
?
管理 suspect_pages 表 (SQLServer)
?
在SQL Server 2014 中suspect_pages 表可用來維護有關可疑頁的信息,并且還有助于確定有無必要進行還原。 suspect_pages 表位于 msdb 數據庫中。
如果 SQL Server 數據庫引擎在試圖讀取某個數據頁時遇到下列錯誤之一,該頁面將被視為“可疑”:
- 由操作系統發出的循環冗余檢查 (CRC) 導致的 823 錯誤,如磁盤錯誤(某些硬件錯誤)
- 824 錯誤,如頁撕裂(任何邏輯錯誤)
?
每個可疑頁的頁 ID 將記錄在 suspect_pages 表中。 數據庫引擎將記錄在常規處理過程中發現的所有可疑頁,例如在下列情況下:
- 查詢必須讀取頁。
- 在運行 DBCC CHECKDB 的過程中。
- 在備份操作的過程中。
?
當執行還原操作、DBCC 修復操作或刪除數據庫操作時,suspect_pages 表也會根據需要進行更新。
開始之前
建議
- suspect_pages 表中記錄的錯誤
在 suspect_pages 表中,由于出現 824 錯誤而失敗的每頁占一行,最多為 1,000 行。下表顯示了記錄在 suspect_pages 表的event_type 列中的錯誤。
| 錯誤說明 | event_type 值 |
| 由操作系統 CRC 錯誤造成的 823 錯誤,或者校驗和錯誤或頁撕裂以外的 824 錯誤(例如,頁 ID 錯誤) | 1 |
| 錯誤的校驗和 | 2 |
| 殘缺頁 | 3 |
| 已還原(頁在標記為錯誤后已還原) | 4 |
| 已修復(DBCC 修復了頁) | 5 |
| 已由 DBCC 釋放 | 7 |
暫時性的錯誤也會記錄在 suspect_pages 表中。暫時性錯誤的來源包含 I/O 錯誤(例如電纜斷開連接)或暫時未通過重復校驗和測試的頁。
- 數據庫引擎如何更新 suspect_pages 表
數據庫引擎對 suspect_pages 表執行下列操作:
- 如果表未滿,則每出現一個 824 錯誤,該表都會更新以指明出現了錯誤,且錯誤計數器也將相應遞增。 如果通過修復、還原或釋放操作修復后的頁仍有錯誤,則其 number_of_errors 計數將會遞增,其 last_update 列也會更新
- 列出的頁通過還原或修復操作修復之后,該操作將更新 suspect_pages 行,以指示此頁已修復 (event_type = 5) 或已還原 (event_type = 4)。
- 如果運行 DBCC 檢查,則該檢查會將所有未出錯頁標記為已修復 (event_type = 5) 或已釋放 (event_type = 7)。
- 自動更新 suspect_pages 表
嘗試讀取數據文件中的某一頁由于以下原因之一失敗后,數據庫鏡像伙伴或 AlwaysOn 可用性副本將更新suspect_pages 表。
- 由操作系統 CRC 錯誤導致的 823 錯誤。
- 824 錯誤(像頁撕裂這樣的邏輯損壞)。
以下操作還自動更新 suspect_pages 表中的行。
- DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS 更新 suspect_pages 表,以指示已釋放或已修復的各頁。
- 完整還原、文件還原或頁面還原將頁面項標記為已還原。
以下操作將自動從 suspect_pages 表中刪除行。
- ALTER DATABASE REMOVE FILE
- DROP DATABASE
- 數據庫管理員的維護角色
數據庫管理員負責管理表(主要通過刪除舊的行實現)。 suspect_pages 表有大小限制,如果此表已滿,則不會記錄新的錯誤。 若要防止此表填滿,數據庫管理員或系統管理員必須通過刪除行來手動清除此表中的舊條目。因此,我們建議您定期刪除或存檔 event_type 為已還原或已修復的行或具有舊 last_update 值的行。
有時會因暫時性錯誤而向 suspect_pages 表添加行。如果正在向該表添加很多行,則 I/O 子系統可能出了問題。 如果您注意到正向該表添加的行數突然增加,我們建議您檢查一下 I/O 子系統是不是出現了問題。
數據庫管理員還可以插入或更新記錄。 例如,如果數據庫管理員知道某個特定的可疑頁實際上沒問題但想要暫時保留記錄,更新行可能就很有用。 (jesse備注:可以有利于恢復用戶數據)
總結
以上是生活随笔為你收集整理的管理和理解 suspect_pages 表的全部內容,希望文章能夠幫你解決所遇到的問題。