Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3693442
  • 博文数量: 715
  • 博客积分: 1860
  • 博客等级: 上尉
  • 技术积分: 7745
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-07 08:51
个人简介

偶尔有空上来看看

文章分类

全部博文(715)

文章存档

2023年(75)

2022年(134)

2021年(238)

2020年(115)

2019年(11)

2018年(9)

2017年(9)

2016年(17)

2015年(7)

2014年(4)

2013年(1)

2012年(11)

2011年(27)

2010年(35)

2009年(11)

2008年(11)

分类: Oracle

2021-01-06 10:14:54

校验
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) |
给主人留下些什么吧!~~