D-Recovery For SQLServer Introduction...

对于Windows下的MS SQL Server数据库,数据库文件几乎都存储在NTFS文件系统分区中,NTFS文件系统通过文件的MFT表项存放文件数据存储位置信息,一个数据库文件在被使用时可以分成若干个段存储在磁盘分区中,通常不是连续存储于分区中。如果数据库文件被删除,它的MFT表项信息被新的文件占用,那么被删除的数据库文件空间分配信息,就无法找到(被删除文件的MFT表项信息没了),常规的数据恢复方法就没办法恢复这个被删除的数据库文件的内容。由于 SQL Server 数据库文件内部存储是按照8K(8192字节)为单位,每8K为一个数据页面,每个页面有相对固定格式的页面头部(96字节),每个页面有唯一的页面编号,页号从0开始编号。基于这些规律,假如一个数据文件分成三段存放在文件系统的不同地方,0-1000页放在位置1上,1001-5000页放在位置2上,5001页-10000页放在位置3上,位置1、2、3可以在分区中是不连续的,我们软件通过扫描整个分区,把这三个位置找到,我就能把3段数据拼接起来成一个数据文件,就能达到恢复的目的,当然实际匹配过程远远比上面这个过程复杂。

值得一提的是,对于固态硬盘、叠瓦技术机械硬盘,NTFS文件系统分区,Windows系统下默认情况下,删除数据库文件,基本不能恢复。