前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何通过拼数据库碎片的方式恢复数据

如何通过拼数据库碎片的方式恢复数据

原创
作者头像
北亚数据安全与救援
修改于 2021-07-29 10:04:25
修改于 2021-07-29 10:04:25
7800
举报

由于服务器突然断电,造成我公司Xen Server服务器中一台VPS(即Xen Server虚拟机)不可用,虚拟磁盘文件丢失。硬件环境是Dell 720服务器配戴一张H710P的RAID卡,由4块希捷2T STAT硬盘组成的RAID 10,上层环境是Xen Server 6.2版本操作系统,虚拟机是Windows Server 2003系统,10G系统盘 + 5G数据盘两个虚拟机磁盘,上层是Web服务器(ASP + SQL 2005的网站架构)。

  我们的数据盘首先被连接到北亚恢复环境服务器上,然后超过硬盘总容量的空间将数据盘以磁盘底层扇区的方式镜像到备份空间上。

由于Xen Server服务器中虚拟机的磁盘都是以LVM的结构存放的,(即每个虚拟机的虚拟磁盘都是一个LV,并且虚拟磁盘的模式为精简模式。)LVM的相关信息在Xen Server中都有记载,查看“/etc/lvm/backup/frombtye.com “下LVM的相关信息发现并没有存在损坏的虚拟磁盘信息,因此可以断定LVM的信息已经被更新。接着分析底层看能否找到未被更新的LVM信息,果不其然在底层发现了还未更新的LVM信息。

图一
图一

根据未被更新的LVM信息找到了虚拟磁盘的数据区域,但遗憾的是该区域的数据已被破坏。分析后发现造成虚拟机不可用的最终原因是因为虚拟机的虚拟磁盘被破坏,从而导致虚拟机中的操作系统和数据丢失。而导致这种情况的发生很有可能是虚拟机遭遇网络攻击或hack入侵后留下恶意程序造成的。仔细核对这片区域后发现,虽然该区域有很多数据被破坏了,但还是发现了很多数据库的页碎片。因此可以尝试将许多数据库的页碎片拼成一个可用的数据库。

首先对底层进行分析,根据RAR压缩包的结构可以找到很多压缩包的数据开始位置,而RAR压缩包文件的第一个扇区中会记录此RAR的文件名。因此根据我们提供的备份数据库的压缩包文件名和目前找到的压缩包位置的文件名相匹配,即可找到备份数据库压缩包的开始位置。找到压缩包的位置后仔细分析这片区域的数据,然后将此区域的数据恢复出来重命名为一个RAR格式的压缩文件。然后尝试解压此压缩包,发现解压报错。

解压报错的原因是有部分数据被破坏了。接着开始尝试使用RAR的修复工具看能否忽略错误解压部分数据,结果修复完成之后解压的数据库只有网站的部分代码,并没有数据库的备份文件。因此可以判断数据的备份文件在RAR压缩包中是损坏的。

根据SQL Server数据库的结构去底层分析数据库的开始位置,在数据库的结构中,第9个页会记录本数据库的数据库名。因此在提供了数据库的名称之后,再分析底层找到此数据库的开始位置。因为在数据库的每个页中都会记录数据库页编号以及文件号,所以可以根据这些特征编写程序去底层扫描符合数据库页的数据。

然后将扫描出来的碎片按顺序重组成一个完整MDF文件,再通过MDF校验程序检测整个MDF文件是否完整。

【结论】

检测没问题之后再搭建数据库环境,将重组后的数据库附加到搭建好的数据库环境中。然后查询相关表数据是否正常,查询最新数据是否存在。

