0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【数据库数据恢复】SQL Server数据库无法读取的数据恢复案例

Frombyte 来源:Frombyte 作者:Frombyte 2023-06-20 14:50 次阅读

数据库故障&分析:

SQL server数据库数据无法读取。

经过初检,发现SQL server数据库文件无法被读取的原因是因为底层File Record被截断为0,无法找到文件开头,数据表结构损坏。镜像文件的前面几十M空间和中间一部分空间被覆盖掉,系统表损坏,无法读取。考虑用自动备份文件来提取表结构。

日志中的操作记录:

pYYBAGSRTBOAJcT3AATg2PM85Ok126.png

北亚企安数据恢复——SQL Server数据恢复

由于系统表损坏,有大量数据表的结构无法确定,只能依靠数据恢复工程师的技术和经验尝试进行恢复。

经过初检的结果,北亚企安数据恢复工程师团队最终敲定数据恢复方案:

1、备份数据。

2、基于备份文件分析旧SQL server数据库底层数据。

3、从旧SQL server数据库中寻找数据表的结构。

4、从日志中提取一部分数据表的结构。

5、从日志和残留数据中提取完好的数据。

6、根据日志恢复对应的数据,检查数据是否正确。

7、数据核对没有问题后恢复出所有数据。

数据库数据恢复过程:

1、将涉及到的所有硬盘交由硬件工程师进行物理故障检测,经过检测没有发现有硬盘存在物理故障。将每块硬盘以只读方式做全盘镜像,后续的数据分析和数据恢复工作都基于镜像文件进行,避免对原始磁盘数据造成二次破坏。

对硬盘做镜像:

poYBAGSRTCSAE2z7AAMTkHxOwKw503.png

北亚企安数据恢复——SQL Server数据恢复

2、基于镜像文件分析硬盘底层数据,发现底层残留许多以前SQL server数据库的日志和备份文件。经过查看分析,发现日志中有很多包括插入语句的操作记录。在备份文件中发现建表语句和一部分旧数据。

3、北亚企安数据恢复工程师编写提取SQL server数据库相关数据的小程序,扫描硬盘中所有存在的SQL server数据库残留数据并进行提取。

4、分析扫描到的所有日志文件,发现日志文件中的数据记录都有固定的开头和结尾,每条数据在固定的位置都有object ID号。在接下来的扫描中,继续寻找有同样object Id的数据记录,发现这些数据记录结构相同,由此可以判断这是完好的数据,可以提取。

5、分析扫描到的备份文件,发现可以通过提取其中的建表语句来得到一部分的表结构。对于剩余的表结构,因为截断为0的部分刚好在系统表,所以没有办法提取,只能根据从日志中提取出来的数据猜测表结构和数据类型。

6、根据前面分析的结果,北亚企安数据恢复工程师编写程序从备份文件中提取建表语句,根据建表语句分析表结构与各种数据的类型。在残留的系统表中寻找22H、07H、05H表,根据这些建立表与OBJECT_ID的对应关系。

7、北亚企安数据恢复工程师编写程序提取日志中的记录,根据object ID来对应数据和表,并将数据插入到新表中。

8、完成上述的所有操作后对数据进行验证,经过验证确认恢复出来的新表与用工具观察到的数据基本一致。本次数据恢复工作完成。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Server
    +关注

    关注

    0

    文章

    90

    浏览量

    24007
  • 数据恢复
    +关注

    关注

    10

    文章

    555

    浏览量

    17408
  • 数据库
    +关注

    关注

    7

    文章

    3770

    浏览量

    64301
