undo保留时间的几个相关参数

参考文档:
https://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams265.htm#REFRN10225
https://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams264.htm#REFRN10224
MOS 文档 ID 1526122.1
MOS 文档 ID 846079.1

适用版本:10.1.0.5以上
相关参数:

_highthreshold_undoretention,_smu_debug_mode,_undo_autotune,undo_management,undo_retention,undo_tablespace
undo主要功能:
undo segement 回滚段主要工作是为了构造读一致性,事物回滚,数据库恢复,闪回查询

正文:
这里主要介绍几个参数的设置
_highthreshold_undoretention —- 单位 秒,默认值 4294967294 。允许undo_retention 设置的最大值,当修改undo_retention的值超过改参数值,相关报错 ORA-55567,ORA-55568,ORA-55569

_smu_debug_mode —undo调试参数,通过设置特定值可以启动特殊作用,如 4, 33445542

_undo_autotune — 默认 true 开启。自动调整回滚段的保留时间。

undo_retention — 单位 秒,默认900秒,undo段尽可能的保留时间

undo_management —undo段管理方式,默认auto 自动使用undot ablespace 管理。MANUAL 利用 rollback segment管理

undo_tablespace —- 指定undo使用的表空间

SYS@  >select  a.inst_id, a.ksppinm  "Parameter",
  2               b.ksppstvl "Session Value",
             c.ksppstvl "Instance Value"
  4        from x$ksppi a, x$ksppcv b, x$ksppsv c
  5       where a.indx = b.indx and a.indx = c.indx
  6         and a.inst_id=b.inst_id and b.inst_id=c.inst_id
       and a.ksppinm in ('_undo_autotune', '_smu_debug_mode',
  8                           '_highthreshold_undoretention',
                'undo_tablespace','undo_retention','undo_management')
 10  order by 2;

Instance # Parameter                           Session Value             Instance Value
---------- ----------------------------------- ------------------------- -------------------------
         1 _highthreshold_undoretention        4294967294                4294967294
         1 _smu_debug_mode                     0                         0
         1 _undo_autotune                      TRUE                      TRUE
         1 undo_management                     AUTO                      AUTO
         1 undo_retention                      900                       900
         1 undo_tablespace                     UNDOTBS1                  UNDOTBS1

6 rows selected.

实际undo段的保留时间,undo段覆盖与否,绝大数情况是由表空间的使用情况结合相关参数来决定的。(除非对undo tablespace 设置了retention guarantee 特性,强制保留undo segment达到保留时间值,不然不会覆盖,哪怕表空间不足也是。隐患太大,不太考虑)

PS:undo段的保留时间只是让已提交事务的 undo segment 标记为 UNEXPIRED(未过期),我们其实知道不管是UNEXPIRED 还是 EXPIRED 状态的 undo segment 都是可能会被覆盖的。只是优先覆盖EXPIRED ,如果空间不足一样覆盖UNEXPIRED

以下情况都是 undo tablespace 是NOGUARANTEE
参数组合情况一:
在默认情况下,及_undo_autotune=true 时候及undo tablespace 的autoextend =yes 自动扩展
_smu_debug_mode =0
_undo_autotune =true
undo_retention =900 (这个值可自行修改)

开启自动调整时实际的保留时间以试图V$UNDOSTAT中的字段 TUNED_UNDORETENTION 值为准,且>=undo_retention值

SELECT TO_CHAR(BEGIN_TIME, 'YYYY-MM-DD HH24:MI:SS') BEGIN_TIME,TUNED_UNDORETENTION FROM V$UNDOSTAT;

2018-07-08 01:59:26                1412
2018-07-08 01:49:26                 900
2018-07-08 01:39:26                1413
2018-07-08 01:29:26                 900
2018-07-08 01:19:26                1417
2018-07-08 01:09:26                2021
2018-07-08 00:59:26                1421
2018-07-08 00:49:26                 900
2018-07-08 00:39:26                1422
2018-07-08 00:29:26                 900
2018-07-08 00:19:26                1427
2018-07-08 00:09:26                 900
2018-07-07 23:59:26                1430
2018-07-07 23:49:26                 900
2018-07-07 23:39:26                1432
2018-07-07 23:29:26                 900
2018-07-07 23:19:26                1436

情况二:

相对于情况一,如果只是 undo tablespace 非自动扩展
这时oracle根据undo表空间大小与使用情况自动调整最大可能的保留时间,及忽略undo_retention的值

情况三:
undo tablespace 自动扩展
_smu_debug_mode = 33445542
_undo_autotune =true
undo_retention =900 (这个值可自行修改)

这时oracle自动调整的
TUNED_UNDORETENTION = (undo_retention值 or 运行时间最长的 SQL 的执行时间)

情况四
undo tablespace 自动扩展
_undo_autotune =false
undo_retention =900 (这个值可自行修改)

这时oracle 自动调整关闭
TUNED_UNDORETENTION = undo_retention

情况五:
对于lob 字段
lob 字段 undo 不是利用undo tablespace,而是利用自己存储空间。 例如 BasicFiles lob字段指定了 retention参数 则继承 undo_retention参数的值。
lob情况特殊,还有其他一些限制 参考 mos文档846079.1

你可能感兴趣的:(Oracle,Other,undo_retention)