错误告警:
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说明已经将坏块标记出了。
