本文主要对RMAN块级别介质恢复进行解释并举例,以帮助大家理解相应概念并灵活使用
块级别介质恢复(Block-Level Media Recovery)
注意: 此恢复无法对数据文件块头(第一个块)进行恢复。
- 块级别介质恢复对于仅需要介质恢复很小部分数据文件块的场景来说非常好用。
- 在Oracle 9i之前,如果单个块需要进行恢复的话,DBA需要将整个数据文件恢复出来并应用所有之后的redo记录。
- 块级别介质恢复极大降低了从备份恢复块的时间,仅需针对坏块部分进行备份恢复和redo应用即可。
- 在进行数据块介质恢复的过程中,由于是坏块,所以对查询和DML来说这些块是无法访问的,不过数据文件仍能保持online状态。不过,相比文件级别恢复来说这已经极大地提升了可用性。仅是正被修复的块对用户不可见而已,恢复完成后即可访问了。
RMAN命令接口
- RMAN通过BLOCKRECOVER命令支持BMR恢复
BLOCKRECOVER bmr_block_specifier_list bmr_option_list;
bmr_block_specifier_list: bmr_block_specifier |
bmr_block_specifier_list bmr_block_specifier
bmr_block_specifier: DATAFILE datafile_specifier BLOCK block_list |
TABLESPACE tablespace_specifier DBA dba_list
CORRUPTION LIST
datafile_specifier: text_string | integer
block_list: integer |
block_list , integer
tablespace_specifier: text_string
dba_list: integer |
dba_list , integer
bmr_option_list: bmr_option |
bmr_option_list | bmr_option
bmr_option: from backupset |
from datafilecopy |
from tag text_string |
restore until time_clause |
nofileupdate |
save final blocks |
save all blocks
time_clause: TIME date_string |
SCN integer |
LOGSEQ integer THREAD integer
命令块恢复可以指定从哪个备份中进行恢复。如果用户在之前从没用过RMAN,而他们仅有的备份是直接用的镜像copy备份。
那么他们应该使用catalog datafilecopy命令先将这些文件注册到RMAN中,然后再使用blockrecover命令。
而catalog archivelog命令也同样需要在指定并注册归档日志时使用。
在用户之前并未用过RMAN的情况下,这些步骤是非常有必要的。
% rman target /
RMAN> catalog datafilecopy '<name>';
catalog archivelog '<name>';
See also :
相关可查文档可参考
Note 342972.1 HOW TO PERFORM BLOCK MEDIA RECOVERY (BMR) WHEN BACKUPS ARE NOT TAKEN BY RMAN
如果用户的备份或归档日志需要从磁带上进行恢复,那么就需要在进行blockrecover命令前分配好管道(channel)。
对于BMR需要的归档日志可以并行在多个管道上运行,不过所有运行的数据文件/备份集扫描和恢复会话都必须运行在同一个系统会话上。
为了可以在块修复时对备份源做选择,blockrecover在命令中支持以下命令项:
- FROM BACKUPSET -- 从备份集中恢复块
- FROM DATAFILECOPY -- 仅从数据文件拷贝中恢复块
- FROM TAG -- 从打了标签的备份中恢复块
- RESTORE UNTIL TIME|SCN|LOGSEQ -- 限定找在某个时间点之前的备份
从Oracle 9.0.1开始,就有V$DA