Oracle提供了许多方法检测和修补数据库中的数据坏块,而BMR就是其中之一,其它方法还包括Analyze语句、dbv命令以及DBMS_REPAIR等。DBMS_REPAIR包仅仅对transaction层和data层的坏块(即逻辑损坏的块)起作用,对物理上损坏的块,在它被读到缓冲区中时就已被标识出来了,而DBMS_REPAIR会忽略所有被标识为坏了的块。

        要快速修复物理损坏的数据块,可以通过BMR功能来完成。  块介质恢复的最大好处在于可以降低平均恢复时间 (MTTR) ,因为介质恢复的最小可恢复单位从数据文件缩小到块。如果已知数据库中只有少量的块需要介质恢复,则最有效的方式是有选择地进行还原,只恢复需要恢复的块。而且该技术提高了介质恢复期间的数据可用性,因为在数据恢复期间,数据文件可以保持联机状态,只有正在恢复的数据块是不可访问的。  使用BMR之前,需要对保护的数据进行备份。

        在执行BMR时,只需要简单地执行blockrecover命令就可以了,例如编号为4的数据文件的数据块385,386发生了损坏,进入RMAN环境,修复语句如下: 

        RMAN> BLOCKRECOVER DATAFILE 4 BLOCK 385,386;

        如果损坏的数据块较多,或者不清楚哪些数据块发生了损坏,也可以通过以下方法获得损坏信息。

        RMAN> backup validate tablespace users;

        上述操作会更新动态性能视图V$DATABASE_BLOCK_CORRUPTION,查询该视图可以获取数据块损坏的信息。

        SQL> select * from v$database_block_corruption;

        修复查询到的损坏的数据块,命令如下:

        RMAN> blockrecover corruption list;

         这样凡是记录在动态性能视图v$database_block_corruption中的损坏的块就得到了修复。