本周处理的第二个关于UNDO的案例
第一个:undo案列一
今天一来再次被告知另外一套数据库也出现undo表空间使用率过高的情况(这次学乖了,先问客户有没有程序运行报ORA-30036错误,O(∩_∩)O哈!)
OS:AIX
DB:10.2.0.4.0
现象:undo表空间使用率过高,未发现报ORA-30036的情况。
能想到Undo表空间出现使用率过高的情况,常见的原因有:
1) 有大事务的SQL使用了大量的undo空间
2) 分配出来的undo段中expired和unexpired状态的extent过多,虽然这部分extent是可以重用的,但是在查看undo使用率的时候常会把这两种状态下的extent占用的空间计算在undo表空间的使用空间内,造成undo表空间虚高
3) 设置的undo_retention时间过长,造成undo段中的extent长期保持在unexpired状态,无法正常回收
Oracle10gundo_retention自动优化功能的影响,该功能会在UNDO表空间非自动增长的情况下,动态调整undo_retention的值忽略系统自身设置的undo_retention的值,以最大限制的利用当前UNDO表空间的可用空间,尽可能的保留最多的UNDO数据,以减少ORA-1555错误的发生,但是也会造成undo_retention值过大,引起大量extent长时间置于unexpired状态无法回收,参考原因2)和3)也会引起undo表空间虚高
查看undo段实际占用情况的信息:
回滚段信息:
SYSDATE Tablespace Name TS Size(MB) UNDO Status Used Extents Used Size(MB) Used Rate(%)
-------- ----------------- ----------- ----------- ------------ ------------- ------------
09:09:49 UNDOTBS1 16336 ACTIVE 2 16 0.1
09:09:49 UNDOTBS1 16336 EXPIRED 1075 2703 16.55
09:09:49 UNDOTBS1 16336 UNEXPIRED 1675 11889.44 72.78
09:09:49 UNDOTBS2 16336 ACTIVE 5 40 0.24
09:09:49 UNDOTBS2 16336 EXPIRED 1493 6198.5 37.94
09:09:49 UNDOTBS2 16336 UNEXPIRED 1820 9643.75 59.03
表空间信息:
NOW