文章出處:http://blog.csdn.net/dba_waterbin/article/details/8646982
雖然談論那些隱藏的參數必定是無意義的、但那些隱藏的參數卻是有價值的、我們不得不對那些隱藏的參數"心懷敬意"
AUM下、爲什麼我的Undo表空間只增長,不回收,現在都40多G了,還在長,是爲什麼啊?
爲什麼在系統不是很繁忙的時候會出現undo不夠用的情況呢,如果說不夠用,那在波峯時段應該問題更加嚴重纔對?
......
有時候DBA會聽到諸如上面的一些聲音
因爲有個參數叫_undo_autotune=true,undo_retention不再適用
Oracle會自行決定tuned_undo_retention,然後試圖增大undo tablespace
從10.2版本開始,oracle默認採用自動調整undo retention的方法
根據你undo tablespace的大小以及系統的繁忙程度(v$undostat中信息)自動調整undo_retention參數
所以在10g的數據庫上你會經常發現undo tablespace永遠是滿的
因爲當你undo tablespace有空閒空間時,系統自動調大undo_retention來保留更多的undo blocks
這一方法有利於時間長的查詢,但是對於典型的OLTP系統來說不太適用
因爲OLTP上不太可能跑如此長時間的查詢,而且在很繁忙的 OLTP上還會導致上面所遇到的問題
Oracle真是喫力不討好
- sys@ORCL> ed
- Wrote file afiedt.buf
- 1 select a.ksppinm name,b.ksppstvl value,a.ksppdesc description
- 2 from x$ksppi a,x$ksppcv b
- 3 where a.indx = b.indx
- 4* and a.ksppinm like '%_undo_autotune%'
- sys@ORCL> /
- NAME VALUE DESCRIPTION
- -------------------- -------- ----------------------------------------
- _undo_autotune TRUE enable auto tuning of undo_retention
該參數可以在線修改:
- alter system set “_undo_autotune” = false;
標註一下:
如果undo不回收、resize可能是會報錯的、我遇到很多次了、一般都是、重建個undo表空間、然後切換過去、把以前的幹掉、通過這種方式來回收空間
****************************************************
Oracle 10g及後續版本較以前版本有一新特性即自動調整undo retention時間,大大簡便了管理,對於自動擴展(autoextend on)的undo表空間,參數undo_retention設置成爲Oracle自動調節undo retention的最低閥值。對於非自動擴展(autoextend off),非guarantee 的undo 表空間,Oracle會根據undo表空間大小和v$undostat的歷史信息(是否統計undo信息是由隱含參數_collect_undo_stats決定的,默認情況爲TRUE)最大可能性保留undo信息。
查看undo數據文件是否自動擴展,undo表空間是否處於gurantee狀態。
引用
SQL> select AUTOEXTENSIBLE,RETENTION
2 from dba_tablespaces,dba_data_files
3 where dba_data_files.TABLESPACE_NAME=dba_tablespaces.TABLESPACE_NAME
4 and dba_data_files.TABLESPACE_NAME='UNDOTBS1'
5 ;
AUT RETENTION
--- -----------
YES NOGUARANTEE
當然這一特性是由隱含參數_undo_autotune控制的,默認情況下設置爲TRUE,部分特殊情況下會將其設爲FALSE,如startup upgrade。
*********************************************************