数据库lob字段表坏块报ORA-22924 ORA-01555处理步骤

该博客介绍了如何处理Oracle数据库出现ora-22924、ora-01555错误。通过开启数据库跟踪,定位问题表,检查表结构,特别是LOB字段,然后构造并执行存储过程来查找坏块,最后清理问题数据并关闭跟踪,从而解决数据库异常。
摘要由CSDN通过智能技术生成

1.界面报错 ora-22924 ora-01555报错

2.开启数据库跟踪:

su  -  oracle 

sqlplus / as sysdba
alter system set events '600 trace name errorstack forever';

alter system set events '1555 trace name errorstack forever';

alter system set events '22924 trace name errorstack forever';

3.界面重现问题,可以根据数据库警告日志和trc文件定位到有问题的表

4.查看表属于哪个用户,desc 查看表结构,是否存在lob字段

5.构造相关的坏块表corrupt_lobs

6.执行存储过程

create table corrupt_lobs (corrupt_rowid rowid, err_num number);

set serveroutput on

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, FSETTING from  TEST01.T_GL_USERSETTING) loop

  begin

    n:=dbms_lob.instr(cursor_lob.FSETTING,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;

/

说明:TEST01.T_GL_USERSETTING是有问题的用户名和表名,

FSETTING是那个表的lob字段名称

7.检查构造的表是否有数据,如果有数据的话,证明有坏块

select  count(*)  from  corrupt_lobs;

8.有问题的置空

update  TEST01.T_GL_USERSETTING  set FSETTING = empty_blob()     where rowid in (select corrupt_rowid from corrupt_lobs);

commit;

说明:清空clob值(若表类型为blob,使用empty_blob() 否则为(empty_clob() ) )

9.关闭跟踪

su - oracle 

sqlplus / as sysdba

alter system set events '600 trace name errorstack off';

alter system set events '1555 trace name errorstack off';

alter system set events '22924 trace name errorstack off';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值