天天看点

BMR(Block Media Recovery)

BMR(Block Media Recovery)

转载自 http://hi.baidu.com/justay/blog/item/f9f71b586871b1272934f02c.html

BMR(Block Media Recovery)

关于RMAN的块恢复。Block是oracle数据库最小恢复单位。鉴于此,BMR可以大大缩短恢复的时间,另外,在进行BMR时不需要停掉数据库,可以直接在数据库open状态对数据文件进行恢复,只是需要恢复的块被锁定无法访问,可以说对应用的影响非常小。

何时需要进行BMR?

Block media recovery 不适合用在丢失数据的起点的情况,比如数据文件丢失了,这种情况下做数据文件的介质恢复会是最好的选择。BMR并不是用来取代传统方法的,而是有益的补充。

大多数情况下,数据库将一个block打上坏块的标记,那么对整个数据库来说这个块都是不可以用的,数据库会offline该坏块,阻止用户对该块进行访问。而在随后对该块的读取都会出现错误,大部分会报I/O错误,直到该坏块被修复。这个时候你只能使用BMR对坏块进行修复(之所以说你只能是因为你的数据库不能因为这个而停止服务)。一般我们会在以下文件中发现坏块报告:

1.Error messages in standard output;

2.Alert.log文件中

3.用户的trace文件

4.在使用 analyze table 和 analyze index时可能会出现

5.在使用 dbverify工具对数据文件进行检查时

6.第三方的介质管理软件中

以下是user trace文件中出现的坏块错误:

ORA-01578: ORACLE data block corrupted (file # 7, block # 3)

ORA-01110: data file 7: '/oracle/oradata/trgt/tools01.dbf'

ORA-01578: ORACLE data block corrupted (file # 2, block # 235)

ORA-01110: data file 2: '/oracle/oradata/trgt/undotbs01.dbf'

一旦发现有坏块的存在,就可以使用blockrecover对坏块进行恢复

Blockrecover 

datafile 7 block 3

datafile 2 block 235;

Blockrecover是基于redo的,如果在恢复时,发现找不到redo,则恢复不一定会成功。这里说不一定是因为在 blockrecover过程中,所有的block在blockrecover过程中都是独立的,不会去与其他文件的文件进行比较的,所以 blockrecover都是成功的。但在blockrecover之后,RMAN会将进行后续的检查工作,这个时候,如果RMAN发现该块的ckp与其他不一致,则rman会自动查找相关的redo,如果该block有被format过,那么则会主动忽略丢失的redo,则恢复成功,如果不是这样则会恢复失败。

BMR(Block Media Recovery)

继续阅读