1、建议所有的用户回滚段一样大小(除了一个用于大事务),否则,系统在选择回滚段的时候,可能因为恰恰选择了你的那个小回滚段
2、set transaction use rollback segment s1对该语句后的事务有效,事务一结束,ORACLE还是会自动选择
3、如果设置了set transaction use rollback segment s1,别的会话,还是不会用到这个回滚段,会自动选择
4、ora-01555 snapshot to old,产生原因很复杂,主要是因为你在执行长查询的时候,别人修改了数据引起的,而回滚数据被覆盖了,说明了你的用户回滚段太少,太小

解决方案 »

  1.   

    我是在set transaction use rollback segment s1,后紧跟了个事务,但是该事务经常会用到其他的回滚段,对这点我非常的晕。
      

  2.   

    你检查,你的用户回滚段使用情况了吗?
    给系统回滚表空间加数据文件不行?
    在系统回滚表空间加回滚段,把NEXT的值设置大点
      

  3.   

    回滚段不够通常有两种原因:
    1、最常见的情况是回滚段所在的表空间不够,那就要增加表空间的size,常用的做法是添加一个数据文件,或者把现有的数据文件设成自动扩展
    alter database datafile 'rollb01.dbf' autoextend on  next 20 m maxsize unlimited;
    注意:oracle不建议把回滚段表空间设置成自动扩展。2、另一种情况是回滚段的maxextents太小了,用下面的语句来设定maxextents为无限
    alter rollback segment r01 storage(maxextents unlimited);如果遇到ora-01555错误,不妨用第二种情况试试~另外,还可能跟泥过程里面使用游标有关~
      

  4.   

    我是在set transaction use rollback segment s1,后紧跟了个事务,但是该事务经常会用到其他的回滚段,对这点我非常的晕。
    -----------------------------------------------
    这个是不可能的
    在提交或回滚之前
    你有什么证据?
    你查询一下你的
    v$transaction
    v$lock
    v$session
    等,应当你可以得到答案的
      

  5.   

    to shuipipi(水皮皮) ora-01555错误与maxextents为无限没有关系
    如果你设置了优化大小,一样不行建议检查V$rollstat,保证回滚段没有什么争用
    gets/waits,shrinks,wraps几个字段
      

  6.   

    ora-01555错误一般和ROLLBACK没有关系的,一般如下情况比较容易产生
    1。事务太大,比如一次INSERT/DELETE 几百万记录
    2。统计复杂,没能利用INDEX,同时有统计对象不断在更改并且更改量比较大
      

  7.   

    我是在set transaction use rollback segment s1,后紧跟了个事务,但是该事务经常会用到其他的回滚段,对这点我非常的晕。
    -----------------------------------------------
    这个是不可能的
    在提交或回滚之前
    你有什么证据?
    你查询一下你的
    v$transaction
    v$lock
    v$session
    等,应当你可以得到答案的
    ----------------------------------------------------------------
    我的处理过程应该可以保证是事务接在set transaction ...之后,但是系统提出snapshot之类的问题时提到的rb1肯定是系统的回滚段(但不是每次都是这样)。
    不过你说的出现回滚段争用是可能的。很有启发,多谢!