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