问题现象
使用expdp导出时候发现这个错误,查看日志提示 SYSMAN.MGMT_METRICS_RAW
表数据文件有问题
排查诊断
于是通过以下语句查询对应的段:2为报错的文件id,65675为报错的块编号
SELECT SEGMENT_TYPE,OWNER||'.'||SEGMENT_NAME FROM DBA_EXTENTS
WHERE file_id = 2 AND 65675 BETWEEN BLOCK_ID AND BLOCK_ID+BLOCKS -1
或者通过这个语句来手动输入文件id 和 块编号
SELECT tablespace_name, segment_type, owner, segment_name
FROM dba_extents
WHERE file_id = &fileid
and &blockid between block_id AND block_id + blocks - 1
发现是此表的索引数据有问题,也可以查出来是哪个schema,查询出来有可能是segment_name段名
根据段名查询相关的信息,可能是表,这里是索引
select * from dba_segments where SEGMENT_NAME='SYS_C0091703'
根据schema和segment_name类型查询相关的信息,查出来是哪个表的索引
SELECT seg.owner as Schema,
seg.segment_name as Index_Name ,
cons.table_name,
cons.CONSTRAINT_TYPE,
seg.bytes/1024/1024 as size_in_MB
FROM dba_segments seg left join dba_constraints cons on seg.segment_name = cons.CONSTRAINT_NAME
WHERE seg.owner = 'xxx100'
AND
segment_type = 'INDEX'
ORDER BY bytes desc
尝试重建索引解决问题
alter index xx100.SYS_C0091703 rebuild
# 发现需要增加 online 参数
alter index xx100.SYS_C0091703 rebuild online
通过 vdb 命令进行验证数据文件,发现确实有问题
尝试重建此索引
alter index SYSMAN.MGMT_METRICS_RAW_PK,
# 提示 Primary index on an IOT cannot be rebuilt
尝试跳过坏块
exec dbms_repair.skip_corrupt_blocks
跳过坏块 过程中仍然提示 ORA-24123: feature IOT support is not yet implemented
最后解决方案:通过移动到新表空间解决
alter table SYSMAN.MGMT_METRICS_RAW move tablespace users; (新表空间)
alter table SYSMAN.MGMT_METRICS_RAW move tablespace SYSAUX; (原表空间)
查询已经捕获的坏块
select * from v$database_block_corruption
再次使用命令验证dbf文件
dbv file=/opt/app/oracle/oradata/orcl/users07.dbf
评论