ORA-01555 snapshot too old: rollback segment number string with name "string" too small
Cause: Rollback records needed by a reader for consistent read are overwritten by other 
writers.
Action: Use larger rollback segments.
是因为你一次处理的事务太大了,比如一次delete 100万条数据
你把RBS37回退段加大或者把事务缩小,比如10000条commit一次,而不要一次性的commit;

解决方案 »

  1.   

    这说明oracle给此事务随机分配的回滚段太小了,这时可以为它指定一个足够大的回滚段,以确保这个事务的成功执行.例如 
    set transaction use rollback segment roll_big;
      

  2.   

    snapshot too old
    刚开始,我是简单看了一下,没有注意你的这个语句
    snapshot too old产生的原因是因为你的回滚段(所有的)的optimal设置的太小,事务完成后,回滚段空间回收,引起数据一致性读错误(如执行了一个长的查询).
    建议建立大的回滚段取代现在小的回滚段
    1是足够大的区间,尽量使事务不要扩展新的空间
    2是optimal不要设置太小,使提交后的事务保存在回滚段中的数据马上就被清除了
    3是对于特别大的事务,按照以上办法建立一个特别大的回滚段,并指定这个回滚段执行这个大的事务
      

  3.   

    对于这个问题首先要说说回滚段使用的原理和机制,在oracle数据库中回滚段
    最大的作用就是保持读一致性,当一个session1修改了数据而没有commit时,另外的session2如果读前一个session1 所修改的数据,这时session2读的就是回滚段里的session1修改前的数据。而rollback segment的空间是可以分为几部分循环使用,当session1所对应事务 commit时,他所对应再rollback segment中的信息酒杯删掉,这部分空间就可被重用,如果你的事物很大,你就会占用rollback segment 的很多空间,当别的事物再使用空间时,就会报snapshot too old.一般情况下我们会建几个比较大的rollback segment,以满足我们应用大部分的事务,非常大的事物我们可以单独建一个大的rollback
    segment 为他使用。在9i中你可以设定rollback segment 由oracle 自己来管理,这样就不会出现这种问题,9i中叫undo segment. 
      

  4.   


    我真是无话可说,你们都是两颗红心啊,我想TOO SMALL的意思任何人都能看懂,何必你们来翻译.
     snapshot too old 可能会有好几个原因产生,解决的方法也不一样,
     
     郁闷.