ORA-01578: ORACLE data block corrupted

错误告警:


ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 10, block # 131)
ORA-01110: data file 10:
'/u01/app/oracle/oradata/orcl/pdborcl/pdborcl_users01.dbf'

最要中是处理思路:
如果有备份有归档
rman target /
blockrecover datafile 10 block 131
好恢复
如果没有备份没归档
处理思路
1:放弃坏块的数据,抢救其他块的数据
2:将坏块打上标记,让业务skipped

一:收集信息
1、文件号
SELECT tablespace_name ,file_name,relative_fno,FILe_id FROM DBA_data_files
SELECT tablespace_name ,file_name,relative_fno,FILe_id FROM DBA_temp_files
2、段信息
select owner,segment_name,segment_type,tablespace_name from dba_extents
WHERE file_id = 10 AND 131 BETWEEN  block_id AND block_id+blocks-1
分区表(partition_name)
select owner,segment_name,segment_type,tablespace_name,partition_name from dba_extents
WHERE file_id = 10 AND 131 BETWEEN  block_id AND block_id+blocks-1
如果是表,同时要考虑表上的索引,主键约束,还有外键约束
select owner,table_name,constraint_name ,r_constraint_name pk_other_table
from user_constraints a where a.constraint_type = 'R'
-- P 代表主键, R 代表外键
如果是分区表,先将有问题的区exchange为一个普通表,按照普通表处理
如果是索引,删掉,重建,如果rebuild需要alter index ...rebulid online如果不带online则会依赖原本的坏块重建索引
如果是主键索引,考虑是否有外键指向该索引
3、dbv确实file中有无其他损坏的块
-bash-3.2$ dbv file=/u01/app/oracle/oradata/orcl/pdborcl/pdborcl_users01.dbf userid=system/5963187

二:处理让应用跳过坏块
sys用户 使用SKIP_CORRUPT_BLOCKS来告知Oracle哪些坏块需要被跳过
BEGIN
DBMS_REPAIR.SKIP_CORRUPT_BLOCKS (
SCHEMA_NAME => 'DSW',
OBJECT_NAME => 'BB',
OBJECT_TYPE => dbms_repair.table_object,
FLAGS => dbms_repair.skip_flag);
END;
/

三:扩展
如果是坏块 报ORA-0600,处理思路是,先将块标记成坏块(多了这一步),然后配置跳过坏块。
如果报ORA 01578s说明已经将坏块标记出了。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31454056/viewspace-2214059/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31454056/viewspace-2214059/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值