环境:
sys@EMREP> select * from v$version where rownum=1; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod sys@EMREP> !uname -a Linux localhost.localdomain 2.6.18-308.el5xen #1 SMP Fri Jan 27 17:59:00 EST 2012 i686 i686 i386 GNU/Linux
之前有个坏块63,所以dbv校验时有2个坏块,所以rman备份时要设坏块容忍哈,比较懒的,所以....
① 实验准备
RMAN> run { 2> set maxcorrupt for datafile 4 to 1; 3> backup tablespace users; 4> } executing command: SET MAX CORRUPT Starting backup at 17-DEC-12 using channel ORA_DISK_1 channel ORA_DISK_1: starting full datafile backupset channel ORA_DISK_1: specifying datafile(s) in backupset input datafile fno=00004 name=/u01/app/oracle/oradata/emrep/users01.dbf channel ORA_DISK_1: starting piece 1 at 17-DEC-12 channel ORA_DISK_1: finished piece 1 at 17-DEC-12 piece handle=/u01/app/oracle/flash_recovery_area/EMREP/backupset/2012_12_17/o1_mf_nnndf_TAG20121217T205237_8dy5dor3_.bkp tag=TAG20121217T205237 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01 Finished backup at 17-DEC-12 u1@EMREP> select t2.*,dbms_rowid.rowid_block_number(rowid) from t2; B DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) ---------- ------------------------------------ 1 71 3 71
② BBED模拟坏块
BBED> set file 4 FILE# 4 BBED> modify 1000 file 4 block 71 File: /u01/app/oracle/oradata/emrep/users01.dbf (4) Block: 71 Offsets: 0 to 511 Dba:0x01000047 ------------------------------------------------------------------------ 03e80000 47000001 a63e0400 00000406 454c0000 01000000 3d290000 993e0400 00000000 02003200 41000001 09001400 7e000000 ba008000 48001a00 02200000 a63e0400 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00010200 ffff1600 8c1f701f 701f0000 0200921f 8c1f0000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <32 bytes per line> BBED> verify DBVERIFY - Verification starting FILE = /u01/app/oracle/oradata/emrep/users01.dbf BLOCK = 71 Block 71 is corrupt Corrupt block relative dba: 0x01000047 (file 0, block 71) Bad header found during verification Data in bad block: type: 3 format: 0 rdba: 0x01000047 last change scn: 0x0000.00043ea6 seq: 0x4 flg: 0x06 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0x3ea60604 check value in block header: 0x4c45 computed block checksum: 0x4a05 DBVERIFY - Verification complete Total Blocks Examined : 1 Total Blocks Processed (Data) : 0 Total Blocks Failing (Data) : 0 Total Blocks Processed (Index): 0 Total Blocks Failing (Index): 0 Total Blocks Empty : 0 Total Blocks Marked Corrupt : 1 Total Blocks Influx : 0
③ SQLPLUS 检查
u1@EMREP> conn / as sysdba Connected. sys@EMREP> startup force; ORACLE instance started. Total System Global Area 524288000 bytes Fixed Size 1220384 bytes Variable Size 247464160 bytes Database Buffers 272629760 bytes Redo Buffers 2973696 bytes Database mounted. Database opened. sys@EMREP> conn u1/u1 Connected. u1@EMREP> select * from t2; select * from t2 * ERROR at line 1: ORA-01578: ORACLE data block corrupted (file # 4, block # 71) ORA-01110: data file 4: '/u01/app/oracle/oradata/emrep/users01.dbf'
④ DBV再次确认
[oracle@localhost ~]$ dbv file=/u01/app/oracle/oradata/emrep/users01.dbf DBVERIFY: Release 10.2.0.1.0 - Production on Mon Dec 17 21:00:48 2012 Copyright (c) 1982, 2005, Oracle. All rights reserved. DBVERIFY - Verification starting : FILE = /u01/app/oracle/oradata/emrep/users01.dbf Page 63 is marked corrupt Corrupt block relative dba: 0x0100003f (file 4, block 63) Bad header found during dbv: Data in bad block: type: 3 format: 0 rdba: 0x0100003f last change scn: 0x0000.00050c11 seq: 0x1 flg: 0x06 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0x0c110601 check value in block header: 0xd375 computed block checksum: 0x4a05 Page 71 is marked corrupt Corrupt block relative dba: 0x01000047 (file 4, block 71) Bad header found during dbv: Data in bad block: type: 3 format: 0 rdba: 0x01000047 last change scn: 0x0000.00043ea6 seq: 0x4 flg: 0x06 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0x3ea60604 check value in block header: 0x4c45 computed block checksum: 0x4a05 DBVERIFY - Verification complete Total Pages Examined : 640 Total Pages Processed (Data) : 39 Total Pages Failing (Data) : 0 Total Pages Processed (Index): 6 Total Pages Failing (Index): 0 Total Pages Processed (Other): 45 Total Pages Processed (Seg) : 0 Total Pages Failing (Seg) : 0 Total Pages Empty : 548 Total Pages Marked Corrupt : 2 Total Pages Influx : 0 Highest block SCN : 330790 (0.330790)
⑤ RMAN修复
RMAN> blockrecover datafile 4 block 71; Starting blockrecover at 17-DEC-12 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=538 devtype=DISK channel ORA_DISK_1: restoring block(s) channel ORA_DISK_1: specifying block(s) to restore from backup set restoring blocks of datafile 00004 channel ORA_DISK_1: reading from backup piece /u01/app/oracle/flash_recovery_area/EMREP/backupset/2012_12_17/o1_mf_nnndf_TAG20121217T205237_8dy5dor3_.bkp channel ORA_DISK_1: restored block(s) from backup piece 1 piece handle=/u01/app/oracle/flash_recovery_area/EMREP/backupset/2012_12_17/o1_mf_nnndf_TAG20121217T205237_8dy5dor3_.bkp tag=TAG20121217T205237 channel ORA_DISK_1: block restore complete, elapsed time: 00:00:02 starting media recovery media recovery complete, elapsed time: 00:00:07 Finished blockrecover at 17-DEC-12
⑥ 数据验证:
sys@EMREP> conn u1/u1 Connected. u1@EMREP> select * from t2; B ---------- 1 3
⑦ 注意事项:
BLOCKRECOVER DATAFILE 9 BLOCK 13 DATAFILE 2 BLOCK 19 RESTORE UNTIL SCN 100;
BLOCKRECOVER语句中的UNTIL关键字不是表示不完全恢复
UNTIL的意思是指从特定的日期或SCN之前生成的备份中还原数据块(restore)
还原完成后还会应用与数据块相关的重做日志(recover)
⑧ 附上OCP-043考题