报ora-01555,可能有三种原因造成的
1、回滚段太小导致
若报 ora-22924,则限定在与lob字段有关
2、lob字段的pctfree太小导致
3、lob字段中存储的内容corrupt,导致获取内容是报该错误。
定位方法:
1、关闭其他用户连接,仅作exp操作。
a、如果仍报该错,则说明是第3种原因导致。
b、不报错,原因可能是1or2
2、调整了回滚段大小以及保留时间。
a、若报错,则说明是第2种原因导致。
b、不报错,则原因为第1种。
快速解决的办法:
1、关闭其他用户连接,仅作exp操作,能解决1、2两种错误。这是对于exp操作。
2、对于正常的业务操作,导致该错误,需要根据错误原因调整回滚段的大小以及保留时间,或者pctfree。
3、对于因lob中的错误内容导致的错,需要清空该字段内容进行解决。
快速定位问题lob的方法:
create table corrupt_lobs (corrupt_rowid rowid);
declare error_1578 exception; error_1555 exception; error_22922 exception;
pragma exception_init(error_1578,-1578); pragma exception_init(error_1555,-1555); pragma exception_init(error_22922,-22922);
n number;
begin
for cursor_lob in (select rowid r, document from LOBDATA ) loop
begin n:=dbms_lob.instr(cursor_lob.document,hextoraw('889911'));
exception when error_1578 then
insert into corrupt_lobs values (cursor_lob.r); commit;
when error_1555 then insert into corrupt_lobs values (cursor_lob.r); commit;
when error_22922 then insert into corrupt_lobs values (cursor_lob.r); commit;
end;
end loop;
end;
/
select * from corrupt_lobs;
update PRINT_TEMPLATE set TEMPLATE_VAL = empty_blob() where rowid in (select corrupt_rowid from corrupt_lobs);
阅读(10383) | 评论(0) | 转发(0) |