在数据泵导出期间引发“快照太旧”的可能错误在整个互联网上都有详细记录,例如:
- undo_retention 参数太短
- 重做日志组太小或太少
- 撤销表空间太小
有没有办法在作业运行时监视这些失败案例?
我正在寻找的解决方案是一个会报告的查询:
- 快照的撤消表空间使用的总百分比,直到它需要自动扩展或最大化
- 重做日志使用的总百分比,直到它覆盖自己
- 快照达到撤消保留的剩余时间
任何执行这些事情的一部分的查询都将受到欢迎。查这类资料需要oracle分析包吗?是否有可能查询这样的事情?
在数据泵导出期间引发“快照太旧”的可能错误在整个互联网上都有详细记录,例如:
有没有办法在作业运行时监视这些失败案例?
我正在寻找的解决方案是一个会报告的查询:
任何执行这些事情的一部分的查询都将受到欢迎。查这类资料需要oracle分析包吗?是否有可能查询这样的事情?
您需要充分了解撤消如何解决此错误。我推荐这篇博文:
http://blog.oracle48.nl/wordpress/oracle-database-undo-space-explained/
您可以使用此查询来查看撤消表空间的当前配置文件:
ACTIVE
extents 包含未提交的或当前正在回滚的事务。UNEXPIRED
extents 包含需要保留在 Undo 表空间中以满足 undo_retention 参数的事务EXPIRED
extents 是仍在 Undo 表空间中且早于 undo_retention 参数的事务。数据库将删除最旧的过期范围以为新的活动范围腾出空间。如果没有过期的范围,它将尝试分配一个新的范围。如果这意味着扩展数据文件,它会这样做。
如果数据文件不能扩展,数据库将删除一些 Unexpired extents 来腾出空间,违反 undo_retention 值。因此,undo_retention 参数不是保证,而是数据库将尽力遵守的指南。
现在,这里有两种常见的故障模式:
如果查询尝试从已删除的范围中读取,它将失败并显示
ORA-01555 Snapshot Too Old
如果整个撤消表空间充满了活动撤消,事务将失败并显示
ORA-30036 unable to extend segment in Undo tablespace
如果 DBA_UNDO_EXTENTS 中 Active 和 Unexpired 字节的总和接近相关撤消表空间的大小,您就有可能遇到 ORA-01555。
如果活动字节的总和接近相关撤消表空间的大小,您很可能会遇到 ORA-30036 错误。
我不知道您可以在重做日志配置中更改任何会影响 Snapshot Too Old 错误的内容。你从哪里得到这些信息?
准确地做到这一点即使不是不可能也是非常困难的,因为它依赖于数据库中的所有其他事务。如果从 undo_retention 参数中减去查询运行时间,您会有一个好主意,但这只是假设撤消表空间足够大以满足 undo_retention 值。一旦越过那条线,所有的赌注都会落空。