最常用的方法就是创建新的undo表空间,然后修改undo_tablespace参数切换undo表空间到新创建的undo表空间...
还有一种方法是将undo_retention调小,一般大家的undo_retention参数都会采用默认的值10800,即事务的前映象在undo表空间中保存3个小时;如果你的db事务非常频繁,undo_retention就需要适当地调少,否则就得准备较大的undo表空间.
以上介绍的两种方法是治标不治本的方法,毕竟进行表空间切换还是比较麻烦的,也增加了系统的风险;将undo_retention调小,有可能对大的事务或长时间运行的查询有影响...
在10g,大家可以启用automatic undo_retention
tuning,想启动automatic
undo_retention tuning,需要把undo_retention设置为0,如果检测automatic undo_retention tuning起作用呢?可以查看v$undostat动态性能视图中tuned_undoretention字段,需要注意的是,自动的undo retention调优对lob的retention不受影响...
那如何才能彻底消除undo表空间爆满呢?通常我们最好的选择是调优查询,降低查询的执行时间,尽量减少长时间运行的查询的运行时间;还有就是减少大的事务,将大的事务分解成小事务,比如用pl/sql分批处理并提交等...