DBCC CHECKDB 修復選項是否確保完全恢復?

概括:正如我們所知,SQL Server 數據庫容易受到損壞,並且根據工作要求,如果持續存在,每個管理員都有針對每個場景的恢復計劃。在這種情況下,管理員默認信任他們使數據庫無損壞的技能,因此在本文中,我們將檢查 DBCC CHECKDB 修復選項是否確保完全恢復。此外,我們將討論修復 SQL 數據庫損壞錯誤的 DBCC CHECKDB 替代解決方案。

大多數情況下,您將面臨數據庫損壞並且需要修復它,因為您沒有能夠在不丟失數據的情況下恢復所需的備份。除非您的服務水平協議規定停機時間比數據丟失更重要,否則您不太可能選擇維修作為首選。

現在,當您使用修復或手動修復損壞時必須非常小心,因為它可能涉及數據丟失,並且您不想讓事情變得更糟。這意味著你要練習,使用修復來確保你知道它會做什麼,或者在你手動修復損壞之前一定要練習。然後,在本文中,我們將介紹修復的工作原理以及有關修復、REPAIR_ALLOW_DATA_LOSS 的不同方面的所有內容,以及當我們說修復損壞的數據庫時探索更多的可能性。

DBCC CHECKDB 修復選項如何工作?

  • 維修的目的是什麼?
    • 修復的目的不是嘗試保存所有數據。這並不意味著它會不遺餘力地刪除數據,它只是不會在面對損壞時不遺餘力地嘗試保存數據。
    • 修復的目的是使數據庫在結構上保持一致,以便存儲引擎可以處理數據庫而不會遇到損壞。它試圖盡可能快地執行此操作,這就是為什麼 REPAIR_ALLOW_DATA_LOSS 中的修復選項試圖使數據庫保持一致並刪除一些數據,即使它刪除了那些必須修復的數據。
  • 它怎麼知道要修理什麼?
    • 那麼在運行 DBCC CHECKDB 的每個階段,它都有一個剛剛發現的損壞列表,它會處理這些損壞。
  • 它如何選擇首先修復什麼?
    • 好吧,每個損壞都有一個關於修復的侵入程度的排名,它首先處理最具侵入性的修復,因為在處理這些侵入性修復中的大部分時間意味著其他一些更小的問題可以被劃掉列表。
  • 它能修復一切嗎?
    • 好吧,檢查輸出。在輸出的底部,它將發現很多錯誤並修復了很多錯誤。如果這兩個數字匹配,那麼它認為它修復了所有問題,但要小心,因為有時一個損壞會掩蓋其他損壞。
    • 損壞可能會阻止 CHECKDB 查看數據庫的某個部分並修復該損壞。下一次運行 CHECKDB 時,它可能意味著它能夠查看數據庫的另一部分,在該部分中它發現了它在第一次遇到時無法找到和修復的其他損壞。
  • 為什麼不能在網上完成?
    • 好吧,老實說,僅僅因為修復工作的性質和對數據庫進行的物理更改,實際上不可能在嘗試修復損壞的同時在線處理數據更改通過這些修復選項。

    維修選項

    因此,如果您想知道使用哪個修復選項,您可以運行 DBCC CHECKDB,它會告訴您需要哪些修復選項,以下是各種修復選項:

  • REPAIR_FAST
    • 什麼都不做,並且出於向後兼容的目的而存在
  • 修復_重建
    • 執行不會導致數據丟失的修復
    • 例如。重建損壞的非聚集索引
      • 通常最好手動重建索引
  • REPAIR_ALLOW_DATA_LOSS
    • 執行可能導致數據丟失的修復
  • 當心 REPAIR_ALLOW_DATA_LOSS

    這個選項是故意命名的,之所以這樣命名,是因為它通常解決任何問題的方式是取消分配損壞的內容並修復所有鏈接,無論是從損壞的東西還是到損壞的東西。這樣做的原因是,這是影響維修的最快且最有可能在 100% 的情況下正確的方式。

  • 它不考慮:
    • 外鍵約束
    • 固有的業務邏輯和數據關係
    • 複製
  • 在運行修復之前,保護自己(進行備份並檢查所涉及的複制拓撲)
  • 運行修復後,檢查數據
    • 再次運行 DBCC CHECKDB 以確保修復所有損壞
    • 如有必要,運行 DBCC CHECKCONSTRAINTS
    • 重新初始化任何涉及的複制拓撲
  • 可修復和不可重複的錯誤

    • 修復的例子和它修復了什麼?
      • 缺少的非聚集索引行
        • 只需插入缺失的記錄
      • 損壞的數據記錄
        • 也許刪除記錄,也許刪除整個頁面
      • 分配給多個對象的範圍
        • 在一定程度上對頁面進行更深入的檢查
    • 記住有一些不可修復的錯誤
      • 系統表聚集索引數據頁
      • PFS 頁面
      • 數據純度錯誤

    裝修的誤區

    • 修復不會導致數據丟失(視情況而定)
    • 修復應作為默認運行(否)
    • 您可以在不運行 DBCC CHECKDB 的情況下運行修復(否)
    • 運行修復後,正常繼續(否)
    • 維修總能解決一切(否)
    • 修復系統數據庫是安全的(否)
    • 您可以在線進行維修(否)
    • REPAIR_REBUILD 將修復一切(否)
    • 修復修復約束(否)
    • 修復傳播到復制訂閱者(否)

    試用 MS SQL 軟件的 Stellar Repair

    此 SQL 數據庫修復軟件是所有 SQL 數據庫損壞錯誤的無憂解決方案,可用於修復損壞的 MDF 和 NDF 文件。該軟件可確保恢復所有數據庫對象,因此不會丟失數據。因此,我鼓勵您開始下載 Stellar Repair for MS SQL 軟件的試用版,為您可能面臨的最危急情況做好準備並獲得最佳效果解決您的腐敗問題。

    結論:

    正如我之前提到的,幾乎每個 DBA 都會在他們職業生涯的某個階段看到腐敗,他們依靠 DBCC CHECKDB 修復選項或受信任的第三方工具來處理它,因此從今以後了解您擁有哪些類型的解決方案非常有用它可以做什麼取決於場景的關鍵性。我希望這篇文章對您有所幫助。

    查看 Microsoft MVP 和 DBA 的建議

    留下评论