校验
RMAN> validate datafile 75;
发现坏块:
SQL> select * from v$database_block_corruption;
确认对象
select tablespace_name,segment_type,owner,segment_name
from dba_extents where file_id=75 and 93642
between block_id AND block_id + blocks - 1;
修复单个坏块:
RMAN>recover datafile 6 block 210,4740;
修复多个坏块:
recover corruption list;
修复方法2:
#可以使用10231事件忽略坏块,然后使用CTAS方式重建表最后rename table,别忘记rebuild index
alter session SET EVENTS '10231 trace name context forever,level 10';
create table tab_new as select * from tab;
rename tab to tab_bak;
rename tab_new to new;
alter index indexname rebuild;
alter session SET EVENTS '10231 trace name context off';
修复方法3:
alter session set db_file_multiblock_read_count=1;
execute DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('JAMES','DEPT');
create table dept_new as select * from dept;
----------------
NOLOGGING 导致的坏块不会导致 RMAN 备份失败,一般来说 soft corrupt block 不会导致 RMAN 备份失败,不需要设置 MAXCORRUPT。数据库备份中就会含有 soft corrupt block,如果使用这些备份恢复数据,那么恢复的数据也含有 soft corrupt block。
NOLOGGING 操作引起的坏块是不能修复的,比如"Media Recovery" 或 "RMAN blockrecover"都无法修复这种坏块。可行的方法是在 NOLOGGING 操作之后立刻备份对应的数据文件。
对于逻辑坏块(表或索引设置了nologging属性后,进行了nologging操作,恢复文件后再访问这些块就提示ORA-26040),在12.2以上版本中,需要用以下方法
RMAN> validate database nonlogged block;
然后可以检查alert.log会提示逻辑坏块
查询视图 v$nonlogged_block
参考:
ORA-1578 / ORA-26040 - NOLOGGING 操作引起的坏块 - 错误解释和解决方案 (Doc ID 1623284.1)
阅读(788) | 评论(0) | 转发(0) |