收藏 人收藏

    评论

    相关推荐

    Sybase数据恢复—Sybase数据库无法启动怎么恢复数据

    数据库数据恢复工程师经过检测,发现Sybase数据库出现故障的原因是:异常断电造成Sybase数据库无法
    的头像 发表于 11-30 16:45 69次阅读
    Sybase<b class='flag-5'>数据</b><b class='flag-5'>恢复</b>—Sybase<b class='flag-5'>数据库</b><b class='flag-5'>无法</b>启动怎么<b class='flag-5'>恢复数据</b>?

    数据库数据恢复—通过拼接数据库碎片恢复SQLserver数据库

    试图恢复数据库,发现有数个ndf文件大小变为0KB。 虽然NDF文件大小变为0KB,但是NDF文件在磁盘上还可能存在。可以尝试通过扫描&拼接数据库碎片来恢复NDF文件,然后修复数据库
    的头像 发表于 10-31 13:21 155次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b><b class='flag-5'>恢复</b>—通过拼接<b class='flag-5'>数据库</b>碎片<b class='flag-5'>恢复</b>SQLserver<b class='flag-5'>数据库</b>

    数据库数据恢复—Oracle ASM实例无法挂载的数据恢复案例

    方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组
    的头像 发表于 10-28 11:26 137次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b><b class='flag-5'>恢复</b>—Oracle ASM实例<b class='flag-5'>无法</b>挂载的<b class='flag-5'>数据</b><b class='flag-5'>恢复</b>案例

    Oracle数据恢复—异常断电后Oracle数据库报错的数据恢复案例

    Oracle数据库故障: 机房异常断电后,Oracle数据库报错:“system01.dbf需要更多的恢复来保持一致性,数据库
    的头像 发表于 09-30 13:31 262次阅读
    Oracle<b class='flag-5'>数据</b><b class='flag-5'>恢复</b>—异常断电后Oracle<b class='flag-5'>数据库</b>启<b class='flag-5'>库</b>报错的<b class='flag-5'>数据</b><b class='flag-5'>恢复</b>案例

    数据库数据恢复—Oracle数据库文件system01.dbf损坏的数据恢复案例

    打开oracle数据库报错“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。
    的头像 发表于 09-21 14:25 272次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b><b class='flag-5'>恢复</b>—Oracle<b class='flag-5'>数据库</b>文件system01.dbf损坏的<b class='flag-5'>数据</b><b class='flag-5'>恢复</b>案例

    数据库数据恢复SQL Server数据库出现823错误的数据恢复案例

    SQL Server数据库故障: SQL Server附加数据库出现错误823,附加
    的头像 发表于 09-20 11:46 300次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b><b class='flag-5'>恢复</b>—<b class='flag-5'>SQL</b> <b class='flag-5'>Server</b><b class='flag-5'>数据库</b>出现823错误的<b class='flag-5'>数据</b><b class='flag-5'>恢复</b>案例

    数据库数据恢复—SqlServer数据库底层File Record被截断为0的数据恢复案例

    SQL Server数据库数据无法读取。 经过数据库
    的头像 发表于 07-26 11:27 355次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b><b class='flag-5'>恢复</b>—SqlServer<b class='flag-5'>数据库</b>底层File Record被截断为0的<b class='flag-5'>数据</b><b class='flag-5'>恢复</b>案例

    数据库数据恢复SQL Server数据库所在分区空间不足报错的数据恢复案例

    Server数据库故障: 存放SQL Server数据库的D盘分区容量不足,管理员在E盘中生成了一个.ndf的文件并且将
    的头像 发表于 07-10 13:54 459次阅读

    数据库数据恢复数据库所在分区空间不足导致sqlserver故障的数据恢复案例

    数据。服务器上部署sql server数据库数据库存放在C盘。 数据库故障: 工作人员
    的头像 发表于 05-22 13:16 401次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b><b class='flag-5'>恢复</b>—<b class='flag-5'>数据库</b>所在分区空间不足导致sqlserver故障的<b class='flag-5'>数据</b><b class='flag-5'>恢复</b>案例

    数据库数据恢复—raid5阵列上层Sql Server数据库数据恢复案例

    数据库数据恢复环境: 5块硬盘组建一组RAID5阵列,划分LUN供windows系统服务器使用。windows系统服务器内运行了Sql Serve
    的头像 发表于 05-08 11:43 486次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b><b class='flag-5'>恢复</b>—raid5阵列上层<b class='flag-5'>Sql</b> <b class='flag-5'>Server</b><b class='flag-5'>数据库</b><b class='flag-5'>数据</b><b class='flag-5'>恢复</b>案例

    数据库数据恢复—ndf文件大小变为0KB的数据恢复案例

    存储设备损坏导致存储中SQL Server数据库崩溃。对数据库文件进行恢复后,用户发现有4个ndf文件的大小变为0KB。该
    的头像 发表于 05-07 11:19 403次阅读

    MongoDB数据恢复—MongoDB数据库文件损坏的数据恢复案例

    服务器数据恢复环境: 一台Windows Server操作系统服务器,服务器上部署MongoDB数据库。 MongoDB数据库故障&
    的头像 发表于 04-23 14:48 386次阅读
    MongoDB<b class='flag-5'>数据</b><b class='flag-5'>恢复</b>—MongoDB<b class='flag-5'>数据库</b>文件损坏的<b class='flag-5'>数据</b><b class='flag-5'>恢复</b>案例

    数据库数据恢复Sql Server数据库文件丢失的数据恢复案例

    服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据
    的头像 发表于 04-11 15:38 849次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b><b class='flag-5'>恢复</b>—<b class='flag-5'>Sql</b> <b class='flag-5'>Server</b><b class='flag-5'>数据库</b>文件丢失的<b class='flag-5'>数据</b><b class='flag-5'>恢复</b>案例

    数据库数据恢复】Oracle数据库ASM实例无法挂载的数据恢复案例

    oracle数据库ASM磁盘组掉线,ASM实例不能挂载。数据库管理员尝试修复数据库,但是没有成功。
    的头像 发表于 02-01 17:39 496次阅读
    【<b class='flag-5'>数据库</b><b class='flag-5'>数据</b><b class='flag-5'>恢复</b>】Oracle<b class='flag-5'>数据库</b>ASM实例<b class='flag-5'>无法</b>挂载的<b class='flag-5'>数据</b><b class='flag-5'>恢复</b>案例

    数据库数据恢复—未开启binlog的Mysql数据库数据恢复案例

    mysql数据库数据恢复环境: 本地服务器,windows server操作系统 ,部署有mysql单实例,数据库引擎类型为innodb,
    的头像 发表于 12-08 14:18 1109次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b><b class='flag-5'>恢复</b>—未开启binlog的Mysql<b class='flag-5'>数据库</b><b class='flag-5'>数据</b><b class='flag-5'>恢复</b>案例