目录
一、问题描述
1、问题发现
工厂报告某个工序可以查询,但无法下活(无法插入新数据),同时开发给出报错:
2、咨询工厂情况
工厂管理员回复,上午9点30前后停电,9点50启动后,出现此问题。
二、跟踪分析
1、查看log日志
2、log日志的跟踪trace
3、跟踪日志
是表PRDIFE插入数是有问题,但查询就没问题。
三、解决思路
1、问题原因
定位该表有LOB字段,可能出现坏块造成;
经过查询,该问题是由于Oracle的一个bug导致(参考文档 ID 1608861.1),是由于含有LOB字段的表在插入数据时,一个块(Block)在ASSM metadata L1 bitmap block中被标示为格式化的,但是在LOB段中被标识为未格式化的。
ORA-00600[25027][x][0] 中的x表示的是该LOB字段所在的表空间的ts#,即表空间号,第三个参数[0]可能并不总是0 (zero)。
2、解决方法1:导出导入
(1)给此表做个备份
create table bak_prdife as select * from prdife;
(2)expdp表导出
expdp mes_prd/*** directory=backup_mes dumpfile=t_prdife.dmp logfile=t_prdife.log tables=prdife
将表expdp导出,drop该表,再根据实际情况建表或者impdp导入
(3)删除该表
drop table prdife;
(4)重新导入该表
expdp mes_prd/*** directory=backup_mes dumpfile=t_prdife.dmp logfile=t_prdife_imp.log tables=prdife
3、解决方法2:将LOB字段move到新的表空间
Alter table tbName move lob(lob_column) store as (tablespace tbsp);