【转】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,则恢复成功,如果不是这样则会恢复失败。
相关文章
- Objective-C Block语法递归函数实现
- Verilog中的specify block和timing check
- [uart]设置linux 串口的block方式
- display:inline-block 在IE6中实现{转}
- whether logo retrieval will block the application
- SAP WebClient UI overview页面里assignment block的可见性分析技巧
- how to enable customer product ID assignment block
- iOS block截获变量
- block的循环引用(weak-strong dance)
- 成功解决python中出现的IndentationError: expected an indented block的错误
- 初探swift语言的学习笔记十(block)
- 如何改变vim中的光标形状 : 在插入状态下显示为 beam?而在 其他 状态下 为 block?
- Verilog generate block
- cocos2dx游戏开发——别踩白块学习笔记(一)——Block类
- NASNet学习笔记—— 核心一:延续NAS论文的核心机制使得能够自动产生网络结构; 核心二:采用resnet和Inception重复使用block结构思想; 核心三:利用迁移学习将生成的网络迁移到大数据集上提出一个new search space。
- Block pool ID needed, but service not yet registered with NN, trace