用LogExplorer恢复数据库过程

转载 2012年03月26日 16:37:23

[故障起因:]
在使用数据导入导工具将本地表往服务器传输时,忘记点掉“选择全部对象”,因此将远程的140张表超过1000万条数据全部覆盖(操作员当时点完提交就去吃饭,因此中途没有取消),数据库没有备份。

[恢复过程:]
使用工具是LogExplore,(下载地址:http://js.fixdown.com/soft/8324.htm

安装后打开log explorer file=>attach log file->选择服务器和登陆方式->connect->
选择数据库->attach->左面对话框中browse->view log->就可以看到log记录,
点击“View DDL Commands”里面就有很多drop table 命令
点击下面的“undo”按钮是生成表结构的语句(create table ....)
点击下面的“Salvage”按钮是生成插入语句的(insert into ...values....)
(以上lynx1111提供)

我是按照上述方法的“Salvage”来生成被删除表的Insert语句,实际上用这个方法生成的SQL脚本已经包含了CreateTable。该过程速度大概用了8个小时,当时觉得慢,后来相比恢复过程,这个速度简直快的不行。最大的表脚本生成后超过1G。

生成所有的SQL脚本后,防止万一,我将数据库停下,并把Date文件夹的Log和.MDF文件拷出来(怕破坏LOG文件,没有使用数据库的备份方式备份),文件大小总共为5.7G

此后开始进行正式的恢复工作。新建一个数据库,先试着用SQL查询分析器运行了一个小表的脚本,完全没有问题。但后来发现导入比较大的SQL脚本文件,查询分析器就报错了。请教了realgz得知logExplorer本身对大脚本有良好支持,因此改用LogExplorer--》Run SQL Script 功能来运行脚本。果然大文件也可以恢复了。

但开始运行后发现包含有ntext字段的表恢复起来异常缓慢,打开一个包含nText字段的表的恢复脚本发现里面使用writeText来写入数据。恢复一个30万数据的表居然用了将近12小时的时间,而数据库中又有大量这样的表,为了加快数据,我又在几个机器上装了LogExplorer加入恢复过程,终于经过3天的时间,全部的表都搞的差不多了,不过恢复过程有少量的错误。

接下来我将几个机器的表导到同一个数据库中,不过此时恢复的表是没有包含索引、标识等扩展属性的,因此需要重新建立索引、标识、默认值以及触发器。在建立主键的时候发现居然有数据重复。。。没办法只好删除重复数据。

使用 select distinct * into t_New from t_Old 可以删除重复数据,但遇到有ntext字段的表是不能用这个方法的,最后只好用 Delete From t_Table Where ID IN (Select ID From t_Table a where (Select Count(*) From t_Table a where a.ID = ID ) > 1 )直接删除了有重复数据的记录

经过72小时的努力,99.9%的数据恢复。并于4月8日晚上恢复运行网站。

这时候部分用户反映无法登陆,一查发现是有小部分数据丢失,也就是LogExplorer里报错误的那些数据……没办法,我重新用UEdit打开SQL脚本,查找这些数据,发现还在,仔细一看发现,这些数据里都有部分内容里使用大量的回车,LogExplorer无法识别,因此才出的错误。

呵呵,顾客是上帝,没办法,只好将用户表重新在本地恢复一次,遇到错误就记录下ID,然后再考出SQL脚本到查询分析器运行(查询分析器可以运行)

现在建立了维护计划,每个星期做一次完整备份。另外操作数据库的流程也变的规范,防止此类事故出现

[一些收获:]
1、慎重使用Text/nText字段
2、LogExplorer的脚本执行工具对付大文件很不错,但执行过程会对多个回车产生误判断
3、有问题不要着急,上csdn找高手帮忙,他们会很热心帮助你

数据库备份与恢复的存储过程

  • 2011年06月03日 23:43
  • 6KB
  • 下载

[实验-视频过程]oracle热备份-整个数据库-备份和恢复操作演示

[实验-视频过程]oracle热备份-整个数据库-备份和恢复操作演示先查看数据版本和数据文件所在位置10g以上版本支持整体表空间热备份select * from v$version;select na...

Oracle 数据库误truncate table恢复过程

北京某国企客户 Oracle 11g R2 数据库误truncate table CM_CHECK_ITEM_HIS,表数据丢失,业务查询到该表时报错,此时发现数据库的备份不能用,表数据无法查询。 ...

ORACLE数据库因意外停电导致 ORA-00600:[kcratr_nab_less_than_odr]恢复过程

小弟本身C++开发,Oracle数据库也只是略涉及皮毛,客户服务器因停电导致ORACLE  ORA-00600:[kcratr_nab_less_than_odr]错误,折腾了一个下午,现将具体解决过...
  • QT_Port
  • QT_Port
  • 2016年08月24日 19:24
  • 272

控制文件丢失后,进行数据库恢复的过程

控制文件一般在一个数据库中有多了,当一个损坏的时候,我们一般直接shutdown abort数据库然后将尚正常的一个复制到损坏的位置就OK,当全部损坏的时候,如果备份了控制文件还好,如果控制文件没有备...
  • x6_9x
  • x6_9x
  • 2016年01月05日 22:15
  • 236

ORACLE 11G 中采用rman备份异机恢复数据库详细过程

场景:        有一个生产库的用户下面所有的表都不见了,怀疑人为被删除了,现在需要用备份去恢复下,找出原来的表,线上是oracle dataguard环境,有全库备份文件,准备去测试库恢复一下。...
  • mchdba
  • mchdba
  • 2015年02月03日 16:29
  • 7133

一次oracle数据库断电受损后的恢复过程

(一)说明:   由于客户大厦突然断电,导致保系统服务器宕机,系统无法正常使用。 (二)系统恢复过程:   1、来电后,   手工重启一台tomcat后信息管理系统恢复正常。 ...

ORACLE 11G 中采用rman备份异机恢复数据库详细过程

ORACLE 11G 中采用rman备份异机恢复数据库详细过程
  • swebin
  • swebin
  • 2017年11月26日 17:37
  • 59

一次通过bbed工具恢复ORACLE EBS 数据库的过程

克隆完,发现数据库里cux、spm、zs三个表空间对应的三个数据文件为offline状态,而且克隆过程中由于自动调用adcrdb.sh脚本,会重建了控制文件(自动生成的控制文件不包括这三个自定义的数据...

LogExplorer

  • 2017年11月20日 10:50
  • 8.44MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用LogExplorer恢复数据库过程
举报原因:
原因补充:

(最多只允许输入30个字)