ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【UNDO】undo_retention&guarantee (转载)

【UNDO】undo_retention&guarantee (转载)

原创 Linux操作系统 作者:chicheng_cn421 时间:2011-10-29 12:56:44 0 删除 编辑
原文地址:http://blog.csdn.net/robinson1988/article/details/4681469

undo_retention:指定事物commit后undo 将要保存的时间(秒),在ORACLE10g中默认的是900秒。

GUARANTEE : 保证undo_retention参数所设定的时间有效,这个是10g的新功能。

SQL> ALTER TABLESPACE undotbs1 RETENTION GUARANTEE;

SQL> ALTER TABLESPACE undotbs1 RETENTION NOGUARANTEE;

在没有guarantee的保证下,ORACLE并不能保证能够将undo信息存储900秒,如果undo表空间不足,那么ORACLE将忽略undo_retention的设置,直接覆盖掉以前的undo,这个时候有可能会产生ORA-01555错误。如果undo表空间空间足够,那么undo将会保存很长一段时间,直到undo表空间达到maxsize,这个时候才会覆盖undo信息,而且ORACLE会从最古老的undo信息开始覆盖。

ORACLE推荐我们将undo 表空间中的datafile 设定MAXSIZE ,不要让它一直自动扩展,如果ORACLE获得了自动扩展的能力,那么旧的undo不会被覆盖,到后来undo表空间会越来越大,越来越大,直到将磁盘空间耗尽。

在有guarantee的保证下,ORACLE将会保证undo信息能够保存到undo_retention设定的值之后才被覆盖,如果这个时候同时执行了很多事物,将undo表空间耗完了,那么那个事物会失败,会报ORA-30036 错误,所以使用guarantee一定要慎用,如果非要使用guarantee,那么尽量将undo 表空间设大 一点。

Oracle10g开始,如果你设置UNDO_RETENTION为0,那么Oracle启用自动调整以满足最长运行查询的需要。当然如果空间不足,那么Oracle满足最大允许的长时间查询。而不再需要用户手工调整。

对于这个功能,我问了 我们的新同事,他说 这个功能很少用,毕竟ORACLE没有强烈推荐,可能是一个过渡的,而且我们不知道它有没有什么BUG。



关于undo_retention和retention guarantee
undo_retention是用来设定undo数据在undo表空间的保存时间的,即使设定了undo_retention也不能保证不会出现"ora-1555  snapshot too old”错误,对于事务和查询来说,oracle更倾向于维护事务,即尽量保证不出现"ora-30036 unable to extend segment in undo tablespace "错误。不过对于DBA来说,有时成功的查询比成功的事务更重要,即尽量保证不出现"ora-1555"错误,这时除了指定undo_retention之外,还要对undo表空间指定retention guarantee,即执行命令"ALTER TABLESPACE UNDOTBS1 RETENTION GUARANTEE;"。以上命令只能在SQL*PLUS 中执行,不能在database control中设定。



以上。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/20335819/viewspace-709894/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-03-05

  • 博文量
    261
  • 访问量
    417490