这几天遇到一个错误,我也不知道算不算错误吧,因为没有报错,只是在那突然的短短2分钟内表的操作突然降低了,导致了该软件重新启动。查看alert日志没有报错,而是在ASH里找到了TOP SQL框有一个这样的错误,使我百思不得其解。查看该SQL语句只是简单的一个更新,并不需要优化。最后再百度、google的帮助下终于找到了错误原因,原来与UNDO的设置有关。首先来介绍下undo_retention参数,该参数是撤销段的最短保留时间,而在默认情况下Oracle将根据表空间的大小和历史使用情况,自动调整undo信息保存时间,同时忽略 undo_retention的值,除非undo_retention的guarantee 特性被启用.也就是执行以下命令:
ALTER TABLESPACE UNDOTBS RETENTION GUARANTEE;
在自动调整启用的情况下,实际的撤销信息最短保留时间可以通过查询V$UNDOSTAT视图上的TUNED_UNDORETENTION列获得。往往最短保存时间远远大于设定的UNDO_RETENTION。UNDO自动优化功能能够最大限度的使用undo表空间,满足大部分的sql执行,但是也带来一个问题:很多事务执行完毕之后,发现UNDO表空间会在很长时间都一直保持着使用率是接近100%的状态,active 状态的很少。这种接近状态还无法手工的收缩,甚至于重启数据库实例也无法缓解,而此时常常会收到undo表空间的监控报警。
再来说说enq: US - contention问题
这是oracle10g中开始出现的bug(在11.1.0.7中仍有这个BUG),当因为系统activity增加或者降低的时候,oracle SMON进程会自动ONLINE或者OFFLINE rollback segments。这样导致某些与undo segments相关的latch或者enqueue被hold住太长时间,导致系统很多活跃session都开始等待enq: US - contention。可以同时使用以下解决方法:
1. 设置event让SMON不自动OFFLINE回滚段。
alter system set events '10511 trace name context forever, level 1';
2. 设置参数_rollback_segment_count :表示有多少rollback segment要处于online的状态;可以将该数值设置为数据库最繁忙的时候的回滚段数目。
alter system set "_rollback_segment_count"=;
这里以‘_’开头的为隐藏参数,通过show parameter 是看不到的,可以通过以下语句:
select a.ksppinm name, b.ksppstvl value, a.ksppdesc description
from x$ksppi a, x$ksppcv b
where a.indx = b.indx
and a.ksppinm like '%_rollback_segment_count%';
3. undo autotune bug多多。最好disable。
alter system set "_undo_autotune"= false;
这种方法就是关闭了UNDO的自动调整功能,同事也能解决掉UNDO表空间会在很长时间都一直保持着使用率是接近100%的问题。
4. 有一个patch: A fix to bug 7291739 is to set a new hidden parameter, _highthreshold_undoretention to set a high threshold for undo retention completely distinct from maxquerylen.
alter system set "_highthreshold_undoretention"=;
相关推荐
当系统activity增加或者降低的时候,oracle SMON进程会自动ONLINE或者OFFLINE rollback segments。这样导致某些与undo segments相关的latch或者enqueue被...导致系统很多活跃session都开始等待enq: US - contention。
比较深入浅出的描述了基于oracle10g/11g的UNDO表空间的管理
oracle 收缩undo表空间,需要收缩Undo表空间时特别有用。
演示如何收缩Oracle数据库的undo表空间
undo表空间恢复
oracle Undo表空间管理,oracle 学习人员必看的不可缺少的资料。
Oracle释放过度使用的Undo表空间,脚本
oracle 9i UNDO表空间数据文件丢失恢复得全过程。。
undo 表空间利用率 处理 事务 回滚等介绍 以及如何切换undo表空间
地震前兆Oracle数据库UNDO表空间持续增长修复.pdf
甲骨论-08-Undo表空间管理 本章详细介绍了undo表空间的工作原理以及与undo相关的数据字典
oracle 数据库的 undo表空间管理 全面分析介绍
Oracle中,当Temp和Undo表空间无限增大时,回收这部分空间就是个问题
ORACLE的UNDO表空间
UNDO表空间用来存放改变前的旧值。里面也有段区块,ORACLE自动建立生成、自动使用UNDO段。 作为高级别的DBA是需要知道ORACLE如何使用UNDO段的。 1 Undo表空间及管理方式 ORACLE开始一个事务的时候,会用到表空间。...
一定要意识到,如果 undo 表空间中存在空间压力时,我们不保证前镜像一定会保留这么长时间。 因此,以下公式可用于计算佳 undo 表空间大小: 从 Oracle 10g 开始,您可以选择使用 GUARANTEE 选项,以确保在...
Oracle 12c中的表空间管理、用户和角色、临时Undo
1 Mysql5.6 1.1 相关参数 ...该参数实例初始化之后虽然不可直接改动,但是可以通过先停库,修改配置文件,然后移动undo表空间文件的方式去修改该参数。 默认参数: mysql> show variables like '%u
Estées elcódigodel Mastermind con latécnicadel doble despacho,Sobre el que agregaremos los patrones y funcionalida necesaria para und Undo / Redo con undiseñoCorrecto。 先决条件再录取通知书...
2.完全隔离并且保护不同OS的操作环境以及所有安装在OS上面的应用软件和资料。 3.不同的OS之间还能互动操作,包括网络、周边、文件分享以及复制贴上功能。 4.有复原(Undo)功能。 5.能够设定并且随时修改操作系统的...