一.SqlServer數據庫損壞的原因
客戶的一塊容量為1.2TB的硬盤,里面存儲的是SqlServer數據庫,客戶描述說硬盤由于誤操作導致分區損壞,需要對硬盤里的數據庫進行數據恢復。
二.硬盤故障初檢
經過工程師對客戶硬盤的初步檢測,確認了客戶的SqlServer數據庫基礎信息如下:
客戶環境:windows操作系統
磁盤容量:1.2T硬盤
文件系統類型:NTFS
數據庫類型:sqlserver數據庫
數據庫個數:12個
故障情況:分區損壞,數據丟失
三.恢復數據庫數據
1、掃描1T磁盤空間
首先使用自研發的SqlServer數據庫工具對硬盤進行全盤掃描,
根據數據庫的頁結構,掃描磁盤空間,獲取數據庫頁偏移位置,對象id,頁號等信息
2、拼接數據庫
(1)、Sqlserver的每個數據庫頁都是從0號頁開始編號,客戶共12個數據庫,導致有大量重復頁,因此無法直接按頁號從小到大拼接。
(2)、根據客戶提供的數據庫名和數據記錄中guid,來判斷數據庫頁屬于哪個數據庫。
(3)、根據數據庫名字、頁號拼接出數據庫
(4)、由于缺失數據庫頁,拼接的數據庫大小存在差異,需要修改數據庫大小屬性信息,之后進行掛載。
(5)、掛載數據庫、成功掛載
四.數據驗證
數據庫能夠成功掛載后,工程師將客戶的數據庫數據進行了檢查,確認基本恢復完整后,聯系客戶親自對SqlServer數據庫記錄進行完整性驗證。
經過驗證,共12個數據庫基本恢復,數據庫記錄也比較完整,經過評估數據確認100%恢復,本次數據庫數據恢復成功