利用備份檔搭配Restore Page的方式來修復有損毀的資料庫

在這一篇 DBCC CHECKDB搭配REPAIR_ALLOW_DATA_LOSS修復資料庫的資料遺失風險 中我們有提到資料庫損壞時盡量不要用DBCC CHECKDB的方式修復資料庫,這一篇我們就來介紹如何使用備份檔並搭配Restore Page修復已損毀的資料庫。

 

頁面還原可分為離線及線上兩種模式,離線頁面還原就是將資料庫狀態轉為Recovery模式後(此時該DB無法被存取)再還原頁面。而線上頁面還原則只會鎖住要還原的頁面,其他的資料庫物件都還是可以被存取。但由於線上頁面還原只有Enterprise版本支援,因此我們下面的LAB就使用離線方式來做。

如下圖所示,資料庫DB1的頁面(1:120)有問題,導致DBCC CHECKDB發生錯誤

 

首先我們要先對有問題的資料庫做結尾備份,注意要使用With NoRecovery來讓資料庫處於還原狀態。

 

如下圖所示,DB1資料庫已處於還原狀態。

 

此時我們先用最近的完整備份的檔案來做Restore Page的資料還原,如下圖中我們指定要還原的Page就是1:120。這裡要注意一下,我們一樣是用With NoRecovery讓資料庫繼續處於還原狀態。

 

接下來我們再將後續的交易紀錄還原至DB1,並在完成所有交易紀錄還原後With Recovery讓資料庫上線。

 

完成還原後我們再一次用DBCC CHECKDB檢查資料庫DB1,我們從下圖看見資料庫錯誤已被修復。

限制事項

  • SQL Server頁面還原適用於使用完整或大量記錄復原模式的 資料庫。分頁還原只支援讀取/寫入檔案群組。

  • 只能還原資料庫頁面。您無法使用分頁還原來還原下列項目:

    • 交易記錄

    • 配置頁面:全域配置對應 (Global Allocation Map,GAM) 頁面、共用全域配置對應 (Shared Global Allocation Map,SGAM) 頁面,以及頁面可用空間 (Page Free Space,PFS) 頁面。

    • 所有資料檔案的頁面 0 (檔案啟動頁面)

    • 頁面 1:9 (資料庫啟動頁面)

    • 全文檢索目錄

  • 對於使用大量記錄復原模式的資料庫,分頁還原具有下列其他條件:

    • 對於大量記錄資料而言,在檔案群組或分頁資料離線時進行備份會有問題,因為離線的資料並未記錄在記錄中。任何離線頁面都可以阻止備份記錄。在此情況下,請考慮使用 DBCC REPAIR,因為這可能會讓資料損失比還原最近備份還少。

    • 除非指定 WITH CONTINUE_AFTER_ERROR,否則大量記錄資料庫的記錄備份遇到損壞的分頁時會失敗。

    • 一般來說,分頁還原不適合用於大量記錄復原。

      執行分頁還原的最佳作法是將資料庫設定為完整復原模式,並嘗試記錄備份。如果記錄備份有效,您就可以進行分頁還原。如果記錄備份失敗,您會失去自從前次記錄備份之後的工作,或必須試著執行 DBCC,且必須搭配 REPAIR_ALLOW_DATA_LOSS 選項來執行。

 

 

我是ROCK

rockchang@mails.fju.edu.tw