什么操作会生成undo
INSERT生成的UNDO最少,只要记录新的rowid
UPDATE生成的undo多一点,它要记录修改前的数据中的那部分。
DELETE生成最多的undo, 因为它要记录整行被删除的数据。
如果修改的数据上带有index,那么讲生成更多的undo。
ORA-01555: snpashot too old错误
什么原因导致这个错误?
undo段太小
提交过于频繁
查询时间太长
出现snapshot too old错误详解
(1) 比如undo设置15MB,假设基于这个数据库的事物每分钟生成3.5MB的undo,那么大约3~4分钟,undo段就会被循环重用一次undo段空间。 再这种环境下设置undo段为15MB应该是没有问题的。
(2) 这个时候又新开发了以个报表,其中一个查询要执行5分钟。
(3) 由于undo段有可能会在这个查询执行期间被覆盖, 而被覆盖的数据正是这个查询命中的一个块,那么就会收到一个snapshot too old错误。
解决办法
适当调整 UNDO_RETENTION
增大undo段
调优查询,减少查询时间