天天看點

【資料庫資料恢複】ndf檔案大小為0的資料庫資料恢複案例

資料庫資料恢複環境:

某公司存儲上部署SQL SERVER資料庫,資料庫中有1000多個檔案,該SQL SERVER資料庫每10天生成一個NDF檔案,資料庫包含兩個LDF檔案。

【資料庫資料恢複】ndf檔案大小為0的資料庫資料恢複案例

北亞企安資料恢複——SQL SERVER資料恢複

資料庫故障&分析:

儲存設備出現故障導緻SQL SERVER資料庫異常,經過檢測發現有幾個ndf檔案大小變為0KB。

雖然存儲故障導緻NDF檔案大小變為0KB,但是資料恢複工程師推測NDF檔案還存在于磁盤中。可以通過編寫資料庫掃描碎片程式掃描資料庫碎片,通過碎片拼接來恢複NDF檔案,最後修複資料庫。

【資料庫資料恢複】ndf檔案大小為0的資料庫資料恢複案例

北亞企安資料恢複——SQL SERVER資料恢複

資料庫資料恢複過程:

1、将故障存儲中所有磁盤以隻讀方式進行全盤備份,後續的資料分析和資料恢複操作都基于鏡像檔案進行,避免資料恢複過程中可能對原始資料造成的二次破壞。

2、由北亞企安資料恢複工程師編寫資料庫碎片掃描程式掃描資料庫碎片。

3、根據NDF檔案的頁面特征,按照檔案号,頁号拼接掃描出來的資料庫碎片,重組生成出這些0kb的NDF檔案。

4、使用北亞企安自主開發的MSSQL檔案檢測工具對所有資料檔案進行檢測,結果發現拼接出的4個NDF檔案有少量的空資料頁,其他檔案正常。

5、進一步分析存儲中損壞的lun,發現這些空資料頁在存儲層面已經完全損壞,無法恢複,即這4個NDF檔案不能完全恢複。

6、嘗試附加資料庫,報錯 “處理資料庫的日志時出錯,如果可能請從備份還原。如果沒有可用的備份,可能需要重新生成日志”。

7、修改系統表,從系統表剔除掉最後添加的LDF檔案,計算并修改校驗。嘗試進行無日志附加資料庫,報錯:“資料庫存在一緻性錯誤”。

8、修改系統表中這4個損壞的NDF檔案的塊數量,使資料庫中記錄的檔案的塊數量和拼接出來的NDF的塊數量一緻,計算并修改校驗值。無日志附加資料庫,仍然報錯“資料庫存在一緻性錯誤”。

9、由于空資料頁都出現在這4個NDF檔案後面的十幾個塊中,截斷檔案對資料完整性影響不大。重新修改系統表和NDF檔案,将資料庫中記錄NDF塊數量的值改至報錯的前一頁,計算并修改校驗。重新進行無日志附加資料庫,報錯“由于資料庫沒有完全關閉,無法重新生成日志”。

10、修改MDF檔案中的資料庫的狀态值,讓資料庫認為是完全關閉的。重新附加資料庫,附加成功。

【資料庫資料恢複】ndf檔案大小為0的資料庫資料恢複案例

北亞企安資料恢複——SQL SERVER資料恢複

資料庫資料驗證:

資料庫檔案成功附加後,使用者通過資料庫中的對象進行初步查詢、驗證,經過反複驗證後确認表中資訊正确,資料完整可用。本次資料恢複工作完成。

繼續閱讀