很多数据恢复工程师包括一些数据恢复技术爱好者经常会问同样一个问题:“数据一旦被覆盖了,还能不能恢复呀?我听说国外能恢复被覆盖以后的数据,据说只要是覆盖操作在7次以内,都能恢复出来,国内有没有这种技术呀?”这种问题困惑很多人,也困惑很多年,到现在也只是停留在传说阶段,没有人能够证实!市面上有一些数据擦除工具,在进行数据毁灭擦除的时候往往有一个选项:擦除1遍?擦除3遍?擦除7遍?我在怀疑是不是一种心理作用。在我目前认知的数据恢复技术领域,我坚决的认为:只要覆盖一遍,数据就不可恢复!如果说能恢复,那已经超出目前世界商业数据恢复技术领域,可能是个传说吧。

本文的重点是要揭开数据覆盖假象问题,并不讨论数据被覆盖以后的恢复技术。所谓的“数据覆盖假象”,就是数据丢失或者被破坏以后,数据恢复工程师没能恢复出用户需要的文件,就主观的认为数据“被”覆盖了,其实丢失的数据“尸体”可能完整的躺在硬盘中,或者以支离破碎的“尸体”碎片散落在硬盘的多个位置上。真正的数据恢复高级技术,就是把数据“尸体”从硬盘中捞出来,运气好的话,一个丢失的文件数据“尸体”连续存放在硬盘中,恢复就较为简单。如果数据分成多段存放在硬盘中,数据恢复工程师就得把所有的数据段(数据碎片)捞出来,然后进行拼接,最终化腐朽为神奇,还原出丢失的数据完整的“尸体”,再进行文件内容确认,数据恢复就基本结束。

我们以一个实际的数据恢复案例来讲解:

实际环境:

在Windows 2003 Server操作系统下,采用NTFS分区类型,装了一个MS SQL Server 2005数据库,一共有10个数据库在用,其中有一个数据名称是xiangmu01,对应两个物理文件xiangmu01.mdf和xiangmu01.ldf,这个数据库使用有两年多时间,xiangmu01.mdf大小有18GB,xiangmu01.ldf大小有30GB,存放路径为d:\database\。

数据丢失过程:

某个粗心的工程师在使用服务器时,从MS SQL Server企业管理器中创建了一个新的数据库,名称为xiangmu001,创建时使用默认存储路径,默认路径把数据库xiangmu001的物理文件创建在了C盘的MS SQL Server安装路径上,他及时发现,想把数据xiangmu001删除了,重新创建,把物理文件存放到d:\database\下,灾难就在这一步降临,错误的把xiangmu01数据库删除了,然后再创建xiangmu001数据库,把物理文件路径更改成d:\database\,企业管理器出现提示“该数据库名称已经存在”,停下来检查,脑袋嗡的一声“删错了数据库!”。

这个时候工程师想的第一件事就是找备份来还原!!!!于是在E盘中找到xiangmu01.bak文件,还记得核准时间,又一阵心慌意乱,这个备份是半年前的,检查一下这个库的备份脚本,早在半年前不起用了,不知道什么原因。于是又做了一个大胆的操作--“还原这个备份文件”。

他还原的步骤是,先创建xiangmu01数据库,物理文件名称和路径跟原来数据库一样,于是在d:\database\下由于删除xiangmu01数据库丢失掉的两个物理文件xiangmu01.mdf和xiangmu01.ldf,又出现在d:\database\目录下,按照数据恢复行业词汇就是“同名覆盖”。创建好了新的xiangmu01数据库,就用xiangmu01.bak来还原,祸不单行,这个xiangmu01.bak文件是坏的,还原不了。到了这里,瞒也瞒不住,上报领导,挽救数据!!

数据恢复是否有可能:

我们先不评价数据丢失过程怎样的XXX,就这个案例而言,数据恢复成功的可能性到底有没有??根据不同的数据恢复公司,接到这样的数据恢复案例,会有如下3种处理情况:

1、直接认为要恢复的数据发生了“同名覆盖”,起码数据库文件头部被破坏,不可恢复!

2、会按照数据库mdf文件类型对整个分区进行扫描,提取出若干个mdf文件,挨个去验证,看看有没有好的,(这种恢复方式几乎不能成功),最后宣告恢复失败!

