ora-01555 模拟及解决

模拟ora-01555错误并解决

Session 1

SQL> variable c refcursor;

SQL> select * from t;

       ID NAME

---------- --------------------

        1  a

        2  b

SQL> exec open :c for select * from t;

PL/SQL 过程已成功完成。

Session2

SQL>create undo tablespace undotbs2 datafile ' F:\oracle\product\10.2.0\oradata\zxntal\undotbs2.dbf ' size 1m;

表空间已创建。

注:如果有几个undo表空间也可以进行切换,并缩小大小,禁止表空间的自动扩展

  如:alter database datafile 7 resize 1M;

      Alter database datafile ’ F:\oracle\product\10.2.0\oradata\zxntal\undotbs2.dbf’ autoextend off;

SQL>alter system set undo_tablespace=undotbs2;

系统已更改。

SQL>  declare

  2  begin

  3   fori in 1..10000 loop

  4  update t set id=i;

  5  commit;

  6   endloop;

  7  end;

  8   /

PL/SQL过程已成功完成。

Session1

SQL>print c;

ERROR:

ORA-01555:快照过旧:回退段号13 (名称为"_SYSSMU13$") 过小

 

解决办法:1,注意自己的应用程序,为什么会查询老的数据

          2,使undo表空间自动扩展

          3,加上guarantee参数,强制保证数据能在undo中保存undo_retention的时间

第一种:强制guarantee参数

Session1

SQL>exec open :c for select * from t;

PL/SQL过程已成功完成。

Session2

SQL>alter tablespace undotbs2 retention guarantee;

表空间已更改。

SQL>declare

  2 begin

  3  fori in 1..10000 loop

  4 update t set id=i;

  5 commit;

  6  endloop;

  7  end;

  8  /

declare

*

第1 行出现错误:

ORA-30036:无法按8 扩展段(在还原表空间 'UNDOTBS2' 中)

ORA-06512:在line 4

 

第二种:使表空间自动扩展autoextend on

Session1

SQL>alter database datafile 7 autoextend on;

数据库已更改。

SQL>exec open :c for select * from t;

PL/SQL过程已成功完成。

Session2

SQL>  declare

  2  begin

  3   fori in 1..10000 loop

  4  update t set id=i;

  5  commit;

  6   endloop;

  7  end;

  8   /

PL/SQL过程已成功完成。

Session1

SQL>print c;

    ID    NAME

------------------------------

   10000   a

   10000   b

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值