由于数据库需要结合网站代码才能更好的验证数据库的完整性。我们又开发商处拿到了网站代码搭建好了环境,然后将恢复好的数据库发送给我们验证,一切正常,通过拼数据库碎片的方式成功将数据库恢复完成,整个数据恢复成功。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
openGauss与PostgreSQL分区策略语法测试
PostgreSQL支持继承,版本10之前的分区表都是通过继承特性来实现,每个分区实际上都是一个独立的表。数据更新可通过触发器trigger或者规则rule来实现。
数据和云
2021/05/31
1.5K0
PostgreSQL 自动创建分区最佳实践
分区表是 PostgreSQL 在 10 版本才具有的特性,实际使用中,用户往往需要做到提前创建分区或者按写入的数据实时创建分区。 本文探讨常见的几种自动分区创建方案。
艾超_运成
2022/02/13
4.7K0
PostgreSQL 自动创建分区最佳实践
MySQL的分区表:大规模数据处理的最佳方案
MySQL是一种常用的关系型数据库管理系统,分区表是一种在MySQL数据库中处理大规模数据的最佳方案之一。分区表技术可以将一个大型的表按照某种规则进行拆分成多个小型表,每个小型表称为一个分区,从而提高系统性能、快速处理海量数据和节省存储空间。
用户1289394
2024/03/18
3860
MySQL的分区表:大规模数据处理的最佳方案
POSTGRESQL O 记数据库的功能 inheritance 继承
OBJECT 对象,这个名词其实在数据库的层面很少被提及,4大世面上常用的关系型数据库,可以带有 O 这个标记的也只有POSTGRESQL。 其他数据库可以叫RDBMS, relational database management system .
AustinDatabases
2021/06/10
6740
POSTGRESQL   O 记数据库的功能 inheritance 继承
【DB笔试面试470】分区表有什么优点?分区表有哪几类?如何选择用哪种类型的分区表?
当表中的数据量不断增大时,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。当对表进行分区后,在逻辑上,表仍然是一张完整的表,只是将表中的数据在物理上可能存放到多个表空间或物理文件上。当查询数据时,不至于每次都扫描整张表。Oracle可以将大表或索引分成若干个更小、更方便管理的部分,每一部分称为一个分区,这样的表称为分区表。SQL语句使用分区表比全表能提供更好的数据处理与访问的性能。即使某些分区不可用,其它分区仍然可用,这叫做分区独立性。
AiDBA宝典
2019/09/30
1.5K0
Postgresql源码(105)分区表剪枝代码分析
对于分区表,子表剪枝是保证性能最重要的手段,优化器在生成Plan的过程中对子表进行了剪枝,本篇对剪枝流程做简要总结。
mingjie
2023/10/13
2700
Postgresql源码(105)分区表剪枝代码分析
在线重定义(online redefinition)真的在线吗?
最近用Online Redefinition解决了一批普通大表(超千万级别)转换成分区表,后期方便做数据裁剪(truncate partition),Online Redefinition的优点是支持在线操作,但在操作过程中还是发生了一些生产操作的事故,分享出来让大家避坑。
布衣530
2025/01/17
1420
在线重定义(online redefinition)真的在线吗?
PostgreSQL10分区表性能研究报告
作者简介:田磊磊 PostgreSQL、Greenplum高级数据库工程师,熟悉PG技术栈,对OLTP/OLAP均有深入实操经验,目前就职于哈啰出行,维护着国内最大的PG集群之一,超过400个PG实例。微信号:TLL-PostgreSQL-MySQL
数据库架构之美
2020/07/21
1.6K0
Greenplum性能优化之路 --(一)分区表
分区表就是将一个大表在物理上分割成若干小表,并且整个过程对用户是透明的,也就是用户的所有操作仍然是作用在大表上,不需要关心数据实际上落在哪张小表里面。Greenplum中分区表的原理和PostgreSQL一样,都是通过表继承和约束实现的。
lambgong
2018/12/18
22.6K0
Greenplum性能优化之路 --(一)分区表
Oracle 分区表
随着表的不断增大,对于新纪录的增加、查找、删除等(DML)的维护也更加困难。对于数据库中的超大型表,可通过把它的数据分成若干个小表,从而简化数据库的管理活动。对于每一个简化后的小表,我们称为一个单个的分区。
Leshami
2018/08/07
2K0
Greenplum 7 新特性整理
参考:https://www.xmmup.com/zaidockerzhongkuaisutiyangreenplum-7-0-0.html
AiDBA宝典
2023/10/16
1.4K0
Greenplum 7 新特性整理
数据库分区概念及简单运用
分类:分为水平分区(Horizontal Paritioning)和垂直分区(Vertical Partitioning)
全栈程序员站长
2022/09/06
1.3K0
大数据表查询优化 - 表分区
快两年没写过业务代码了…… 今天帮一个研发团队优化了一下数据库表的查询性能。使用的是表分区。 简单记录了一下步骤,方便直接用:
用户1172223
2020/10/09
1.1K0
openGauss 分区表索引
openGauss分区表支持两种索引:全局(global)索引和本地(local)索引。
数据和云
2021/09/22
2.1K0
openGauss 分区表索引
OushuDB 产品基本介绍——表
OushuDB表由行(rows)和(columns)组成。每一个列有一个列名和一个数据类型,一个表的列数和列的顺序是固定的。一个表的行数是可变的。SQL并不假设表中行的顺序。当读一个表时,除非显示要求排序,返回的行会以任意顺序出现。另外,SQL并不给每一行一个唯一标志符,所以,一个表中具有同样几个同样的行是可能的。
用户7454708
2023/05/08
1.1K0
OushuDB 产品基本介绍——表
猫头虎分享:PostgreSQL 中分区表 PARTITION BY RANGE 的使用详解与数据迁移,索引创建细节详解
数据库作为现代技术的核心,如何高效地管理海量数据一直是技术团队关注的焦点。在 PostgreSQL 中,分区表(Partitioned Tables)为我们提供了极大的灵活性,尤其是通过 PARTITION BY RANGE 可以轻松实现按日期分区,大幅度提升查询性能和数据管理效率。今天,我们猫头虎技术团队将为大家详细剖析如何使用 PostgreSQL 的分区表及其背后的数据迁移与索引创建细节。
猫头虎
2024/09/17
4230
迁移实战:一次AntDB(基于pgxl分布式架构的数据库)数据库迁移经验分享
墨墨导读:AntDB是一款基于PG内核的分布式数据库。根据AntDB官方介绍,该数据具备持续的集群自动高可用,秒级在线扩容,强大的Oracle兼容,异地容灾,sql语句级自定义分片,分布式事务和MVCC,是一款非常强大的企业级国产分布式数据库。由于AntDB在使用过程中,与pgxl很相近,所以本文对pgxl的情况下有一定的帮助。
数据和云
2020/09/14
5.9K0
迁移实战:一次AntDB(基于pgxl分布式架构的数据库)数据库迁移经验分享
PostgreSQL全局临时表插件pgtt的使用
PostgreSQL目前到最新12版本只支持本地临时表不支持全局临时表特性 ,会话退出后临时表定义和数据被删除,创建临时表语法如下:
数据和云
2020/09/22
1.7K0
Snova运维篇(十):gp数据库中数据操作-2
Greenplum数据库数据库支持Postgres索引类型B-树和GiST,不支持Hash和GIN索引
snova-最佳实践
2019/12/31
9230
Snova运维篇(十):gp数据库中数据操作-2
PostgreSQL 分区表为什么要带 pg_pathman 过时了?
PostgreSQL 如果使用较早的“大仙”们,在做分区的时候会提pg_pathman,为什么一个数据库使用分区表还要一个插件,可能习惯商业数据库的“人儿们”,不大理解。这点要从PG的分区表的来源来说, PG的分区表其实是PG的表继承概念的延伸。表继承允许planner只包含那些与查询兼容的子表(分区)。同时,用户在分区管理方面还有很多工作要做:创建继承的表,编写触发器来选择合适的分区进行行插入等。为了自动化这项工作,编写了pg_partman扩展。
AustinDatabases
2020/03/26
2.1K0
PostgreSQL  分区表为什么要带 pg_pathman 过时了?
推荐阅读
相关推荐
openGauss与PostgreSQL分区策略语法测试
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档