1.第一步,备份数据库
D:>rman target /恢复管理器: 版本9.2.0.6.0 - ProductionCopyright (c) 1995, 2002, Oracle Corporation. All rights reserved.连接到目标数据库: EYGLE (DBID=1365961916)RMAN> backup database format='d:oradataeygle_fullbk.bak' tag='eygle';启动 backup 于 12-6月 -05正在使用目标数据库控制文件替代恢复目录分配的通道: ORA_DISK_1通道 ORA_DISK_1: sid=13 devtype=DISK通道 ORA_DISK_1: 正在启动 full 数据文件备份集通道 ORA_DISK_1: 正在指定备份集中的数据文件在备份集中包含当前的 SPFILE备份集中包括当前控制文件输入数据文件 fno=00001 name=D:ORADATAEYGLESYSTEM01.DBF输入数据文件 fno=00005 name=D:ORADATAEYGLEUNDOTBS2.DBF输入数据文件 fno=00002 name=D:ORADATAEYGLEEYGLE01.DBF通道 ORA_DISK_1: 正在启动段 1 于 12-6月 -05通道 ORA_DISK_1: 已完成段 1 于 12-6月 -05段 handle=D:ORADATAEYGLE_FULLBK.BAK comment=NONE通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:27完成 backup 于 12-6月 -05RMAN> list backup;备份集列表===================BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间------- ---- -- ---------- ----------- ------------ ----------2 Full 140M DISK 00:00:22 12-6月 -05BP 关键字: 1 状态: AVAILABLE 标记:TAG20050612T004442段名:D:ORADATAEYGLE_FULL.BAK 包含的 SPFILE: 修改时间: 04-3月 -05 备份集 2 中的数据文件列表 文件 LV 类型 Ckp SCN Ckp 时间 名称 ---- -- ---- ---------- ---------- ---- 1 Full 452236 12-6月 -05 D:ORADATAEYGLESYSTEM01.DBF 2 Full 452236 12-6月 -05 D:ORADATAEYGLEEYGLE01.DBF 5 Full 452236 12-6月 -05 D:ORADATAEYGLEUNDOTBS2.DBFBS 关键字 类型 LV 大小 设备类型 经过时间 完成时间------- ---- -- ---------- ----------- ------------ ----------4 Full 140M DISK 00:00:21 12-6月 -05BP 关键字: 2 状态: AVAILABLE 标记:EYGLE段名:D:ORADATAEYGLE_FULLBK.BAK 包含的 SPFILE: 修改时间: 04-3月 -05 备份集 4 中的数据文件列表 文件 LV 类型 Ckp SCN Ckp 时间 名称 ---- -- ---- ---------- ---------- ---- 1 Full 492975 12-6月 -05 D:ORADATAEYGLESYSTEM01.DBF 2 Full 492975 12-6月 -05 D:ORADATAEYGLEEYGLE01.DBF 5 Full 492975 12-6月 -05 D:ORADATAEYGLEUNDOTBS2.DBFRMAN> exit恢复管理器完成。
2.第二步,使用工具来破坏数据块
我们可以使用UltraEdit或者WinHex打开文件修改某个数据块,然后再保存。
3.第三步,访问损坏的数据
D:>sqlplus "/ as sysdba"SQL*Plus: Release 9.2.0.6.0 - Production size="1" color=#b0bcc2>
此时alert_.log文件中会记录损坏块。
***Corrupt block relative dba: 0x0080000e (file 2, block 14)Bad check value found during buffer readData in bad block - type: 6 format: 2 rdba: 0x0080000e last change scn: 0x0000.00078584 seq: 0x1 flg: 0x06 consistency value in tail: 0x85840601 check value in block header: 0xca4b, computed block checksum: 0x5a6 spare1: 0x0, spare2: 0x0, spare3: 0x0***Reread of rdba: 0x0080000e (file 2, block 14) found same corrupted data
4.第四步,检查坏块
你也可以使用RMAN来验证数据文件,从而发现坏块:
D:>rman target /恢复管理器: 版本9.2.0.6.0 - ProductionCopyright (c) 1995, 2002, Oracle Corporation. All rights reserved.连接到目标数据库: EYGLE (DBID=1365961916)RMAN> backup validate datafile 2;启动 backup 于 12-6月 -05正在使用目标数据库控制文件替代恢复目录分配的通道: ORA_DISK_1通道 ORA_DISK_1: sid=13 devtype=DISK通道 ORA_DISK_1: 正在启动 full 数据文件备份集通道 ORA_DISK_1: 正在指定备份集中的数据文件输入数据文件 fno=00002 name=D:ORADATAEYGLEEYGLE01.DBF通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01完成 backup 于 12-6月 -05RMAN> exit恢复管理器完成。
此时alert_.log文件中会记录RMAN发现的坏块信息:
***Corrupt block relative dba: 0x0080000e (file 2, block 14)Bad check value found during backing up datafileData in bad block - type: 6 format: 2 rdba: 0x0080000e last change scn: 0x0000.00078584 seq: 0x1 flg: 0x06 consistency value in tail: 0x85840601 check value in block header: 0xca4b, computed block checksum: 0x5a6 spare1: 0x0, spare2: 0x0, spare3: 0x0***Reread of blocknum=14, file=D:ORADATAEYGLEEYGLE01.DBF. found same corrupt data
5.第五步,查询RMAN发现的坏块信息
09:08:25 SQL> select * from v $database_block_corruption where file#=2; FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO---------- ---------- ---------- ------------------ --------- 2 14 1 0 FRACTURED已用时间: 00: 00: 00.00
6.第六步,执行恢复
D:>rman target /恢复管理器: 版本9.2.0.6.0 - ProductionCopyright (c) 1995, 2002, Oracle Corporation. All rights reserved.已连接到目标数据库 (未启动)RMAN> startup mount;Oracle 例程已启动数据库已加载系统全局区域总计 59842188 字节Fixed Size 454284 字节Variable Size 33554432 字节Database Buffers 25165824 字节Redo Buffers 667648 字节RMAN> blockrecover datafile 2 block 14 from backupset;启动 blockrecover 于 12-6月 -05正在使用目标数据库控制文件替代恢复目录分配的通道: ORA_DISK_1通道 ORA_DISK_1: sid=11 devtype=DISK通道 ORA_DISK_1: 正在恢复块通道 ORA_DISK_1: 正在指定要从备份集恢复的块正在恢复数据文件 00002 的块通道 ORA_DISK_1: 已从备份段 1 恢复块段 handle=D:ORADATAEYGLE_FULLBK.BAK tag=EYGLE params=NULL通道 ORA_DISK_1: 块恢复已完成正在开始介质的恢复完成介质的恢复完成 blockrecover 于 12-6月 -05
7.第七步,检查数据的恢复
D:>sqlplus "/ as sysdba"SQL*Plus: Release 9.2.0.6.0 - Production>这时数据已经恢复,但block corruption信息仍然记录在数据库中,直到下次validate才会清除这部分的信息: D:>rman target /恢复管理器: 版本9.2.0.6.0 - ProductionCopyright (c) 1995, 2002, Oracle Corporation. All rights reserved.连接到目标数据库: EYGLE (DBID=1365961916)RMAN> backup validate datafile 2;启动 backup 于 12-6月 -05正在使用目标数据库控制文件替代恢复目录分配的通道: ORA_DISK_1通道 ORA_DISK_1: sid=9 devtype=DISK通道 ORA_DISK_1: 正在启动 full 数据文件备份集通道 ORA_DISK_1: 正在指定备份集中的数据文件输入数据文件 fno=00002 name=D:ORADATAEYGLEEYGLE01.DBF通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01完成 backup 于 12-6月 -05RMAN>
至此,从数据库中查询,坏块信息已被清除。
09:11:22 SQL> select * from v $database_block_corruption where file#=2;未选定行已用时间: 00: 00: 00.0009:12:28 SQL>