【数据库数据恢复】SQL Server数据库系统表损坏的数据恢复案例

码林季风
• 阅读 341

数据库故障&分析:
SQL server数据库数据无法读取。
经过初检,发现SQL server数据库文件无法被读取的原因是因为底层File Record被截断为0,无法找到文件开头,数据表结构损坏。镜像文件的前面几十M空间和中间一部分空间被覆盖掉,系统表损坏,无法读取。考虑用自动备份文件来提取表结构。
日志中的操作记录:
【数据库数据恢复】SQL Server数据库系统表损坏的数据恢复案例

由于系统表损坏,有大量数据表的结构无法确定,只能依靠数据恢复工程师的技术和经验尝试进行恢复。
经过初检的结果,北亚企安数据恢复工程师团队最终敲定数据恢复方案:
1、备份数据。
2、基于备份文件分析旧SQL server数据库底层数据。
3、从旧SQL server数据库中寻找数据表的结构。
4、从日志中提取一部分数据表的结构。
5、从日志和残留数据中提取完好的数据。
6、根据日志恢复对应的数据,检查数据是否正确。
7、数据核对没有问题后恢复出所有数据。

数据库数据恢复过程:
1、将涉及到的所有硬盘交由硬件工程师进行物理故障检测,经过检测没有发现有硬盘存在物理故障。将每块硬盘以只读方式做全盘镜像,后续的数据分析和数据恢复工作都基于镜像文件进行,避免对原始磁盘数据造成二次破坏。
对硬盘做镜像:
【数据库数据恢复】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、完成上述的所有操作后对数据进行验证,经过验证确认恢复出来的新表与用工具观察到的数据基本一致。本次数据恢复工作完成。

点赞
收藏
评论区
推荐文章
Easter79 Easter79
4年前
truncate table操作后数据恢复方法探究
概述:北京某国企客户Oracle11gR2数据库误truncatetableCM\_CHECK\_ITEM\_HIS,表数据丢失,业务查询到该表时报错,此时发现数据库的备份不能用,表数据无法查询。客户Oracle11gR2数据库误truncatetableCM\_CHECK\_ITEM\_HIS,表数据丢失,业务查询到该表时报错,此
Easter79 Easter79
4年前
truncate表恢复
原理_Truncate不会逐个清除用户数据块上的数据,而仅仅重置数据字典和元数据块上的元数据(如存储断头和扩展段图)。__也就是说,此时,基本数据表并未破坏,而是被系统回收,等待被重新分配—因此,要恢复被truncate的数据,需要及时备份所在的数据文件。_实验工具Fy\_R
Abel617 Abel617
4年前
2秒内向数据库中插入十万条数据?
怎么向数据库中快速插入十万条数据呢,当然得需要对比才能看到效果,今天给大家亲身测了两种方法对比,差别25倍左右1,数据库用sqlserver2008r2,表结构非常简单,四个字段,建数据表的sql代码如下USETestDBGO
Stella981 Stella981
4年前
PostgreSQL 恢复大法
转载自:https://yq.aliyun.com/articles/582880背景一个较大的数据库,如何只恢复一部分数据(例如只恢复某个DB)。如果访问有坏块的表。如何从无法启动的数据库中,恢复到有意义的数据。如何正确的进行备份。如何恢复到过去的某个时间点。恢复部分数据库《PostgreSQLSelect
Wesley13 Wesley13
4年前
MySQL 磁盘满了,怎么办??
问题使用命令发现磁盘使用率为100%了,还剩几十兆。一系列神操作:备份数据库,删除实例、删除数据库表、重启mysql服务.结果磁盘空间均为释放怎么办网上查了很多资源,说要进行磁盘碎片化整理。原因是datafree占据的空间太多啦。具体可以通过这个sql查看。SELECTCONCAT(TRUNCATE(S
Wesley13 Wesley13
4年前
MySQL日志体系详解
前言日志是MySQL数据库的重要组成部分。日志文件中记录着MySQL数据库运行期间发生的变化;也就是说用来记录MySQL数据库的客户端连接状况、SQL语句的执行情况和错误信息等。当数据库遭到意外的损坏时,可以通过日志查看文件出错的原因,并且可以通过日志文件进行数据恢复。MySQL的日志体系有如下几种分类:1.错误日志2.查询日志
Caomeinico Caomeinico
4年前
用增量备份来快速恢复dg
用于解决存档日志文件丢失或损坏、无法解决的存档间隙或需要在不应用大量存档日志文件的情况下及时前滚备用数据库的问题。备库关闭mrp后确认当前scnRECOVERMANAGEDSTANDBYDATABASECANCEL;SELECTCURRENTSCNFROMV$DATABASE;主库发起增量备份(依据上面查出来的scn)BACKUPINCREM
Wesley13 Wesley13
4年前
Oracle Data Guard 的角色转换(Failover)
OracleDataGuard的角色转换\日期:20130618\来源:Linux社区 作者:newhappy\字体:大中小\二、Failover一旦主数据库发生Crash(比如异常掉电、硬件故障),短时间内无法恢复运行,这时为了尽快的把业务恢复正常,通常需要执行fa
Wesley13 Wesley13
4年前
oracle基础知识
冷备份:在数据库完全关闭的情况下进行的,数据文件是一致的,在备份时没有任何访问和修改从冷备份中恢复:1文件还原2前向恢复热备份:在数据库已启动且正在运行时进行的备份。完全恢复:先把数据库还原,通过所有可用的归档日志对数据库进行前向恢复不完全恢复(时间点恢复):首先将数据库还原,利用部分日志有选择性的前滚到一个预先确定的时
流浪剑客 流浪剑客
2年前
iOS设备数据恢复软件:PhoneRescue for iOS Mac中文版
是一款专业的iOS设备数据恢复软件,它可以帮助Mac用户从iPhone、iPad、iPodtouch等设备中恢复丢失的数据。无论是因为误删除、系统崩溃、设备损坏还是其他原因导致的数据丢失,PhoneRescueMac都可以帮助您找回这些重要的数据。Phon
ElasticSearch集群灾难:别放弃,也许能再抢救一下 | 京东云技术团队
1前言Elasticsearch作为一个分布式搜索引擎,自身是高可用的;但也架不住一些特殊情况的发生,如:集群超过半数的master节点丢失,ES的节点无法形成一个集群,进而导致集群不可用;索引shard的文件损坏,分片无法被正常恢复,进而导致索引无法正常
码林季风
码林季风
Lv1
不经一番寒彻骨,怎得梅花扑鼻香。
文章
7
粉丝
0
获赞
0