测试环境为oracle10.1.0.2solaris系统。

两个修改参数:show parameter undo_retention; 这个参数为undo数据的保留时间,初始默认为900,单位为秒,也就是默认保留15分钟(olap系统)

另一个参数为show parameter _undo_autotune; 大概意思就是说oracle会根据undo表空间的空闲空间,自动分配或设置一些值。这个参数初始没有,也就是空。

实验结果显示:当大数据量insert时,默认的30m undo空间会迅速激增,变满后,由于设置了datafile自动扩展,于是undo空间不断扩大(当连续执行大数据insert),开始以为只要每次insert后,执行commit,即能释放undo空间,但实验表明并非如此,后来发现应该是undo_retention参数在起作用,因为commit后如果停止一段时间后,则undo已用空间会降下来,后来回想应该是commit后,又过了15分钟(看上述内容)oracle这才释放了之前所占用的undo空间。

后来按照网上所查,将undo_retention参数设置为1(好像若设置为0会有其他含义),以及_undo_autotune参数设置为false。这样在每次commit(rollback)后,oracle才能迅速释放undo空间。

由此暂时推断:undo_retention 参数的含义,即为commit(rollback!?)后,undo数据的保留时间。(但网上也有资料说应比较一个max值,来设置undo_retention…[select tuned_undoretention, maxquerylen, maxqueryid from v$undostat;])

实验结果还表明,当insert后,不commit也不rollback时,undo空间数据会一直保留着的,与undo_retention无关。


上述,所看undo空间改变,均是在em中观测的。

随便说一下,当insert后,并rollback后,数据回滚,但用em查看时,表空间(数据文件)并没有减小,网上资料说表空间是单向增大的,实验表明不用担心,当再次insert同样数据量后,数据文件将保持不变,也就是oracle会继续使用之前回滚后的空间。。