跳到主要内容
内容阅读

在知识库中专注阅读,并随时返回相关工具与课程

ORA-01555常见撤销

快照过旧

Snapshot too old

错误描述

查询或事务需要的 undo 数据已被覆盖,因为 undo 保留时间不足以支持操作持续时间。

可能原因

  • 长时间运行的查询期间并发 DML 正在修改相同数据
  • Undo 表空间太小,无法在查询持续期间保留 undo
  • UNDO_RETENTION 参数设置过低
  • PL/SQL 游标中跨提交的 fetch

解决方案

  1. 1增加 undo 表空间大小
  2. 2增加 UNDO_RETENTION:ALTER SYSTEM SET undo_retention=3600;
  3. 3启用 undo 保留保证:ALTER TABLESPACE undotbs RETENTION GUARANTEE;
  4. 4优化长时间运行的查询使其更快
  5. 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

同类错误码(撤销)

想系统掌握这个领域?

「撤销」在课程 Day 81-90 中有 10 篇完整实战教程

完整操作步骤真实截图踩坑总结
查看完整课程¥128/月起 · 解锁全部 2738+ 篇
ORA-01555: 快照过旧 - 原因与解决方案 | DBA 学习之路