數據庫完整性檢查
以下為理論依據:
SQL Server數據庫可以檢測出頁損壞,此時,具體的表現形式可能為下述三種錯誤的一種:
823錯誤,也就是所謂的硬IO錯誤,可以理解為SQL Server希望讀取頁,而Windows告訴SQL Server,無法讀取到該頁。
824錯誤,也就是所謂的軟IO錯誤,可以理解為SQL Server已經讀取到該頁,但通過計算CheckSum等值發現不匹配,因此SQL Server認為該頁已經被損壞。
825錯誤,也就是所謂Retry錯誤。
SQL Server發現錯誤的方法有兩種,分別為在讀取頁時和在備份時(本質上也是讀取頁)。但如果我們希望對於數據一致性的檢查更加的全面,那我們應該定期使用CheckDB來檢查數據的一致性,而不至於在生產時間數據被讀取時才能發現錯誤。
CheckDB命令在企業版中會使用多線程來進行,會對整個數據庫進行一致性檢查,在該過程中,使用了內建數據庫快照的方式進行,因此不會造成阻塞,但CheckDB會消耗大量的CPU、內存和IO。因此CheckDB要選擇在維護窗口時間或是系統閑時進行。
實際上,CheckDB是一套命令的匯總,通過執行下列操作檢查指定數據庫中所有對象的邏輯和物理完整性:
初次檢查系統表
分配單元檢查(
完整檢查系統表
對所有表進行一致性邏輯檢查(DBCC CHECKTABLE)
元數據檢查(DBCC CHECKCATALOG)
SSB檢查
索引視圖、XML索引等檢查
微軟最佳實踐建議
“建議您使用 PHYSICAL_ONLY 選項,以便可以頻繁檢查生產系統。 使用 PHYSICAL_ONLY 可以極大地縮短對大型數據庫運行 DBCC CHECKDB 的運行時間。 同時建議您定期運行沒有選項的 DBCC CHECKDB。 應當以什麽頻率執行這些運行任務將取決於各個企業及其生產環境。
”引用自:
https://docs.microsoft.com/zh-cn/sql/t-sql/database-console-commands/dbcc-checkdb-transact-sql
成熟的方案
可以使用 https://ola.hallengren.com/
實現備份、完整性檢查、索引和統計信息維護整套方案。
數據庫完整性檢查