3、尝试按照MS SQL Server数据库页面碎片对整个分区进行扫描,因为数据库比较多,数据库页面碎片个数非常多,如果再加上对NTFS文件系统结构的熟悉了解,在扫描数据库页面碎片的时候,排除掉当前分区中正常存在的mdf文件的页面信息,单独提取硬盘分区NTFS文件系统中正常情况下不存放数据区域的数据库页面碎片,就是丢失掉的或者以前曾经存放过的mdf文件内容。通俗的讲,就是该分区被认为空闲的、可用的那部分空间中,就是我们丢失的数据所在的地方。提取出被遗失的所有数据库碎片页面,然后按照一定规律来拼接,最终还原出删除的mdf文件。

数据库碎片页面的概念:

数据库文件在设计的时候都是按照一定的有规律的形式来存放的,数据库文件内部结构相当于一个小型的文件系统,我们了解NTFS文件系统,它有“簇”的概念,就是文件存放分配的最小单元。在数据库文件里头,有Page即“数据页”的概念,就是数据库文件结构按照一页一页存放,每一个页面占用16sec或者32sec或者别的更大点的数,对于MS SQL Server来说,每一页的大小有16sec,每个数据页有自己的页面编号等信息,每个页面有自己的校验方式等等,我们在提取数据库页面的时候,就根据这些规律来的。当把所有数据库页面碎片提取出来以后,怎样把这些页面拼接成一个文件,又是一门数据恢复艺术!

数据恢复结果:

本案例在达思数据恢复公司最终成功恢复,达思D-Recovery For MS SQL Server数据库恢复软件是在软件研发人员耗费大量时间和精力出品的的国内少有的MS SQL Server数据库恢复软件。在数据库恢复技术领域,往往能化腐朽为神奇!

首先,它有数据库碎片提取功能,有一定的碎片智能组合功能,如果某条组合线路出现分叉,可以人工查看,确定正确的组合线路,最终能把mdf文件相对完整的拼接出来。

其次,它可以直接读取mdf文件内容,如果有某些数据页面被覆盖或者被破坏,它可以绕过这些坏页面,把mdf文件中正常的数据记录提取出来,然后进行数据还原。在mdf文件局部损坏的情况下,MS SQL Server环境没有办法修复mdf文件,没办法读取mdf文件中的数据,这时候D-Recovery For MS SQL Server就发挥它强大的数据库内容提取功能!

揭开数据覆盖假象:

对本案例而言,出现了同名文件覆盖的现象,大多数人都认为是数据被覆盖了!在NTFS文件系统中,同名覆盖,往往意味着原先文件MFT表项和后面覆盖过来的文件的MFT表项是同一个,MFT表项ID号(如果有ID号)不会更改,更改的只是MFT表项内部的数据指针!这样通过任何数据恢复工具扫描,不会找出原始文件MFT内部数据指针,找到的都是新覆盖的文件的MFT表项信息。

数据区会不会也被新文件覆盖呢?答案是不一定!Windows操作系统在分配新覆盖过来的文件空间的时候,有可能会按照旧文件的指针分配,有可能分配新的数据空间,这就看Windows NTFS 文件系统文件空间分配机制了!如果说,新文件分配新空间,跟原始文件空间不发生重叠,那原始文件内容将不会受影响!

为什么按照mdf文件类型来恢复,没能找出正确的文件?数据库文件xiangmu01.mdf已经使用了两年多,数据库在创建的时候,数据库文件根据需要分配空间,而不是一开始就分配很大的空间,所以在以后使用过程中,空间分配分散很严重,在硬盘上不可能连续存放!按照类型扫描恢复文件大都基于数据文件连续存放,否则恢复出来的文件只正确包含文件地一段数据信息!

小结:

数据覆盖不是想当然,要经过最底层的分析,才能得出正确的恢复方法!

本文首发于达思硬盘数据恢复公司,作者:达思总工覃廷良,转载请注明出处http://www.bnuol.com

转载于:https://blog.51cto.com/199818/665951

