内容阅读
在知识库中专注阅读,并随时返回相关工具与课程
ORA-01555常见撤销
快照过旧
Snapshot too old
错误描述
查询或事务需要的 undo 数据已被覆盖,因为 undo 保留时间不足以支持操作持续时间。
可能原因
- 长时间运行的查询期间并发 DML 正在修改相同数据
- Undo 表空间太小,无法在查询持续期间保留 undo
- UNDO_RETENTION 参数设置过低
- PL/SQL 游标中跨提交的 fetch
解决方案
- 1增加 undo 表空间大小
- 2增加 UNDO_RETENTION:ALTER SYSTEM SET undo_retention=3600;
- 3启用 undo 保留保证:ALTER TABLESPACE undotbs RETENTION GUARANTEE;
- 4优化长时间运行的查询使其更快
- 5避免在 PL/SQL 中跨提交 fetch
诊断命令
SHOW PARAMETER undo;SELECT tablespace_name, SUM(bytes)/1024/1024 size_mb FROM dba_data_files WHERE tablespace_name LIKE '%UNDO%' GROUP BY tablespace_name;SELECT begin_time, end_time, tuned_undoretention FROM v$undostat ORDER BY begin_time DESC FETCH FIRST 5 ROWS ONLY;#undo#snapshot#retention#long-query