RMAN备份恢复之BLOCKRECOVER
2009-10-20 10:16
211 查看
RMAN提供了单独恢复个别BLOCK的功能,这种功能作为普通恢复方法的补充,对于恢复数据库中出现的坏块可以快速的进行恢复。
RMAN的BLOCKRECOVER是利用一个全备份作为基础,在此基础中应用日志,对于需要恢复的个别BLOCK进行恢复。
下面演示一个BLOCKRECOVER的简单例子,首先是构造一个坏块,最简单的办法莫过于UltraEdit了。
SQL> SELECT COUNT(*) FROM T3;
COUNT(*)
----------
50272
SQL> SELECT DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID), DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) FROM T3 WHERE ROWNUM = 1;
DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
------------------------------------ ------------------------------------
4 40
SQL> SHOW PARAMETER BLOCK_SIZE
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 16384
计算一下表T3在文件中的偏移地址:
SQL> SELECT 16*1024*40 FROM DUAL;
16*1024*40
----------
655360
SQL> SELECT TO_CHAR(655360, 'XXXXXX') FROM DUAL;
TO_CHAR
-------
A0000
用UltraEdit打开RELATIVE_FNO为4的数据文件,定位到地址为A0000位置,在后面修改几个值,保存后,再次查询T3表:
SQL> SELECT COUNT(*) FROM T3;
SELECT COUNT(*) FROM T3
*第 1 行出现错误:
ORA-01578: ORACLE 数据块损坏 (文件号 4, 块号 40)
ORA-01110: 数据文件 4: 'E:ORACLEORADATAYTKDATAFILEO1_MF_USERS_1TDY4JMK_.DBF'
现在已经模拟出坏块,可以使用RMAN的BLOCKRECOVER进行恢复了。不过恢复的前提是拥有这个数据文件的一个全备份,并且有这个备份以来的归档日志。
RMAN> BLOCKRECOVER DATAFILE 4 BLOCK 40;
启动 blockrecover 于 15-6月 -07分配的通道: ORA_DISK_1通道 ORA_DISK_1: sid=157 devtype=DISK
通道 ORA_DISK_1: 正在从数据文件副本 E:ORACLEBACKUPUSERS.DBF 复原块
正在开始介质的恢复介质恢复完成, 用时: 00:00:07
完成 blockrecover 于 15-6月 -07
通过执行上面简单的命令,已经将数据文件中的坏块进行了修复,注意RMAN的BLOCKRECOVER在恢复的时候是不需要将数据文件置于脱机状态的。
恢复完成后,最后再次查询T3表:
SQL> SELECT COUNT(*) FROM T3;
COUNT(*)
----------
50272
出自:http://yangtingkun.itpub.net/post/468/295124
RMAN的BLOCKRECOVER是利用一个全备份作为基础,在此基础中应用日志,对于需要恢复的个别BLOCK进行恢复。
下面演示一个BLOCKRECOVER的简单例子,首先是构造一个坏块,最简单的办法莫过于UltraEdit了。
SQL> SELECT COUNT(*) FROM T3;
COUNT(*)
----------
50272
SQL> SELECT DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID), DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) FROM T3 WHERE ROWNUM = 1;
DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
------------------------------------ ------------------------------------
4 40
SQL> SHOW PARAMETER BLOCK_SIZE
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 16384
计算一下表T3在文件中的偏移地址:
SQL> SELECT 16*1024*40 FROM DUAL;
16*1024*40
----------
655360
SQL> SELECT TO_CHAR(655360, 'XXXXXX') FROM DUAL;
TO_CHAR
-------
A0000
用UltraEdit打开RELATIVE_FNO为4的数据文件,定位到地址为A0000位置,在后面修改几个值,保存后,再次查询T3表:
SQL> SELECT COUNT(*) FROM T3;
SELECT COUNT(*) FROM T3
*第 1 行出现错误:
ORA-01578: ORACLE 数据块损坏 (文件号 4, 块号 40)
ORA-01110: 数据文件 4: 'E:ORACLEORADATAYTKDATAFILEO1_MF_USERS_1TDY4JMK_.DBF'
现在已经模拟出坏块,可以使用RMAN的BLOCKRECOVER进行恢复了。不过恢复的前提是拥有这个数据文件的一个全备份,并且有这个备份以来的归档日志。
RMAN> BLOCKRECOVER DATAFILE 4 BLOCK 40;
启动 blockrecover 于 15-6月 -07分配的通道: ORA_DISK_1通道 ORA_DISK_1: sid=157 devtype=DISK
通道 ORA_DISK_1: 正在从数据文件副本 E:ORACLEBACKUPUSERS.DBF 复原块
正在开始介质的恢复介质恢复完成, 用时: 00:00:07
完成 blockrecover 于 15-6月 -07
通过执行上面简单的命令,已经将数据文件中的坏块进行了修复,注意RMAN的BLOCKRECOVER在恢复的时候是不需要将数据文件置于脱机状态的。
恢复完成后,最后再次查询T3表:
SQL> SELECT COUNT(*) FROM T3;
COUNT(*)
----------
50272
出自:http://yangtingkun.itpub.net/post/468/295124
相关文章推荐
- RMAN备份恢复之BLOCKRECOVER
- RMAN备份恢复之BLOCKRECOVER
- RMAN备份恢复之归档日志对BLOCKRECOVER的影响
- RMAN备份恢复之BLOCKRECOVER
- RMAN备份与恢复之可脱机数据文件丢失
- RMAN备份与恢复之UNDO表空间丢失
- oracle备份恢复之rman恢复到异机
- Oracle9i rman备份恢复总结
- 使用RMAN恢复RAC备份到单实例
- rman备份数据库后到另一台机器上恢复
- Rman全备份不完全恢复数据库(linux下)
- RMAN - 备份与恢复实践
- Oracle10g RMAN备份异机恢复过程
- ORACLE11g 没有控制文件如何通过rman备份恢复数据的详细实战过程
- rman实验之归档模式有备份,正常关机丢失控制文件的恢复
- RMAN - 备份与恢复实践
- 深入oracle 12c数据库备份与恢复(优化RMAN性能、Oracle flashback技术)
- Oracle10g数据库备份与恢复总结5--Oracle备份与恢复之物理备份--Rman备份
- rman进行备份、恢复
- rman备份恢复总结