数据“被”覆盖有假象,SQL数据库恢复终极绝招(数据恢复高级技术)相关推荐

  1. sql 数据库 恢复 全攻略

    数据库恢复可以分如下几种情况 1.数据库日志保存完整的时候 Log Explorer http://www.ttdown.com/SoftDown.asp?ID=14562 http://js.fix ...

  2. SQL数据库恢复后出现对象名无效(SQL Server备份还原时造成孤立用户的解决方案

    SQL数据库恢复后出现对象名无效(SQL Server备份还原时造成孤立用户的解决方案) 2011-04-18 09:38 以碰到这个烦人的问题,恢复的时候自带了个用户,但怎么也删除不掉,select ...

  3. azure云数据库_从Azure Databricks将数据加载到Azure SQL数据库

    azure云数据库 In this article, we will learn how we can load data into Azure SQL Database from Azure Dat ...

  4. 前5名最佳SQL数据库恢复软件

    导言 在本文中,我们将研究最优秀的5种SQL数据库恢复软件,这些软件将帮助我们从损坏的.mdf和.ndf文件中恢复和恢复数据库.在这里,我将教您如何操作该软件,以及它们将如何为我们恢复文件. 前5名最 ...

  5. SQL数据修复,SQL数据库修复,SQL数据库修复软件,SQL数据库恢复,SQL数据库日志恢复软件

    数据库修复包括以下各种情况: Ms Sql Server数据库的灾难恢复 ( 1)系统崩溃只剩下Sqlserver数据文件的情况下的恢复.即无日志文件或者日志文件损坏情况下的恢复 (2)SqlServ ...

  6. MS SQL数据库备份和恢复

    数据库备份和恢复存储过程(和大家交流一下) if exists( select * from sysobjects where name = ' pr_backup_db ' and xtype = ...

  7. Azure恢复服务-DPM联机备份SQL数据库

    继上一步我们完成了DPM的Azure联机备份配置后,下面我们继续来看看DPM如何把数据备份到Azure备份保管库的. 首先,我们在保护中新建一个保护组,这个过程和我们DPM创建保护组过程一致. 选择保 ...

  8. Android学习笔记——保存数据到SQL数据库中(Saving Data in SQL Databases)

    知识点: 1.使用SQL Helper创建数据库 2.数据的增删查改(PRDU:Put.Read.Delete.Update) 背景知识: 上篇文章学习了保存文件,今天学习的是保存数据到SQL数据库中 ...

  9. azure云数据库_Azure SQL数据库中的高级数据安全性–数据发现和分类

    azure云数据库 Azure SQL supports in building and managing wide range of SQL databases, tools, frameworks ...

最新文章

  1. 如何优化页面的响应速度 以及如何减少项目初次加载时间(转https://www.cnblogs.com/MarcoHan/p/5295398.html)...
  2. Ubuntu下添加开机启动脚本
  3. snmp自动化安装脚本
  4. 基于微服务API级权限的技术架构
  5. 重构老系统遗留代码的一些方法学习笔记
  6. 计算机防火墙不能更改,win7系统更新防火墙设置不能更改的解决方法
  7. 面向对象(基础oop)之继承总结
  8. 专科学历,能让你永久增加5倍工作机会的最强方法!超级好用
  9. C#匿名委托,匿名函数,lambda表达式
  10. html编写注册页面
  11. 【疑难解决】将设备通过Ehome协议接入EasyCVR,级联后视频无法播放如何解决?
  12. 湖南工大计算机学院大一分班,大一新生入学计算机分级教学考试会影响分班吗?...
  13. c语言 abs 不好用,c语言中 abs 和 fabs 不同吗?
  14. Docker入门之-网络(三):容器如何与外部世界通信
  15. ctfshow-菜狗杯-web(一)
  16. 前端-获取treegrid的选中数据
  17. Transformer课程 第8课NER案例代码笔记-IOB标记
  18. 中文自动文本摘要生成指标计算,Rouge/Bleu/BertScore/QA代码实现
  19. 取消AsyncTask
  20. AGM FPGA与CPLD烧录说明

热门文章

  1. 从零开始搭建一个简单的ui自动化测试框架02(pytest+selenium+allure)
  2. [译]关于NODE_ENV,哪些你应该了解
  3. 教你在CorelDRAW中导入位图
  4. HttpCookie
  5. 三角形带优化库nvtrisrip的使用
  6. android:自己实现能播放网络视频url的播放器
  7. 介绍自定义JDataGrid电子表格版本公式中的函数?
  8. 将Linux加入Windows域
  9. 华为首款鸿蒙设备正式入网,华为首款鸿蒙设备正式入网:麒麟9000+挖孔全面屏,价格感人!...
  10. html 跳转到本页面指定位置