当前位置:网站首页>【数据库数据恢复】SqlServer数据库无法读取的数据恢复案例
【数据库数据恢复】SqlServer数据库无法读取的数据恢复案例
2022-08-03 16:41:00 【51CTO】
SqlServer数据库故障&分析:
SQL server数据库的数据无法被读取。管理员联系我们数据恢复中心进行数据库数据恢复。
数据库数据恢复工程师对故障数据库进行分析,发现SQL Server数据库文件无法被读取的原因是由于底层File Record被截断为0,无法找到文件开头,数据表结构也被损坏。镜像文件前面80M左右的空间和中间一部
分空间被覆盖掉,系统表损坏,无法读取,考虑用自动备份文件来提取表结构。
日志中的操作记录:

由于系统表被损坏,有大量数据表的结构无法被确定,只能靠数据库数据恢复工程师根据经验进行恢复工作。
数据库数据恢复方案:
经过北亚数据库数据恢复工程师团队的会诊,确定以下数据库数据恢复方案:
备份用户数据——分析备份文件中旧数据的数据库——从旧数据库中寻找数据表的结构——从日志中提取一部分数据表的结构——从日志中和残留数据中提取完好的数据——根据日志恢复对应的数据,并检查数据是否正确
——核对数据没问题后恢复所有数据。
SqlServer数据库数据恢复过程:
1、备份数据。
硬件工程师首先检测硬盘是否存在物理故障。没有发现硬件问题后对每块硬盘做镜像备份。
使用专业工具备份所有硬盘数据:

2、扫描镜像文件。
用工具打开残留文件并分析硬盘底层数据,发现硬盘底层中还残留着许多SQL Server的日志和备份文件。残留日志中有很多数据库插入语句的操作记录。残留备份文件中发现建表语句和部分旧数据,尝试提取这些数据。
为了加快数据提取速度,北亚数据恢复工程师编写了一个提取数据库相关数据的小程序,扫描整个硬盘中所有的数据库残留数据,提取所有数据。
3、分析扫描数据。
对扫描到的所有日志文件进行分析发现日志文件中分数据页,有着固定的开头和结尾,其中每条数据在固定的位置都有自己的object ID号,在扫描文件中继续搜寻有同样object Id的数据记录,发现结构相同,可以确定这是完好的数据,可以提取。
再对扫描到的备份文件进行分析发现从中可以提取出很多建表语句,获取到一部分表结构。对于剩余的表结构,由于截断为0的部分刚好在系统表,没有办法提取表结构,只能从日志中提取的数据来推断表结构和数据类型。
4、提取数据。
根据之前分析,北亚数据恢复工程师编写程序从备份文件中提取建表语句,根据建表语句分析出表结构与各种数据类型,同时在残留的系统表中寻找22H、07H、05H表。根据这些建立表与OBJECT_ID的对应关系编写新的程序对日志中的记录进行提取,根据object ID来对应数据和表,并插入到新表中。
5、验证所有数据。
经管理员亲自验证,恢复出来的新表与使用专业工具观察到的数据基本一致,本次数据恢复成功。
边栏推荐
猜你喜欢

EasyExcel实现动态列解析和存表
![[Deep Learning] Today's bug (August 2)](/img/c5/c4c6d97276bd9997c49ed886aa24cf.png)
[Deep Learning] Today's bug (August 2)

蒋松廷 荣获第六季完美童模全球总决赛 全球总冠军

高效的组织信息共享知识库是一种宝贵的资源

#夏日挑战赛# HarmonyOS 实现一个绘画板

产品-Axure9英文版,轮播图效果
![[Unity Starter Plan] Making RubyAdventure01 - Player Creation & Movement](/img/e9/9bba4f7ecee81ae7ce7e492b54ee11.png)
[Unity Starter Plan] Making RubyAdventure01 - Player Creation & Movement

11. Container With Most Water

元宇宙系列--Value creation in the metaverse

罗克韦尔AB PLC RSLogix5000中创建新项目、任务、程序和例程的具体方法和步骤
随机推荐
数据中台“集存通用治”功能场景说明
C专家编程 第1章 C:穿越时空的迷雾 1.7 编译限制
【AppCube】零代码小课堂开课啦
新版本 MaxCompute 的SQL 中支持的 EXTRACT 函数有什么作用?
使用 PowerShell 将 Windows 转发事件导入 SQL Server
如何在 DataWorks 中 写SQL语句监控数据的变化到达一定的值 进行提示
node connection mongoose database process
将 Windows 事件日志错误加载到 SQL 表中
机器人开发--Universal Scene Description(USD)
[Unity Starter Plan] Making RubyAdventure01 - Player Creation & Movement
leetcode:202. 快乐数
Kubernetes 笔记 / 入门 / 生产环境 / 容器运行时
可复现、开放科研、跨学科合作:数据驱动下的科研趋势及应用方案
Auto Scaling 弹性伸缩(运维释放人力)
C专家编程 第3章 分析C语言的声明 3.1 只有编译器才会喜欢的语法
Async的线程池使用的哪个?
C专家编程 第3章 分析C语言的声明 3.5 typedef可以成为你的朋友
Description of the functional scenario of "collective storage and general governance" in the data center
【LeetCode】899. 有序队列
FinClip | July 2022 Product Highlights