11g新特性RMAN语法recover corruption list是为了简化数据坏块的修复,在11g中recover corruption块时不需要一一指定数据文件名字了,只要是在v$database_block_corruption视图中记录的坏块,只要使用了 corruption list语法,都会试图修复。
下面我们使用recover .. clear命令手动造成个别数据块坏块,之后使用 recover corruption list;修复:
RMAN> recover datafile 8 block 100 clear; Starting recover at 25-NOV-09 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=16 device type=DISK Finished recover at 25-NOV-09 RMAN> RMAN> validate datafile 8 block 100; Starting validate at 25-NOV-09 using channel ORA_DISK_1 channel ORA_DISK_1: starting validation of datafile channel ORA_DISK_1: specifying datafile(s) for validation input datafile file number=00008 name=+DATA/prodb/datafile/test.262.794687963 channel ORA_DISK_1: validation complete, elapsed time: 00:00:01 List of Datafiles ================= File Status Marked Corrupt Empty Blocks Blocks Examined High SCN ---- ------ -------------- ------------ --------------- ---------- 8 FAILED 0 0 1 0 File Name: +DATA/prodb/datafile/test.262.794687963 Block Type Blocks Failing Blocks Processed ---------- -------------- ---------------- Data 0 0 Index 0 0 Other 1 1 validate found one or more corrupt blocks See trace file /s01/diag/rdbms/prodb/PRODB/trace/PRODB_ora_16689.trc for details Finished validate at 25-NOV-09 Corrupt block relative dba: 0x02000064 (file 8, block 100) Bad check value found during validation Data in bad block: type: 30 format: 2 rdba: 0x02000064 last change scn: 0x0000.00185030 seq: 0x1 flg: 0x04 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0x50301e01 check value in block header: 0xcdb0 computed block checksum: 0x4db5 ksfdrfms:Mirror Read file=+DATA/prodb/datafile/test.262.794687963 fob=0xcdc3a6a0 bufp=0x7f81c5726000 blkno=100 nbytes=8192 ksfdrfms: Read success from mirror side=1 logical extent number=0 disk=DATA_0003 path=/dev/asm-disk7 Mirror I/O done from ASM disk /dev/asm-disk7 Trying mirror side DATA_0003. Reread of blocknum=100, file=+DATA/prodb/datafile/test.262.794687963. found same corrupt data ksfdrnms:Mirror Read file=+DATA/prodb/datafile/test.262.794687963 fob=0xcdc3a6a0 bufp=0x7f81c5726000 nbytes=8192 ksfdrnms: Read success from mirror side=2 logical extent number=1 disk=DATA_0002 path=/dev/asm-disk6 Mirror I/O done from ASM disk /dev/asm-disk6 Trying mirror side DATA_0002. Reread of blocknum=100, file=+DATA/prodb/datafile/test.262.794687963. found same corrupt data ksfdrnms:Mirror Read file=+DATA/prodb/datafile/test.262.794687963 fob=0xcdc3a6a0 bufp=0x7f81c5726000 nbytes=8192 ksfdrfms:Mirror Read file=+DATA/prodb/datafile/test.262.794687963 fob=0xcdc3a6a0 bufp=0x7f81c5726000 blkno=100 nbytes=8192 ksfdrfms: Read success from mirror side=1 logical extent number=0 disk=DATA_0003 path=/dev/asm-disk7 Mirror I/O done from ASM disk /dev/asm-disk7 SQL> select * from v$database_block_corruption; FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO ---------- ---------- ---------- ------------------ --------- 8 100 1 1593392 CHECKSUM RMAN> recover corruption list; Starting recover at 25-NOV-09 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=26 device type=DISK searching flashback logs for block images finished flashback log search, restored 0 blocks RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of recover command at 11/25/2009 20:17:29 RMAN-06026: some targets not found - aborting restore RMAN-06023: no backup or copy of datafile 8 found to restore RMAN-06023: no backup or copy of datafile 8 found to restore