【數(shù)據(jù)庫數(shù)據(jù)恢復(fù)】SQL SERVER數(shù)據(jù)庫數(shù)據(jù)恢復(fù)案例

數(shù)據(jù)庫數(shù)據(jù)恢復(fù)環(huán)境:
某品牌存儲存放大小約80TB的SQL SERVER數(shù)據(jù)庫,數(shù)據(jù)庫包含兩個LDF文件,每10天生成一個500GB大小的NDF文件。
數(shù)據(jù)庫故障&分析:
存儲損壞,SQL SERVER數(shù)據(jù)庫不可用。對數(shù)據(jù)庫文件進行恢復(fù)后發(fā)現(xiàn)有幾個NDF文件大小變?yōu)?KB。
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)過程:
1、對故障存儲所有硬盤做鏡像備份,基于鏡像文件掃描數(shù)據(jù)庫碎片。
2、北亞數(shù)據(jù)恢復(fù)工程師根據(jù)NDF文件的頁面特征,按照文件號、頁號拼接碎片,重組生成這些0kb的NDF文件。
3、檢測數(shù)據(jù)庫文件。使用北亞自主研發(fā)的MSSQL文件檢測工具對所有數(shù)據(jù)文件進行檢測,結(jié)果發(fā)現(xiàn)除了拼接出的NDF文件有少量的空頁之外,其他的文件都是正常的。
4、數(shù)據(jù)恢復(fù)工程師分析損壞lun后發(fā)現(xiàn)這些數(shù)據(jù)頁在存儲層面已經(jīng)不存在了。如果不能恢復(fù)這些數(shù)據(jù)頁,這幾個拼接出來的NDF文件就不能完全恢復(fù)。
5、嘗試附加數(shù)據(jù)庫,報錯 “處理數(shù)據(jù)庫的日志時出錯,如果可能請從備份還原。如果沒有可用的備份,可能需要重新生成日志”。
6、修改系統(tǒng)表,從系統(tǒng)表剔除掉最后添加的LDF文件,計算并修改校驗。進行無日志附加數(shù)據(jù)庫。報錯:“數(shù)據(jù)庫存在一致性錯誤?!?/p>

7、修改系統(tǒng)表,將系統(tǒng)表記錄這幾個NDF文件的塊數(shù)量的值改為和掃描拼接出來的NDF文件的塊數(shù)量一致,同時更改這幾個NDF文件首頁,使得數(shù)據(jù)庫中記錄的文件的塊數(shù)量和拼接出來的NDF的塊數(shù)量一致,計算并修改校驗值。
8、無日志附加數(shù)據(jù)庫,報錯數(shù)據(jù)庫存在一致性錯誤。

9、逐個修改系統(tǒng)表中這幾個損壞的NDF文件的塊數(shù)量,使其值等于報錯塊前一頁。分析報錯,由于空頁都出現(xiàn)在這幾個NDF文件后面的十幾個塊中,截斷文件對數(shù)據(jù)完整性影響不大。重新修改系統(tǒng)表和NDF文件,將數(shù)據(jù)庫中記錄NDF塊數(shù)量的值改至報錯的前一頁,計算并修改校驗。
10、重新進行無日志附加數(shù)據(jù)庫,報錯“由于數(shù)據(jù)庫沒有完全關(guān)閉,無法重新生成日志”。

11、修改NDF文件中的數(shù)據(jù)庫的狀態(tài)值,讓數(shù)據(jù)庫認為是完全關(guān)閉的。重新附加數(shù)據(jù)庫成功。

數(shù)據(jù)庫恢復(fù)數(shù)據(jù)驗證:
數(shù)據(jù)庫文件成功附加后,用戶通過數(shù)據(jù)庫中的對象進行查詢、驗證,表中信息完整,確認恢復(fù)出來的數(shù)據(jù)有效。