近日,恩墨科技接到某企业的求助请求,因为硬盘故障,导致数据库崩溃,请求协助恢复数据。我们检查用户的数据库环境,发现虽然RAID 5的硬盘已经恢复,但是发现数据文件遭到了损坏,出现了坏块,在数据库的日志中,报出以下异常:
Fri Jul 3 15:58:16 2009进一步的恢复过程中,数据库出现如下错误:
Started recovery at
Thread 1: logseq 10551, block 80880, scn 0.0
Recovery of Online Redo Log: Thread 1 Group 3 Seq 10551 Reading mem 0
Mem# 0 errs 0: /opt/oracle/oradata/erpdb/redo03.log
***
Corrupt block relative dba: 0x06428528 (file 125, block 165160)
Fractured block found during crash/instance recovery
Data in bad block -
type: 6 format: 2 rdba: 0x06428528
last change scn: 0x0000.8f325e2e seq: 0x1 flg: 0x06
consistency value in tail: 0x47a20601
check value in block header: 0x24c3, computed block checksum: 0x198f
spare1: 0x0, spare2: 0x0, spare3: 0x0
***
Reread of rdba: 0x06428528 (file 125, block 165160) found same corrupted data
Fri Jul 3 15:58:16 2009一系列的ORA-07445错误表明数据库遇到了大麻烦,当尝试进行Recover的过程中,ORA-00607表明出现了数据块的不一致。
Errors in file /opt/oracle/admin/erpdb/udump/erpdb_ora_4759.trc:
ORA-07445: exception encountered: core dump [ksmfrs()+227] [SIGSEGV] [unknown code] [0x000000000] [] []
Fri Jul 3 15:58:17 2009
Errors in file /opt/oracle/admin/erpdb/udump/erpdb_ora_4759.trc:
ORA-07445: exception encountered: core dump [ksmerr()+106] [SIGSEGV] [unknown code] [0x000000000] [] []
ORA-00607: Internal error occurred while making a change to a data block
ORA-00602: internal programming exception
ORA-07445: exception encountered: core dump [ksmfrs()+227] [SIGSEGV] [unknown code] [0x000000000] [] []
由于没有备份,恢复起来就比较麻烦,所以我仍然想说的是:备份重于一切。
由于数据块出现了损坏,其中的数据不可避免的遭到了损失,我们可以通过BBED等工具修复数据块,虽然可以骗过数据库,强制启动数据库,但是无法骗过自己,其中的数据难免遭到损失。
当然我们可以做的另外一件事是通过LOGMNR来解析日志,通过SQL_REDO来还原部分数据,找出受到影响的事务,恢复数据。
最终我们帮助用户成功的启动数据库,在业务生产到来之前恢复了服务。
-The End-
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




