sql数据库丢失恢复 SQL数据库损坏修复

sql数据库丢失恢复 SQL数据库损坏修复

一 认识SQL数据库文件组成

SQL数据库物理文件一般是 MDF主数据库文件,NDF文件次文件,LDF日志文件。

MDF文件和NDF文件主要用来存储表数据,MDF存储了系统表和用户表,NDF文件存储了部分表的部分数据或者某个表的全部数据,具体可以做映射.LDF存储了数据库及用户所有的操作。数据库共有三种模式.其中简单模式 是不会完整记录所有的误操作.比如删除了表的数据.

二 数据库物理文件丢失,0KB大小。或者本来1GB数据库压缩后只有几十K的问题。

数据库MDF文件为什么会丢失?主要是由于磁盘坏道导致分区有问题或者断电 非法关机等造成的。1gb大小的MDF文件压缩到几十K主要是因为文件很多字节变0了。

   那么丢失后怎样恢复?我们知道SQL数据库是物理上是由页面组成 每个页面16扇区(每个扇区512字节)合起来就是每个页面8192字节,这其中0-95字节为页头,96字节开始为数据记录开始,从8192字节往前数 每两个字节表示一个记录在本页内的开始地址。 由于SQL数据库经常给会读写 造成文件会扩展一定的空间,这样的话 这个文件就会在分区形成多个片段,每个片段的大小不固定, 我们知道微软的文件系统是根据簇组成,每个簇的大小是512或者幂倍数据。一般我们的分区格式化的时候簇大小是8192字节 这样的话 就跟我们的SQL数据库页面形成了一致。

   我们一旦误删除数据库文件,或者格式化分区,就会导致文件簇链丢失,或者链不完整,那么你用数据恢复软件恢复出来的文件一般要么一部分对一部分全是垃圾数据,要么就是整个文件都是垃圾数据,除非文件很小 且没有大量插入过数据。极小的可能性恢复出来是好的。

 要想自己恢复 就要恢复编程 根据 SQL页面 0字节 1字节 36和37字节 28 29 30 31 四个字节做参照标识,每个页面65-95字节全0 ;从磁盘搜索页面,然后根据32 33 34 35 这里的页ID号 来排序页面./  找出所有页面后 剩下的问题 就是怎么样区别那些页面是一个文件的,这个可以根据 页链 和IAM 对象索引 IMA页面或者PFS页面 ,方法很多需要自己研究。

通过开发这种按照结构从磁盘恢复的软件,只要文件没有覆盖,一般匹配出来的MDF文件都是可以直接附加的,很少有错误的。 另外关于数据库覆盖 这个事情,并不是覆盖了就没戏,覆盖了多少 要在扇区底层分析,才能知道,所以就算是被覆盖了数据库 恢复还是有希望的。可以从丢失的日志文件提取记录,所以数据库的模式是完整模式至关重要!

posted on 2013-09-29 14:39  极佳数据库  阅读(1027)  评论(0)  编辑  收藏
上一篇:T-SQL脚本附加数据库


下一篇:navcat导入mdf文件教程