技术开发 频道

揭秘数据覆盖假象 MSSQL数据库恢复绝招

  数据库碎片页面的概念

  数据库文件在设计的时候都是按照一定的有规律的形式来存放的,数据库文件内部结构相当于一个小型的文件系统,我们了解NTFS文件系统,它有“簇”的概念,就是文件存放分配的最小单元。在数据库文件里头,有Page即“数据页”的概念,就是数据库文件结构按照一页一页存放,每一个页面占用16sec或者32sec或者别的更大点的数,对于MS SQL Server来说,每一页的大小有16sec,每个数据页有自己的页面编号等信息,每个页面有自己的校验方式等等,我们在提取数据库页面的时候,就根据这些规律来的。当把所有数据库页面碎片提取出来以后,怎样把这些页面拼接成一个文件,又是一门数据恢复艺术!

  数据恢复结果

  本案例使用达思D-Recovery For MS SQL Server数据库恢复软件得以恢复,目前是国内少有的基于MS SQL Server数据库恢复软件。首先,它有数据库碎片提取功能,有一定的碎片智能组合功能,如果某条组合线路出现分叉,可以人工查看,确定正确的组合线路,最终能把mdf文件相对完整的拼接出来。

  其次,它可以直接读取mdf文件内容,如果有某些数据页面被覆盖或者被破坏,它可以绕过这些坏页面,把mdf文件中正常的数据记录提取出来,然后进行数据还原。在mdf文件局部损坏的情况下,MS SQL Server环境没有办法修复mdf文件,没办法读取mdf文件中的数据,这时候D-Recovery For MS SQL Server就发挥它强大的数据库内容提取功能!

  揭开数据覆盖假象

  对本案例而言,出现了同名文件覆盖的现象,大多数人都认为是数据被覆盖了!在NTFS文件系统中,同名覆盖,往往意味着原先文件MFT表项和后面覆盖过来的文件的MFT表项是同一个,MFT表项ID号(如果有ID号)不会更改,更改的只是MFT表项内部的数据指针!这样通过任何数据恢复工具扫描,不会找出原始文件MFT内部数据指针,找到的都是新覆盖的文件的MFT表项信息。

  数据区会不会也被新文件覆盖呢?答案是不一定!Windows操作系统在分配新覆盖过来的文件空间的时候,有可能会按照旧文件的指针分配,有可能分配新的数据空间,这就看Windows NTFS 文件系统文件空间分配机制了!如果说,新文件分配新空间,跟原始文件空间不发生重叠,那原始文件内容将不会受影响!

  为什么按照mdf文件类型来恢复,没能找出正确的文件?数据库文件xiangmu01.mdf已经使用了两年多,数据库在创建的时候,数据库文件根据需要分配空间,而不是一开始就分配很大的空间,所以在以后使用过程中,空间分配分散很严重,在硬盘上不可能连续存放!按照类型扫描恢复文件大都基于数据文件连续存放,否则恢复出来的文件只正确包含文件地一段数据信息!

  数据覆盖不是想当然,要经过最底层的分析,才能得出正确的恢复方法。

0
相关文章