【數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)】ndf文件損壞的SQL SERVER數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)案例

數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)環(huán)境:
某公司存儲(chǔ)上部署SQL SERVER數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)中有1000多個(gè)文件,該SQL SERVER數(shù)據(jù)庫(kù)每10天生成一個(gè)NDF文件,數(shù)據(jù)庫(kù)包含兩個(gè)LDF文件。

數(shù)據(jù)庫(kù)故障&分析:
存儲(chǔ)設(shè)備出現(xiàn)故障導(dǎo)致SQL SERVER數(shù)據(jù)庫(kù)異常,經(jīng)過(guò)檢測(cè)發(fā)現(xiàn)有幾個(gè)ndf文件大小變?yōu)?KB。
雖然存儲(chǔ)故障導(dǎo)致NDF文件大小變?yōu)?KB,但是數(shù)據(jù)恢復(fù)工程師推測(cè)NDF文件還存在于磁盤(pán)中。可以通過(guò)編寫(xiě)數(shù)據(jù)庫(kù)掃描碎片程序掃描數(shù)據(jù)庫(kù)碎片,通過(guò)碎片拼接來(lái)恢復(fù)NDF文件,最后修復(fù)數(shù)據(jù)庫(kù)。

數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)過(guò)程:
1、將故障存儲(chǔ)中所有磁盤(pán)以只讀方式進(jìn)行全盤(pán)備份,后續(xù)的數(shù)據(jù)分析和數(shù)據(jù)恢復(fù)操作都基于鏡像文件進(jìn)行,避免數(shù)據(jù)恢復(fù)過(guò)程中可能對(duì)原始數(shù)據(jù)造成的二次破壞。
2、由北亞企安數(shù)據(jù)恢復(fù)工程師編寫(xiě)數(shù)據(jù)庫(kù)碎片掃描程序掃描數(shù)據(jù)庫(kù)碎片。
3、根據(jù)NDF文件的頁(yè)面特征,按照文件號(hào),頁(yè)號(hào)拼接掃描出來(lái)的數(shù)據(jù)庫(kù)碎片,重組生成出這些0kb的NDF文件。
4、使用北亞企安自主開(kāi)發(fā)的MSSQL文件檢測(cè)工具對(duì)所有數(shù)據(jù)文件進(jìn)行檢測(cè),結(jié)果發(fā)現(xiàn)拼接出的4個(gè)NDF文件有少量的空數(shù)據(jù)頁(yè),其他文件正常。
5、進(jìn)一步分析存儲(chǔ)中損壞的lun,發(fā)現(xiàn)這些空數(shù)據(jù)頁(yè)在存儲(chǔ)層面已經(jīng)完全損壞,無(wú)法恢復(fù),即這4個(gè)NDF文件不能完全恢復(fù)。
6、嘗試附加數(shù)據(jù)庫(kù),報(bào)錯(cuò) “處理數(shù)據(jù)庫(kù)的日志時(shí)出錯(cuò),如果可能請(qǐng)從備份還原。如果沒(méi)有可用的備份,可能需要重新生成日志”。
7、修改系統(tǒng)表,從系統(tǒng)表剔除掉最后添加的LDF文件,計(jì)算并修改校驗(yàn)。嘗試進(jìn)行無(wú)日志附加數(shù)據(jù)庫(kù),報(bào)錯(cuò):“數(shù)據(jù)庫(kù)存在一致性錯(cuò)誤”。
8、修改系統(tǒng)表中這4個(gè)損壞的NDF文件的塊數(shù)量,使數(shù)據(jù)庫(kù)中記錄的文件的塊數(shù)量和拼接出來(lái)的NDF的塊數(shù)量一致,計(jì)算并修改校驗(yàn)值。無(wú)日志附加數(shù)據(jù)庫(kù),仍然報(bào)錯(cuò)“數(shù)據(jù)庫(kù)存在一致性錯(cuò)誤”。
9、由于空數(shù)據(jù)頁(yè)都出現(xiàn)在這4個(gè)NDF文件后面的十幾個(gè)塊中,截?cái)辔募?duì)數(shù)據(jù)完整性影響不大。重新修改系統(tǒng)表和NDF文件,將數(shù)據(jù)庫(kù)中記錄NDF塊數(shù)量的值改至報(bào)錯(cuò)的前一頁(yè),計(jì)算并修改校驗(yàn)。重新進(jìn)行無(wú)日志附加數(shù)據(jù)庫(kù),報(bào)錯(cuò)“由于數(shù)據(jù)庫(kù)沒(méi)有完全關(guān)閉,無(wú)法重新生成日志”。
10、修改MDF文件中的數(shù)據(jù)庫(kù)的狀態(tài)值,讓數(shù)據(jù)庫(kù)認(rèn)為是完全關(guān)閉的。重新附加數(shù)據(jù)庫(kù),附加成功。

數(shù)據(jù)庫(kù)數(shù)據(jù)驗(yàn)證:
數(shù)據(jù)庫(kù)文件成功附加后,用戶通過(guò)數(shù)據(jù)庫(kù)中的對(duì)象進(jìn)行初步查詢、驗(yàn)證,經(jīng)過(guò)反復(fù)驗(yàn)證后確認(rèn)表中信息正確,數(shù)據(jù)完整可用。本次數(shù)據(jù)恢復(fù)工作完成。