1.创建测试表
SQL> create tablespace tb1 datafile 'E:\oracle\product\10.2.0\oradata\orcl\tb101.dbf' size 5m;
表空间已创建。
SQL> create table tb1 tablespace tb1 as select * from t_t1;
表已创建。
SQL> select count(*)from tb1;
COUNT(*)
----------
40741
2.rman全库备份
RMAN> backup as compressed backupset database format 'C:\oracle\%U';
启动 backup 于 13-12月-14
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动压缩的全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00001 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
输入数据文件 fno=00003 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
输入数据文件 fno=00004 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
输入数据文件 fno=00005 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST01.DBF
输入数据文件 fno=00002 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
输入数据文件 fno=00007 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST_UNIFORM01.DBF
输入数据文件 fno=00008 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS02.DBF
输入数据文件 fno=00009 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TB01.DBF
输入数据文件 fno=00011 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TB101.DBF
输入数据文件 fno=00010 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\MY_UNDO01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 13-12月-14
通道 ORA_DISK_1: 已完成段 1 于 13-12月-14
段句柄=C:\ORACLE\06PQ2J9L_1_1 标记=TAG20141213T133756 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:55
通道 ORA_DISK_1: 启动压缩的全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括当前控制文件
在备份集中包含当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 13-12月-14
通道 ORA_DISK_1: 已完成段 1 于 13-12月-14
段句柄=C:\ORACLE\07PQ2JBC_1_1 标记=TAG20141213T133756 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 13-12月-14
3.关闭数据库,模拟数据块损坏
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
用flexhex损坏数据文件
4.打开数据库
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 104858980 bytes
Database Buffers 58720256 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
数据库已经打开。
数据库正常能打开,查询时出现块损坏
SQL> select count(*)from tb1;
select count(*)from tb1
*
第 1 行出现错误:
ORA-01578: ORACLE 数据块损坏 (文件号 11, 块号 71)
ORA-01110: 数据文件 11: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TB101.DBF'
5.使用dbv对数据文件做检测
E:\oracle\product\10.2.0\oradata\orcl>dbv file=tb101.dbf blocksize=8192
DBVERIFY: Release 10.2.0.1.0 - Production on 星期六 12月 13 14:12:41 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
DBVERIFY - 开始验证: FILE = tb101.dbf
页 71 标记为损坏
Corrupt block relative dba: 0x02c00047 (file 11, block 71)
Bad check value found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x02c00047
last change scn: 0x0000.00178a9c seq: 0x1 flg: 0x04
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0x8a9c0601
check value in block header: 0x921
computed block checksum: 0x59
DBVERIFY - 验证完成
检查的页总数: 640
处理的页总数 (数据): 62
失败的页总数 (数据): 0
处理的页总数 (索引): 0
失败的页总数 (索引): 0
处理的页总数 (其它): 15
处理的总页数 (段) : 0
失败的总页数 (段) : 0
空的页总数: 562
标记为损坏的总页数: 1
流入的页总数: 0
最高块 SCN : 1542814 (0.1542814)
有1个块损坏,71
6.对数据库中的坏块进行验证
SQL> select * from v$database_block_corruption;
未选定行
RMAN> backup validate database;
启动 backup 于 13-12月-14
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=142 devtype=DISK
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00001 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
输入数据文件 fno=00003 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
输入数据文件 fno=00004 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
输入数据文件 fno=00005 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST01.DBF
输入数据文件 fno=00002 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
输入数据文件 fno=00007 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST_UNIFORM01.DBF
输入数据文件 fno=00008 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS02.DBF
输入数据文件 fno=00009 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TB01.DBF
输入数据文件 fno=00011 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TB101.DBF
输入数据文件 fno=00010 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\MY_UNDO01.DBF
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:35
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括当前控制文件
在备份集中包含当前的 SPFILE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:02
完成 backup 于 13-12月-14
刚才那些坏块都被列入到了视图V$DATABASE_BLOCK_CORRUPTION中。
SQL> select * from v$database_block_corruption;
FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
11 71 1 0 CHECKSUM
7.使用blockrecover恢复
RMAN> blockrecover datafile 11 block 71;
启动 blockrecover 于 13-12月-14
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在恢复块
通道 ORA_DISK_1: 正在指定要从备份集恢复的块
正在恢复数据文件 00011 的块
通道 ORA_DISK_1: 正在读取备份段 C:\ORACLE\06PQ2J9L_1_1
通道 ORA_DISK_1: 已从备份段 1 恢复块
段句柄 = C:\ORACLE\06PQ2J9L_1_1 标记 = TAG20141213T133756
通道 ORA_DISK_1: 块恢复完成, 用时: 00:00:04
正在开始介质的恢复
介质恢复完成, 用时: 00:00:07
完成 blockrecover 于 13-12月-14
还可以通过RMAN> blockrecover corruption list进行块的恢复,这是在大量块损坏时或全部块损坏时使用,
前提是先执行RMAN>backup validate database,在V$DATABASE_BLOCK_CORRUPTION里有对应的坏块的列表。
8.恢复完成后,进行验证
E:\oracle\product\10.2.0\oradata\orcl>dbv file=tb101.dbf blocksize=8192
DBVERIFY: Release 10.2.0.1.0 - Production on 星期六 12月 13 14:23:05 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
DBVERIFY - 开始验证: FILE = tb101.dbf
DBVERIFY - 验证完成
检查的页总数: 640
处理的页总数 (数据): 63
失败的页总数 (数据): 0
处理的页总数 (索引): 0
失败的页总数 (索引): 0
处理的页总数 (其它): 15
处理的总页数 (段) : 0
失败的总页数 (段) : 0
空的页总数: 562
标记为损坏的总页数: 0
流入的页总数: 0
最高块 SCN : 1542814 (0.1542814)
没有显示坏块
SQL> select count(*)from tb1;
COUNT(*)
----------
40741
恢复成功
坏介质恢复优点:
?Lowers the Mean Time to Recovery (MTTR) because only blocks needing recovery are restored and only necessary corrupt blocks undergo recovery. Block media recovery minimizes redo application time and avoids I/O overhead during recovery.
?Allows affected datafiles to remain online during recovery of the blocks. Without block-level recovery, if even a single block is corrupt, then you must restore a backup of the entire datafile and apply all redo generated for that file after the backup was created.
坏介质恢复要求:
?You can only perform block media recovery with RMAN. No SQL*Plus recovery interface is available.
?You can only perform complete recovery of individual blocks. In other words, you cannot stop recovery before all redo has been applied to the block.
?You can only recover blocks marked media corrupt. The V$DATABASE_BLOCK_CORRUPTION view indicates which blocks in a file were marked corrupt since the most recent BACKUP or BACKUP ... VALIDATE command was run against the file.
?You must have a full RMAN backup. Incremental backups are not used by block media recovery. Proxy backups are also not used by block media recovery. Only full backups and archived log files are used.
?Block media recovery is able to restore blocks from parent incarnation backups and recover the corrupted blocks through a RESETLOGS.
?Blocks that are marked media corrupt are not accessible to users until recovery is complete. Any attempt to use a block undergoing media recovery results in an error message indicating that the block is media corrupt.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26937943/viewspace-1366602/
,如需转载,请注明出处,否则将追究法律责任。