1、建议所有的用户回滚段一样大小(除了一个用于大事务),否则,系统在选择回滚段的时候,可能因为恰恰选择了你的那个小回滚段
2、set transaction use rollback segment s1对该语句后的事务有效,事务一结束,ORACLE还是会自动选择
3、如果设置了set transaction use rollback segment s1,别的会话,还是不会用到这个回滚段,会自动选择
4、ora-01555 snapshot to old,产生原因很复杂,主要是因为你在执行长查询的时候,别人修改了数据引起的,而回滚数据被覆盖了,说明了你的用户回滚段太少,太小
2、set transaction use rollback segment s1对该语句后的事务有效,事务一结束,ORACLE还是会自动选择
3、如果设置了set transaction use rollback segment s1,别的会话,还是不会用到这个回滚段,会自动选择
4、ora-01555 snapshot to old,产生原因很复杂,主要是因为你在执行长查询的时候,别人修改了数据引起的,而回滚数据被覆盖了,说明了你的用户回滚段太少,太小
给系统回滚表空间加数据文件不行?
在系统回滚表空间加回滚段,把NEXT的值设置大点
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错误,不妨用第二种情况试试~另外,还可能跟泥过程里面使用游标有关~
-----------------------------------------------
这个是不可能的
在提交或回滚之前
你有什么证据?
你查询一下你的
v$transaction
v$lock
v$session
等,应当你可以得到答案的
如果你设置了优化大小,一样不行建议检查V$rollstat,保证回滚段没有什么争用
gets/waits,shrinks,wraps几个字段
1。事务太大,比如一次INSERT/DELETE 几百万记录
2。统计复杂,没能利用INDEX,同时有统计对象不断在更改并且更改量比较大
-----------------------------------------------
这个是不可能的
在提交或回滚之前
你有什么证据?
你查询一下你的
v$transaction
v$lock
v$session
等,应当你可以得到答案的
----------------------------------------------------------------
我的处理过程应该可以保证是事务接在set transaction ...之后,但是系统提出snapshot之类的问题时提到的rb1肯定是系统的回滚段(但不是每次都是这样)。
不过你说的出现回滚段争用是可能的。很有启发,多谢!