网站首页 >> 技术专题 >> 行业新闻 >> 文章内容

数据库修复技术

[日期:2011-05-17]   来源:厦门数据恢复|厦门硬盘数据恢复|厦门IT外包|厦门电脑IT外包服务  作者:厦门数据恢复|厦门硬盘数据恢复|厦门IT外包|厦门电脑IT外包服务   阅读:5[字体: ]
[导读]数据库损坏的案例比较多,根据不同的故障及应用采取相应的恢复方法,好在大多数数据库恢复效果比较好,客户还都能接受恢复结果
数据库损坏的案例比较多,根据不同的故障及应用采取相应的恢复方法,好在大多数数据库恢复效果比较好,客户还都能接受恢复结果。下面举例几个典型的例子:
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可以单独提取某个表的数据,而不进行全部恢复。
相关评论