参考文档:
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