下面来模拟一下块损坏和恢复.
RMAN> blockrecover datafile 5 block 347;
恢复后在另一个session中访问表,提示和上次访问时候的坏块就不一样了,如下:
SQL> select count(*) from test;
select count(*) from test
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 5, block # 693)
ORA-01110: data file 5: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\BUT\TEST.DBF'
在通过RMAN恢复块:
RMAN> blockrecover datafile 5 block 693;
完成后表能够被正常访问了.
在可以 用下面的命令一次恢复所有的坏块,不用像上面那样一个块一个块的恢复.
RMAN> BLOCKRECOVER CORRUPTION LIST;
RMAN的块恢复不需要将表空间offline.
RMAN的恢复是对块进行恢复,而手工恢复是数据文件的恢复.
块损坏只影响坏块所在的数据,该表没有坏块的数据仍然可以访问,其他的表更不受影响.