使用ODU恢复9208数据库一例

某客户的9208数据库出现故障,alert的呈现的是如下信息:
Wed Oct 19 08:30:36 2011
Thread 1 advanced to log sequence 3055
  Current log# 3 seq# 3055 mem# 0: /oracle/oradata/ncdb/redo03.log
Wed Oct 19 12:46:57 2011
Thread 1 advanced to log sequence 3056
  Current log# 1 seq# 3056 mem# 0: /oracle/oradata/ncdb/redo01.log
Wed Oct 19 16:16:23 2011
Errors in file /opt/oracle/admin/ncdb/udump/ncdb_ora_8178.trc:
ORA-00603: ORACLE server session terminated by fatal error
ORA-01115: IO error reading block from file 13 (block # 621195)
ORA-01110: data file 13: '/oracle/oradata/ncdb/NNC_DATA03.dbf'
ORA-27091: skgfqio: unable to queue I/O
ORA-27072: skgfdisp: I/O error
Linux-x86_64 Error: 5: Input/output error
Additional information: 621194
ORA-01115: IO error reading block from file 13 (block # 621195)
ORA-01110: data file 13: '/oracle/oradata/ncdb/NNC_DATA03.dbf'
ORA-27091: skgfqio: unable to queue I/O
ORA-27072: skgfdisp: I/O error
Linux-x86_64 Error: 5: Input/output error
Additional information: 621194
Wed Oct 19 16:17:23 2011
Errors in file /opt/oracle/admin/ncdb/udump/ncdb_ora_9804.trc:
ORA-00603: ORACLE server session terminated by fatal error
ORA-01115: IO error reading block from file 13 (block # 621195)
ORA-01110: data file 13: '/oracle/oradata/ncdb/NNC_DATA03.dbf'
ORA-27091: skgfqio: unable to queue I/O
ORA-27072: skgfdisp: I/O error
Linux-x86_64 Error: 5: Input/output error
Additional information: 621194
ORA-01115: IO error reading block from file 13 (block # 621195)
ORA-01110: data file 13: '/oracle/oradata/ncdb/NNC_DATA03.dbf'
ORA-27091: skgfqio: unable to queue I/O
ORA-27072: skgfdisp: I/O error
Linux-x86_64 Error: 5: Input/output error
Additional information: 621194
Wed Oct 19 16:18:42 2011
Errors in file /opt/oracle/admin/ncdb/udump/ncdb_ora_1713.trc:
ORA-00603: ORACLE server session terminated by fatal error
ORA-01115: IO error reading block from file 13 (block # 621195)
ORA-01110: data file 13: '/oracle/oradata/ncdb/NNC_DATA03.dbf'
ORA-27091: skgfqio: unable to queue I/O
ORA-27072: skgfdisp: I/O error
Linux-x86_64 Error: 5: Input/output error
Additional information: 621194
ORA-01115: IO error reading block from file 13 (block # 621195)
ORA-01110: data file 13: '/oracle/oradata/ncdb/NNC_DATA03.dbf'
ORA-27091: skgfqio: unable to queue I/O
ORA-27072: skgfdisp: I/O error
Linux-x86_64 Error: 5: Input/output error
Additional information: 621194
Wed Oct 19 22:40:35 2011
KCF: write/open error block=0x3b6a online=1
     file=2 /oracle/oradata/ncdb/undotbs01.dbf
     error=27072 txt: 'Linux-x86_64 Error: 5: Input/output error
Additional information: 15209'
Wed Oct 19 22:40:35 2011
Errors in file /opt/oracle/admin/ncdb/bdump/ncdb_dbw4_8141.trc:
ORA-01242: data file suffered media failure: database in NOARCHIVELOG mode
ORA-01114: IO error writing block to file 2 (block # 15210)
ORA-01110: data file 2: '/oracle/oradata/ncdb/undotbs01.dbf'
ORA-27072: skgfdisp: I/O error
Linux-x86_64 Error: 5: Input/output error
Additional information: 15209
DBW4: terminating instance due to error 1242
Instance terminated by DBW4, pid = 8141
Thu Oct 20 07:21:54 2011
Starting ORACLE instance (normal)
LICENSE_MAX_SESSION = 0
LICENSE_SESSIONS_WARNING = 0
SCN scheme 3
Using log_archive_dest parameter default value
LICENSE_MAX_USERS = 0
SYS auditing is disabled
Starting up ORACLE RDBMS Version: 9.2.0.8.0.
System parameters with non-default values:
从其中一个trace,还能找到如下信息:
Corrupt block relative dba: 0x00000001 (file 0, block 1)
Fractured block found during control file header read
Data in bad block -
 type: 21 format: 2 rdba: 0x00000001
 last change scn: 0xffff.000029de seq: 0x1 flg: 0x04
 consistency value in tail: 0x2a141501
 check value in block header: 0x25ac, computed block checksum: 0x3ca
 spare1: 0x0, spare2: 0x0, spare3: 0x0
***
很明显,file header出现坏块了。
通过dbv检查发现有数千个坏块,由于该环境无备份,且虽然是归档模式,
但是未启动自动归档,以至于多方人马进行恢复,终以失败而告终。

最后通过老熊的ODU进行了数据的抽取恢复,这里简单的说明一下注意事项:

1. 要注意control.txt的配置,output_format可以设置为txt或dmp两种形式,
   如果是txt,那么抽取以后的数据我们需要使用sqlldr进行加载,如果是dmp格式
   当然就使用imp导入即可(导入时注意字符集);

2. 注意字节序的问题,根据平台设置byte_order

3. 其他参数,也需要根据实际情况进行修改,比如compatible,db_block_checksum
   需要注意的是,db_block_checksum设置为true,将会去检查block中的checksum值
   这里说明一下的是oracle是根据异或算法将计算的值写入到block的第16,17位置。
   相对来说设置为true在速度上有一微小的差异。

通过这次恢复,也感受到了ODU的强悍,大家可以去这里下载 http://www.oracleodu.com/cn/


评论

  1. 写的太简洁了

  2. 有付版权费不,哈哈,开个玩笑

  3. 博主太有才了!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注