ORA-01555这个错误,估计大部分人都遇到过,在有对象的业务系统,进行数据导出时,也时常遇到,一般都是通过调整UNDO的保留时间来处理,但调整后,也不行呢,下面正好遇到这个情况,请网下看 :
目录
问题现象
前两天突然停电,在来电17:44启动后,医生写病历,保存不起,病历保存,就报下面的错误,
问题分析
接到这个问题后,根据以前的经验,一般想到突然停电重启后,都是数据库起不来,本次能起来,但部分业务无法继续下去,赶紧看看数据库日志:
根据启动时间看,报警日志先报ORA-600[kdsgrp1]:
晚上22点后,就一直报:
既然有具体的块,那就查一下,经过查询,发现是一个大对象:
看来是电子病历格式这个表的 文本内容 字段某个内容存在问题。
经查MOS,上面主要是说basic file lob的BUG,需要升级,想到以前就好好的,如果BUG,以前也应该有问题,为什么现在就不行了呢,估计与什么坏掉有关系。
想到能否把数据导出来呢
结果发现,一直导不出来,每次都停在这个表
即使调整了大对象的 retention,或者 pctversion ,都不能解决问题。
Alter system set retention=10800;
Alter table 电子病历格式 modify lob (文本内容) (retention);
或者
Alter table 电子病历格式 modify lob (文本内容) ((pctversion xx);
设置后,问题依然存在
通过这番操作后,进一步确定了可能BLOB本身内容出现问题。
问题解决
找到出问题的这个大对象,然后,置空处理。
具体办法如下:
- 创建中间表
create table corrupt_lobs (corrupt_rowid rowid, err_num number);
- 找出坏块行
declare
error_1578 exception;
error_1555 exception;
error_22922 exception;
error_22924 exception;
pragma exception_init(error_1578,-1578);
pragma exception_init(error_1555,-1555);
pragma exception_init(error_22922,-22922);
pragma exception_init(error_22924,-22924);
n number;
begin
for cursor_lob in (select rowid r,文本内容 from zlhis.电子病历格式) loop
begin
n:=dbms_lob.instr(cursor_lob.文本内容,hextoraw('889911'));
exception
when error_1578 then
insert into corrupt_lobs values (cursor_lob.r, 1578);
commit;
when error_1555 then
insert into corrupt_lobs values (cursor_lob.r, 1555);
commit;
when error_22922 then
insert into corrupt_lobs values (cursor_lob.r, 22922);
commit;
when error_22924 then
insert into corrupt_lobs values (cursor_lob.r, 22924);
commit;
end;
end loop;
end;
/
还好,只有一行存在问题
既然找到这行,如果导出时,跳过这行是否可行呢
成功导出。
再次验证一下:
既然如此,直接把有问题的这个字段内容置空:
update zlhis.电子病历格式 set 文本内容 = empty_clob() where rowid in (select corrupt_rowid from corrupt_lobs);
注意,如果是 BLOB ,BFILE 字段就用 EMPTY_BLOB()
,如果是CLOB,NCLOB字段,就用 EMPTY_CLOB()
到此,再去写病历,问题消失,报警文件不再报错。以最小代价处理了该问题。
-------------------------------------------
为了方便交流,我建立了一个微信群:水煮数据库,主要交流日常运维中用到的数据库相关问题,包含但不限于:ORACLE,PG,MYSQL,SQLSERVER,OB,TIDB,达梦,TDSQL,OPENGAUSS,人大金仓,GBASE等等,如果有兴趣交流,可以加我微信:zq24803366, 我可以拉你入群。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/cqsztech/article/details/138769795