4.2扫描镜像文件
用winhex打开残留文件,仔细分析硬盘底层数据,发现硬盘底层中还残留着许多以前SQL server的日志和备份文件。经过细心察看和分析,发现日志中有数据库很多包括插入语句的操作记录,这些记录可以考虑提取出来。还有备份文件,打开备份文件可以发现有建表语句,还有一部分旧数据。
但由于整个硬盘太大,人工去搜索SQL server相关数据部分会很慢,因此编写一个提取数据库相关数据的小程序,对整个硬盘中所有存在的数据库残留做扫描,提取所有数据。
4.3分析扫描数据
对扫描到的所有日志文件进行分析,发现日志文件中也分数据页,有着固定的开头和结尾,其中每条数据都在固定的位置有自己的object ID号,在接下来的扫描文件中,继续搜寻有同样的object Id的数据记录,发现结构相同,可以确定这是完好的数据,可以提取。
再对扫描到的备份文件进行分析,发现可以从中提取出很多建表语句,可以得到一部分表结构。剩余的表结构,由于截断为0的部分刚好在系统表,没有办法提取表结构,只能从日志中提取的数据来猜测表结构和数据类型。
4.4提取数据
根据之前分析的结论,先编写程序从备份文件中提取建表语句,根据建表语句分析出表结构与各种数据类型,同时在残留的系统表中寻找22H、07H、05H表,根据这些建立表与OBJECT_ID的对应关系。然后编写新的程序对日志中的记录进行提取(我是在这一步无法把numeric类型的字节码解析成数据,所以卡住了),根据object ID来对数据和表进行对应,并插入到新表中。
4.5验证所有数据
经验证,数据恢复出来的新表与人工观察到的数据基本一致。
数据恢复成功。
原文地址:http://blog.51cto.com/sun510/2110734