数据库故障&分析:
SQL server数据库数据无法读取。
经过初检,发现SQL server数据库文件无法被读取的原因是因为底层File Record被截断为0,无法找到文件开头,数据表结构损坏。镜像文件的前面几十M空间和中间一部分空间被覆盖掉,系统表损坏,无法读取。考虑用自动备份文件来提取表结构。
日志中的操作记录:
由于系统表损坏,有大量数据表的结构无法确定,只能依靠数据恢复工程师的技术和经验尝试进行恢复。
经过初检的结果,北亚企安数据恢复工程师团队最终敲定数据恢复方案:
1、备份数据。
2、基于备份文件分析旧SQL server数据库底层数据。
3、从旧SQL server数据库中寻找数据表的结构。
4、从日志中提取一部分数据表的结构。
5、从日志和残留数据中提取完好的数据。
6、根据日志恢复对应的数据,检查数据是否正确。
7、数据核对没有问题后恢复出所有数据。
数据库数据恢复过程:
1、将涉及到的所有硬盘交由硬件工程师进行物理故障检测,经过检测没有发现有硬盘存在物理故障。将每块硬盘以只读方式做全盘镜像,后续的数据分析和数据恢复工作都基于镜像文件进行,避免对原始磁盘数据造成二次破坏。
对硬盘做镜像:
2、基于镜像文件分析硬盘底层数据,发现底层残留许多以前SQL server数据库的日志和备份文件。经过查看分析,发现日志中有很多包括插入语句的操作记录。在备份文件中发现建表语句和一部分旧数据。
3、北亚企安数据恢复工程师编写提取SQL server数据库相关数据的小程序,扫描硬盘中所有存在的SQL server数据库残留数据并进行提取。
4、分析扫描到的所有日志文件,发现日志文件中的数据记录都有固定的开头和结尾,每条数据在固定的位置都有object ID号。在接下来的扫描中,继续寻找有同样object Id的数据记录,发现这些数据记录结构相同,由此可以判断这是完好的数据,可以提取。
5、分析扫描到的备份文件,发现可以通过提取其中的建表语句来得到一部分的表结构。对于剩余的表结构,因为截断为0的部分刚好在系统表,所以没有办法提取,只能根据从日志中提取出来的数据猜测表结构和数据类型。
6、根据前面分析的结果,北亚企安数据恢复工程师编写程序从备份文件中提取建表语句,根据建表语句分析表结构与各种数据的类型。在残留的系统表中寻找22H、07H、05H表,根据这些建立表与OBJECT_ID的对应关系。
7、北亚企安数据恢复工程师编写程序提取日志中的记录,根据object ID来对应数据和表,并将数据插入到新表中。
8、完成上述的所有操作后对数据进行验证,经过验证确认恢复出来的新表与用工具观察到的数据基本一致。本次数据恢复工作完成。