1. 程式人生 > >服務器故障導致SqlServer數據庫損壞的恢復過程

服務器故障導致SqlServer數據庫損壞的恢復過程

無法 log 有用 不能 溝通 RoCE 2.3 導入 存儲

故障描述:

5塊2T硬盤組建RAID5,劃分LUN供windows服務器使用。在windows服務器內裝有Sql Server2008數據庫。存儲空間內共有三個邏輯分區,大小分別為500G、800G、2.3T。數據庫文件丟失,主要涉及五個數據庫,表個數約為6000個左右。丟失原因未知,且不能確定數據存儲位置。三個數據庫的大小分別為8G、15G、20G。在文件丟失後服務器仍處於開機狀態,但並未寫入大量數據。
·

初檢流程:

1、使用RAID信息及內部數據塊信息重組RAID。
技術分享圖片
重組RAID
2、提取LUN內三個分區鏡像。
3、掃描文件系統內丟失文件,未找到被刪除數據庫文件。
4、初檢結果為數據庫文件丟失,通過文件系統角度無法恢復。

·

恢復流程:

1、制定恢復方案。在數據庫文件被刪除且判定為無法恢復文件後,只能通過掃描數據頁,並提取頁內記錄的方式進行恢復。
2、編數據頁掃描程序掃描分區內數據頁並提取。在分別掃描兩個分區鏡像後發現500G系統盤內數據頁數量極少且數據頁斷裂情況嚴重,另一分區內掃描到數據頁個數較多。暫定此分區為數據庫文件存儲空間。
技術分享圖片
掃描數據頁
3、重組系統表。Sql Server數據庫使用系統表來管理所有用戶表,在這些系統表內記錄了各表的列數、數據類型及約束信息等。解析系統表過程中發現提取出的數據頁內系統表損壞,無法正常讀取信息。在與客戶溝通後得知有備份文件,且備份完成後沒有大量改動表結構,系統表可用。
4、還原備份。
技術分享圖片
還原備份

5、分別提取三個庫中各表表結構信息
技術分享圖片
提取表結構信息
6、解析表結構腳本。將各表的列信息存入數據庫內便於後續使用。
技術分享圖片
掃描腳本文件
技術分享圖片
表結構信息存入數據庫
7、解析系統表獲取用戶表id信息、關聯表結構與數據頁。(為保護客戶隱私,後續步驟涉及用戶表表名及數據頁內數據部分均未截圖)
8、新建數據庫,使用軟件解析記錄並導入到恢復環境內。
9、整理恢復結果。在此分區內除數據庫文件外還存有備份文件若幹,所以在導出記錄後可能存在重復數據,必須去重。編寫SQL存儲過程進行去重。
技術分享圖片
數據庫去重
10、客戶驗證數據。客戶在查驗過數據後表示數據可以接受,移交數據到客戶存儲設備,恢復成功。

服務器故障導致SqlServer數據庫損壞的恢復過程