欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于Oracle数据库中的undo回滚段

程序员文章站 2022-03-26 08:05:51
...

Oracle数据库当中,关于日志与回滚那一部分,与别的数据库确实有很大的不同。为了避免在写日志的同时后台进程对日志文件的读操作,Oracle使用了单独的回滚段来记录“旧”的数据。这样可以达到并行读写的目的,整体I/O效率提高了不少,但也引入了一些问题。
最经典的莫过于ORA-01555:snapshot too old错误了。
1.什么操作产生最多的撤消?

Insert产生最小的撤消,但是应该产生相当多的redo数据。因为undo回滚面只需要记录要“删除”那些新行的id。
Update一般是第二位(通常情况下),所要做的是记录修改过的字段值,常见的情况是update整行数据的一小部分。
Delete才会产生最多的撤消,一个事务有可能就是delete一张超大的表,结果导致回滚段不够用,出现上述错误。

2.set transaction语句调用回滚段

Set transaction语句用于“选择”事务要使用的回滚段。这主要是为了对某些较大的操作能够确保有大的回滚段。对于某些特定的事务,可能有必要这么做。
若有必要的话,可以进行一个最优的设置,让回滚段扩展到一定大小后缩小为原来大小,因为不必拥有一个特别的“大回滚段”。

相关标签: Oracle