1、session A 对表AAA执行一个select语句,记录时间time1
2、session B 对表AAA执行一个update语句,记录时间time2
3、当session A 读到session B修改的行时,发现这一行的更新时间比time1晚,此时就需要在undo构造一个一致性视图,CR块,然后继续执行,记录时间time3
4、session B又执行update操作,修改某行数据并提交,此时更新了之前的一致性视图,记录时间time4
5、如果session B 执行了某个批量操作,由于空间不足导致一致性视图被覆盖,记录时间time5
6、如果session A读到第四步被修改的数据,发现更新时间晚于time1,这时就去找undo中的一致性视图,但是已经被覆盖,此时就会报错。
解决办法:
(1)增加UNDO表空间大小
(2)增加undo_retention 时间,默认只有15分钟
(3)优化出错的SQL,减少查询的时间(首选)
(4)避免频繁的提交