ITPub博客

首页 > Linux操作系统 > Linux操作系统 > RMAN备份恢复之BLOCKRECOVER

RMAN备份恢复之BLOCKRECOVER

原创 Linux操作系统 作者:yangtingkun 时间:2007-06-15 00:00:00 0 删除 编辑

RMAN提供了单独恢复个别BLOCK的功能,这种功能作为普通恢复方法的补充,对于恢复数据库中出现的坏块可以快速的进行恢复。


RMANBLOCKRECOVER是利用一个全备份作为基础,在此基础中应用日志,对于需要恢复的个别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_FNO4的数据文件,定位到地址为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'

现在已经模拟出坏块,可以使用RMANBLOCKRECOVER进行恢复了。不过恢复的前提是拥有这个数据文件的一个全备份,并且有这个备份以来的归档日志。

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

通过执行上面简单的命令,已经将数据文件中的坏块进行了修复,注意RMANBLOCKRECOVER在恢复的时候是不需要将数据文件置于脱机状态的。

恢复完成后,最后再次查询T3表:

SQL> SELECT COUNT(*) FROM T3;

COUNT(*)
----------
50272

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-69313/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1954
  • 访问量
    10876085