oracle坏快ORA-01578: ORACLE data block corrupted
侧边栏壁纸
博主昵称
yuc

  • 累计撰写 291 篇文章
  • 累计收到 0 条评论

oracle坏快ORA-01578: ORACLE data block corrupted

yuc
yuc
2024-05-07 / 最后修改: 2024-05-07 07:42 / 0 评论 / 4 阅读 / 正在检测是否收录...
问题现象

使用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
0

评论

博主关闭了当前页面的评论