ora-01555,ORA-22924错误的可能原因
时间:2010-09-26 来源:gflei
报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);
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);
相关阅读 更多 +