Server数据库恢复案例分享-SQL (server2012)

教程大全 2025-07-14 04:18:26 浏览
2012

很多数据恢复工程师包括一些数据恢复技术爱好者经常会问同样一个问题:“数据一旦被覆盖了,还能不能恢复呀?我听说国外能恢复被覆盖以后的数据,据说只要是覆盖操作在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种处理情况:

数据库碎片页面的概念

数据库文件在设计的时候都是按照一定的有规律的形式来存放的,数据库文件内部结构相当于一个小型的文件系统,我们了解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已经使用了两年多,数据库在创建的时候,数据库文件根据需要分配空间,而不是一开始就分配很大的空间,所以在以后使用过程中,空间分配分散很严重,在硬盘上不可能连续存放!按照类型扫描恢复文件大都基于数据文件连续存放,否则恢复出来的文件只正确包含文件地一段数据信息!

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

原文链接:

【编辑推荐】


SQL2000怎样备份数据库

数据库备份和还原就是创建完整数据库的复本,以便用于以后重新创建数据库的需要。 数据备份是为了防“万一”,所以即使硬件既可靠又有冗余,数据备份和还原永远都是保护数据的重要手段之一。 在SQL Server 中,提供数据备份与还原的多种方式,无论你的数据库有多大、改变是否频繁,都有满足你的要求的备份策略,有关这些方面的内容不是本文要描述的,本文只是介绍采用手工数据备份与还原过程的操作步骤。 一、数据库备份1、点击“程序》Microsoft SQL Server》企业管理》”,打开企业管理器2、展开服务器组,然后展开服务器,选中要备份的数据库3、点击鼠标右键“所有任务》备份数据库”4、选项设置“备份”选择“数据库-完全”。 在“目的-备份到”中,您可以将备份文件存于当前默认路径;如果要更改路径,则请先删除当前路径,在点击“添加”,选择备份文件的存放路径。 “重写”中,如果将备份文件存于当前默认路径,则请选择“重写现有媒体选择”;如果更改路径,选择“追加到媒体”或“重写现有媒体选择”均可。 “调度”这里不介绍,您自己可以打开企业管理跟着向导做。 5、在“选项”中,请您选择“完成后验证备份”6、点击“确定”立即开始备份并自动验证。

怎样重建SQL2005中的master ?

遇到损坏或者错误的master数据库是最难解决情况之一。 Master数据库包含了SQL Server需要的关键信息。 如果master数据库出错,那么SQL Server就不能启动。 要在这种情况下还原master数据库,可以按照下面这些步骤来从灾难中恢复过来:1. 使用\Program Files\Microsoft SQL Server\80\Tools\Binn目录下的文件重建master数据库。 重建master数据库可以使你的数据库文件完整无缺。 经常把数据和日志文件备份到一个单独的目录是个不错的主意。 2. 使用-m参数启动SQL Server,这样可以以单用户模式重新启动SQL Server。 3. 从最近一次已知最好的备份来还原master数据库。 4. 核实master数据库是不是已经成功还原:确认所有数据库都已恢复正常运行。 从最近一次已知最好的备份来还原msdb数据库。 5. 以普通模式停止和启动SQL Server。 6. 向生产用户开放数据库。 如果这样做没有效,那么重建master数据库然后附加这个数据库。 这也是DBA的任务之一,当然你并不希望经常这样做。 如果master数据库出现问题,那么服务器上所有的数据库都会出现问题。

sql数据库如何自动备份和恢复?

一、备份数据库1、打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server2、SQL Server组-->双击打开你的服务器-->双击打开数据库目录3、选择你的数据库名称(如论坛数据库Forum)-->然后点上面菜单中的工具-->选择备份数据库4、备份选项选择完全备份,目的中的备份到如果原来有路径和名称则选中名称点删除,然后点添加,如果原来没有路径和名称则直接选择添加,接着指定路径和文件名,指定后点确定返回备份窗口,接着点确定进行备份二、还原数据库1、打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server2、SQL Server组-->双击打开你的服务器-->点图标栏的新建数据库图标,新建数据库的名字自行取3、点击新建好的数据库名称-->然后点上面菜单中的工具-->选择恢复数据库4、在弹出来的窗口中的还原选项中选择从设备-->点选择设备-->点添加-->然后选择你的备份文件名-->添加后点确定返回,这时候设备栏应该出现您刚才选择的数据库备份文件名,备份号默认为1(如果您对同一个文件做过多次备份,可以点击备份号旁边的查看内容,在复选框中选择最新的一次备份后点确定)-->然后点击上方常规旁边的选项按钮5、在出现的窗口中选择在现有数据库上强制还原,以及在恢复完成状态中选择使数据库可以继续运行但无法还原其它事务日志的选项。在窗口的中间部位的将数据库文件还原为这里要按照你SQL的安装进行设置(也可以指定自己的目录),逻辑文件名不需要改动,移至物理文件名要根据你所恢复的机器情况做改动,如您的SQL数据库装在D:\Program Files\Microsoft SQL Server\MSSQL\Data,那么就按照您恢复机器的目录进行相关改动改动,并且最后的文件名最好改成您当前的数据库名(如原来是,现在的数据库是zw0002,就改成),日志和数据文件都要按照这样的方式做相关的改动(日志的文件名是结尾的),这里的恢复目录您可以自由设置,前提是该目录必须存在(如您可以指定d:\sqldata\或者d:\sqldata\),否则恢复将报错6、修改完成后,点击下面的确定进行恢复,这时会出现一个进度条,提示恢复的进度,恢复完成后系统会自动提示成功,如中间提示报错,请记录下相关的错误内容并询问对SQL操作比较熟悉的人员,一般的错误无非是目录错误或者文件名重复或者文件名错误或者空间不够或者数据库正在使用中的错误,数据库正在使用的错误您可以尝试关闭所有关于SQL窗口然后重新打开进行恢复操作,如果还提示正在使用的错误可以将SQL服务停止然后重起看看,至于上述其它的错误一般都能按照错误内容做相应改动后即可恢复

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