详细原因
- 长查询执行时间过长,undo 回滚段数据被新 DML 覆盖;
- undo 表空间过小、undo_retention 保留时间太短;
- 大量并发更新,undo 段快速复用;
- 归档未开、闪回参数配置过低。
完整排查 & 解决
- 调大 undo 保留时间
sql
alter system set undo_retention=3600 scope=both; -- 保留1小时回滚数据
- 扩容 undo 表空间(同普通表空间扩容命令)
- 拆分超大查询,分批分页读取数据;
- 开启自动扩展 undo 数据文件。