碎片拼接恢復(fù)SQL Server數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)案例

數(shù)據(jù)庫數(shù)據(jù)恢復(fù)環(huán)境:
某公司一臺(tái)DELL服務(wù)器,作為WEB服務(wù)器使用,安裝的Windows Server操作系統(tǒng),配置了SQL Server數(shù)據(jù)庫;
采用了Xen Server虛擬化系統(tǒng);
底層是通過raid卡,用4塊STAT硬盤搭建的RAID10。
數(shù)據(jù)庫故障:
服務(wù)器意外斷電導(dǎo)致虛擬機(jī)磁盤丟失,虛擬機(jī)不可用,SQL Server數(shù)據(jù)庫和網(wǎng)站文件丟失。需要恢復(fù)SQL Server數(shù)據(jù)庫。
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)過程:
1、將故障服務(wù)器中所有硬盤以只讀方式進(jìn)行鏡像備份,后續(xù)的數(shù)據(jù)恢復(fù)分析和數(shù)據(jù)恢復(fù)操作都基于鏡像文件進(jìn)行,不會(huì)對原服務(wù)器做任何操作,保證原服務(wù)器初始狀態(tài),避免對原始數(shù)據(jù)造成可能的二次破壞。
2、基于鏡像文件對底層數(shù)據(jù)進(jìn)行分析,發(fā)現(xiàn)故障服務(wù)器中丟失的虛擬機(jī)磁盤都采用了LVM的結(jié)構(gòu)。進(jìn)入到“/etc/lvm/backup/”目錄下查詢看是否有損壞的虛擬磁盤信息,如果有就意味著LVM信息尚有保存;如果沒有就意味著虛擬磁盤信息已經(jīng)被更新,只能通過底層數(shù)據(jù)查找沒有更新的lvm信息。本案例中北亞企安數(shù)據(jù)恢復(fù)工程師從底層數(shù)據(jù)中查詢到了尚未更新的lvm信息,見下圖:

3、找到lvm信息就意味著數(shù)據(jù)還在?;趌vm信息分析&查找虛擬磁盤的分區(qū)數(shù)據(jù),但是數(shù)據(jù)恢復(fù)工程師經(jīng)過分析后竟然發(fā)現(xiàn)虛擬磁盤被破壞了,這種現(xiàn)象非常少見。經(jīng)過進(jìn)一步查找和分析后確認(rèn)該區(qū)域的數(shù)據(jù)確實(shí)被破壞了,只能找到一些數(shù)據(jù)庫頁碎片,可以通過數(shù)據(jù)庫碎片拼接的手段來恢復(fù)數(shù)據(jù),即根據(jù)數(shù)據(jù)庫結(jié)構(gòu),將底層找到的數(shù)據(jù)庫的頁碎片按照原先的順序拼接起來,然后對數(shù)據(jù)庫進(jìn)行修復(fù)和校檢后即可恢復(fù)數(shù)據(jù)庫。
4、試圖通過數(shù)據(jù)庫備份來恢復(fù)數(shù)據(jù)庫。因?yàn)橹皵?shù)據(jù)庫做過一次備份,數(shù)據(jù)庫備份文件和網(wǎng)站代碼被一起壓縮到一個(gè)RAR壓縮包文件中。正常情況下rar壓縮包的第一個(gè)扇區(qū)記錄的是文件名,所以可以根據(jù)文件名反向查找壓縮包的數(shù)據(jù)起始位置,把相應(yīng)的壓縮包底層數(shù)據(jù)提取出來并重命名。但是在實(shí)際的恢復(fù)過程中卻出現(xiàn)了意外,提取出來的壓縮包解壓時(shí)報(bào)錯(cuò),報(bào)錯(cuò)信息見下圖:

5、嘗試使用rar修復(fù)工具(設(shè)置為“忽略錯(cuò)誤”)繼續(xù)解壓數(shù)據(jù),仍然解壓失敗。常規(guī)的數(shù)據(jù)恢復(fù)方法行不通。只能通過數(shù)據(jù)庫碎片拼接來恢復(fù)數(shù)據(jù)庫數(shù)據(jù)。
6、在數(shù)據(jù)庫層面分析數(shù)據(jù)庫開始位置,分析出數(shù)據(jù)庫開始位置后根據(jù)每個(gè)數(shù)據(jù)庫頁的編號和文件號去底層掃描符合這個(gè)數(shù)據(jù)庫頁的所有數(shù)據(jù),最后由北亞企安數(shù)據(jù)恢復(fù)工程師將所有掃描出來的數(shù)據(jù)重組為一個(gè)mdf文件。經(jīng)過校驗(yàn)程序檢測合格后提取數(shù)據(jù)。重組后的mdf文件見下圖:
?

數(shù)據(jù)驗(yàn)證:
經(jīng)過北亞企安數(shù)據(jù)恢復(fù)工程師團(tuán)隊(duì)的不懈努力,最終將服務(wù)器內(nèi)的數(shù)據(jù)全部提取出來并通過初步驗(yàn)證。搭建了數(shù)據(jù)庫環(huán)境,將恢復(fù)出來的數(shù)據(jù)庫數(shù)據(jù)附加上去進(jìn)行查詢,最新數(shù)據(jù)都查詢正常。本次數(shù)據(jù)恢復(fù)完成?;謴?fù)結(jié)果見下圖:
