溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

數(shù)據(jù)庫完整性檢查

發(fā)布時間:2020-08-05 17:30:42 來源:網(wǎng)絡(luò) 閱讀:5732 作者:UltraSQL 欄目:MySQL數(shù)據(jù)庫

為了主動發(fā)現(xiàn)數(shù)據(jù)庫側(cè)頁損壞,保證數(shù)據(jù)庫邏輯和物理完整性,計劃每周六上午6點,針對生產(chǎn)主庫上的所有系統(tǒng)和用戶數(shù)據(jù)庫執(zhí)行DBCC CHECKDB,將結(jié)果記錄到表中。


以下為理論依據(jù):


SQL Server數(shù)據(jù)庫可以檢測出頁損壞,此時,具體的表現(xiàn)形式可能為下述三種錯誤的一種:

  • 823錯誤,也就是所謂的硬IO錯誤,可以理解為SQL Server希望讀取頁,而Windows告訴SQL Server,無法讀取到該頁。

  • 824錯誤,也就是所謂的軟IO錯誤,可以理解為SQL Server已經(jīng)讀取到該頁,但通過計算CheckSum等值發(fā)現(xiàn)不匹配,因此SQL Server認為該頁已經(jīng)被損壞。

  • 825錯誤,也就是所謂Retry錯誤。


SQL Server發(fā)現(xiàn)錯誤的方法有兩種,分別為在讀取頁時和在備份時(本質(zhì)上也是讀取頁)。但如果我們希望對于數(shù)據(jù)一致性的檢查更加的全面,那我們應該定期使用CheckDB來檢查數(shù)據(jù)的一致性,而不至于在生產(chǎn)時間數(shù)據(jù)被讀取時才能發(fā)現(xiàn)錯誤。


CheckDB命令在企業(yè)版中會使用多線程來進行,會對整個數(shù)據(jù)庫進行一致性檢查,在該過程中,使用了內(nèi)建數(shù)據(jù)庫快照的方式進行,因此不會造成阻塞,但CheckDB會消耗大量的CPU、內(nèi)存和IO。因此CheckDB要選擇在維護窗口時間或是系統(tǒng)閑時進行。


實際上,CheckDB是一套命令的匯總,通過執(zhí)行下列操作檢查指定數(shù)據(jù)庫中所有對象的邏輯和物理完整性:

  • 初次檢查系統(tǒng)表

  • 分配單元檢查(DBCC CHECKALLOC

  • 完整檢查系統(tǒng)表

  • 對所有表進行一致性邏輯檢查(DBCC CHECKTABLE

  • 元數(shù)據(jù)檢查(DBCC CHECKCATALOG

  • SSB檢查

  • 索引視圖、XML索引等檢查


微軟最佳實踐建議


“建議您使用 PHYSICAL_ONLY 選項,以便可以頻繁檢查生產(chǎn)系統(tǒng)。 使用 PHYSICAL_ONLY 可以極大地縮短對大型數(shù)據(jù)庫運行 DBCC CHECKDB 的運行時間。 同時建議您定期運行沒有選項的 DBCC CHECKDB。 應當以什么頻率執(zhí)行這些運行任務(wù)將取決于各個企業(yè)及其生產(chǎn)環(huán)境。

”引用自:

https://docs.microsoft.com/zh-cn/sql/t-sql/database-console-commands/dbcc-checkdb-transact-sql


成熟的方案


可以使用 https://ola.hallengren.com/

實現(xiàn)備份、完整性檢查、索引和統(tǒng)計信息維護整套方案。


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI