Chinaunix首页 | 论坛 | 博客
  • 博客访问: 102864
  • 博文数量: 8
  • 博客积分: 805
  • 博客等级: 军士长
  • 技术积分: 210
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-21 08:28
文章分类

全部博文(8)

文章存档

2012年(1)

2011年(2)

2010年(5)

我的朋友

分类: WINDOWS

2011-05-06 11:59:07

  最近遇到数据库损坏的案例比较多,根据不同的故障及应用采取相应的恢复方法,好在大多数数据库恢复效果比较好,客户还都能接受恢复结果。下面举例几个典型的例子:

1、木生火饭店的一个餐饮管理系统,不知道什么原因,导致数据库变成质疑状态,餐饮管理系统没法登陆及使用,用户数据库版本为MS SQL Server 2000

      经过D-Recover For MS SQL Server检测,数据库数据文件(MDF)有一个数据页面头部扇区为空,就一个数据页面有问题,别的页面都是好的,尝试如下步骤在MS SQL Server下修复:

 

             use master

        sp_configure 'allow updates',1

        reconfigure with override

        update sysdatabases set status=-32768 where dbid=DB_ID('质疑数据库名称')

        dbcc rebuild_log('质疑数据库名称','e:\质疑数据库名称_log.ldf')

        dbcc checkdb('质疑数据库名称')

        sp_dboption '质疑数据库名称','dbo use only','false'

        sp_configure 'allow updates',0

        reconfigure with override

       

         执行dbcc checkdb('质疑数据库名称')时,报一个页面错误,就是上面我提到的那个页面号,经确认,这个页面是个数据页面,按道理来说,我把数据库变成单用户模式,再运行 DBCC CHECKDB('质疑数据库名称', REPAIR_ALLOW_DATA_LOSS)就能修复好,大不了丢失一些记录。

         但是从执行结果来看,数据库并没有修复成功,再执行dbcc checkdb('质疑数据库名称')的时候,还会报同样的错误。

 

         最后决定用D-Recover For MS SQL Server把所有数据导入一个新的数据库中(包括数据表、视图、存储过程、用户自定义数据类型和函数等),把导出来的新库拿到用户原始环境中附加,餐饮系统居然报数据库版本不一致,没能正常连接到。经过一番思量,觉得这个餐饮管理系统数据表之间关联度非常复杂,通过前面的恢复,虽然说是把数据记录等信息恢复回来,但是关联度可能会保留得不完美,从而使得系统认为数据库版本不一致。

 

         就是一个数据页面损坏,居然影响到所有数据的正常使用,于心不甘,再次进行研究,想办法把空白的数据页头信息手工还原回来,先从空白页头的页面上下页信息入手,分析当前页的页头信息,按照页头结构,手工构造出一个页面信息,再次进行 dbcc checkdb('质疑数据库名称')操作,发现有报错,在单用户模式下执行DBCC CHECKDB('质疑数据库名称', REPAIR_ALLOW_DATA_LOSS),居然成功了,经用户对数据进行验证,没有发现数据丢失,到此数据恢复圆满成功。

 

2、新疆的一个用户,不小心把用友数据库中的一张数据表删除了,数据记录有1万多条。用友数据库大都是涉及到财务数据,一旦数据丢失,集团财报等将无法按时统计出来。所以客户到北京找专业数据恢复公司来恢复,因为数据可以多分拷贝,客户将数据库文件派发到好几家公司同时做恢复。如果在早些年里,我接到这样的单子就会直接放弃,因为我不知道怎样去恢复,也没有相应的工具来做恢复。经过前几年的努力研发,在2010年,我把D-Recovery For MS SQL Server数据库恢复工具做出来了,这个工具花费了大量的精力和时间,从MS SQL7.0 200020052008,其中结构的变化非常复杂。

   对于数据表删除,从恢复角度可以从数据文件入手,也可以从日志文件入手。如果是从某个表内部删除记录,从日志文件角度去做恢复效果可能更好一下;如果直接删除表,从数据文件角度去恢复会更好。客户的数据库版本是MS SQL Server 2005,恢复起来比2000版本更难。最终用D-Recovery For MS SQL Server定制版本,提取出1万多条记录,用户相当满意。

 

3、有一个客户,由于服务器非正常关机,导致MS SQL Server 2008数据库出现质疑,经过MS SQL Server高手几经修复,最后数据库能在修复模式下挂载上,有些表的数据能正常select,也能导出来,数据库文件大小为50GB。用户最关键的一张表原来有600万左右的数据记录,这张表再怎么折腾也恢复不出来,最后送到达思来进行数据恢复,经过经一个星期的数据导出,最终把用户的这张表较为完美的导出来。D-Recovery For MS SQL Server可以单独提取某个表的数据,而不进行全部恢复。

 

声明:作者达思数据恢复技术专家覃廷良,本文首发   , donews.com,51cto,techweb,新浪,百度等数据恢复技术博客上转发.欢迎转发,转发请保留作者及出处。

 

阅读(1449) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~