最近生产环境,我们的任务调度系统每天早上6点执行任务,执行存过加工数据时,好几个任务出现了ORA-01555错误,此错误是因为undo旧照过久导致。
了解到一般引起的原因有两种
1、查询时有大量更新数据操作,导致查询的数据已无法从undo查到。
2、sql查询时间太慢,以至于要查询的数据还有没查询完,数据被已被更新。
第二种原因比较好理解,如:有一张Y表有2000W数据,7:00分A查询Y表,7:01分B使用索引更新了第1500W条的数据进行了commit,此时A查询还没有传到第1500W条数据,等到A查询到第1500W条数据时,此时出现ORA-01555错误。
但第一种原因不是很理解,是因为同时执行insert into select操作过多且数据量过多,导致undo空间满了导致?
在早上调用调用存过执行insert into select操作的那个时间段没有所查询表的更新操作。但是连续三天出现此错误。因一时半会定位不到原因。所以先让DBA将undo空间加大了一倍,后续再定位原因。
此问题先记录,待定位到具体原因再补充