韬光养晦208 2021-12-13 01:06 采纳率: 0%
浏览 855

ORA-01555 快照过旧 回退段号 (名称为 ) 过小ORA-22924 快照太旧

两种原因:
1.undo表空间太小,undo保留时间太短
2.读取的数据有坏块
解决方案:
1.第一种问题,加大undo表空间及undo保留时间
2.第二种解决坏块的问题:
(1)首选创建一个处理坏块的表
create table corrupt_lobs (corrupt_rowid rowid, err_num number);
(2)执行如下程序
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, &&lob_column from &table_owner.&table_with_lob) loop
    begin
      num := dbms_lob.instr (cursor_lob.&&lob_column, 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;
end;
end loop;
end;
/


Enter value for lob_column    : lob字段名 
Enter value for table_owner   : 所属用户
Enter value for table_with_LOB: lob字段所在的表

根据查询出来的坏块,将坏块更新为空:
update <owner>.<tablename> 
set    <lob column> = empty_blob()
where  rowid in (select corrupted_rowid from corrupted_lob_data);
commit;


备注:如有多个字段重复执行上面的程序代码

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-23 18:45
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 12月13日

悬赏问题

  • ¥15 关于无人驾驶的航向角
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退