重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛
标题:
undo_retention参数
[打印本页]
作者:
Inkcup
时间:
2025-7-4 16:38
标题:
undo_retention参数
在巡检数据库的过程中,楼主发现这个上个月还存在的参数在这个月却消失了。
于是楼主列出了以下几种可能的原因:
1.参数未显式设置
如果undo_retention未在初始化参数文件中显式配置,则数据库将使用默认值(通常是900秒)。此时,虽然参数起作用,但在查询时可能不会出现在结果中,造成“消失”的假象。
2.使用非持久化参数修改方式
若通过‘ALTER SYSTEM SET undo_retention = value SCOPE=MEMORY;’命令设置了该参数,但未使用SCOPE=BOTH或SCOPE=SPFILE,则重启实例后参数将失效,导致再次查询时无法看到所设置的值。
3.参数被覆盖或误删
在手动编辑spfile(需转换为文本格式进行编辑)或pfile时,若不慎删除了该参数配置项,也会导致其“消失”。
4.多实例环境下的配置不一致
在RAC环境中,如果每个节点使用的参数文件不同步,可能导致部分节点上未正确设置该参数。
5.使用自动内存管理(AMM)模式下参数失效
在某些版本中,若启用了自动内存管理(AMM),并且未启用RETENTION GUARANTEE,则即使设置了undo_retention,也可能因为系统资源压力而提前释放快照,从而使得参数看似无效。
登录/注册后可看大图
经过检查,楼主发现该数据库在5月中旬重启过一次,因此很有可能是遇到了第二种情况,但也不排除是遭到了误删。
--------------参数说明
该参数用于指定撤销(UNDO)数据保留的最短时间(以秒为单位),以确保事务回滚、读一致性和闪回查询等功能。
其行为受表空间是否自动扩展影响:固定大小表空间会忽略该参数,而自动扩展表空间会尝试通过扩展空间而非覆盖未过期数据来满足保留时间要求。
--------------注意事项
#在Oracle 11g及以上版本中,默认采用自动管理模式管理UNDO表空间。若未显式创建UNDO表空间(即未设置undo_tablespace参数),系统会自动将修改块的前镜像存储在SYSTEM表空间,并通过日志文件管理回滚信息。此时UNDO_RETENTION参数可能不会直接显示,但回滚信息仍会被保留至默认时长(通常为10800秒)。
#如果要设置固定大小的undo表空间,那么在空间不足时可能会出现如下错误:
1、dml会失败,因为没有足够的空间去分配新的事务。
2、运行很长的query可能会出现snapshot too old 错误 ,这是由于不能满足一致性读的问题 (常见为 ORA-01555)
欢迎光临 重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛 (http://bbs.cqsztech.com/)
Powered by Discuz! X3.2