实战 SQL Server 2008 数据库误删除数据的恢复
一个客户SQL数据库2008R2版本 其中一个很大的表 里面有15W记录被请delete from table 删除掉了。寻求恢复、。
首先要明白 删除表数据,SQL做了那些操作,
1 SQL重置系统索引表里改变的一些值
2 SQL会将每行标识更改为删除状态,
3 SQL会将页面行计数清零(大部分情况下)
4 SQL会将页面每行偏移地址清除掉
5 SQL会将该表IAM分配页面和PFS页面相关该表占用页记录清除掉。
完成以上,就整个删除数据过程完成。
在数据库日志LDF文件里面会存储每个删除掉的行,。如果是简单模式的日志就不行了。
所以 我们恢复删除的数据 可以从两个地方恢复 一 MDF文件 二 LDF文件
如果你的数据库是完整模式 且有最近老备份 那就可以利用日志恢复,如果没有老备份 可以下载极佳SQL数据库日志恢复工具尝试从日志读取数据.
我们下面主要针对LDF文件是简单模式时,怎样从MDF文件恢复数据
首先拷贝一份数据库,这个很重要,永远不要再原库上处理
我们从MDF文件恢复数据,只需要讲该表占用的数据页面的行偏移地址写回去 然后把每个页面的行总数填写回去 然后使用SQL数据库修复工具就可以读取到数据了。 当然你也可以自己开发个软件根据字段结构从该表页面取数据.
我们自己目前对这两种方法基本不是第一个考虑,我们优先的处理方法 考虑从MDF和日志文件逆向恢复数据。