undo,
表空間
undo_retention設的為900秒是指undo資料留在undo段裡面至少要900秒以後才能被覆蓋掉。
因為undo段是迴圈的, 如果乙個dml操作產生了大量的undo資訊時, 可能undo空間不夠用,此時
就要覆蓋掉一些undo塊, undo_retention就是保證900秒後那些塊才能被覆蓋。
undo其實裡面有n個段,不同的session會共用這些段而已。只不過這些段的其中一部分會被標註成可以覆蓋而已
最簡單的現象就是undo好像只增長 是不能簡單的縮小。
undo_retention:指定事物commit後undo 將要儲存的時間(秒),在oracle10g中預設的是900秒。
guarantee : 保證undo_retention引數所設定的時間有效,這個是10g的新功能。
sql> alter tablespace undotbs1 retention guarantee;
sql> alter tablespace undotbs1 retention noguarantee;
在沒有guarantee的保證下,oracle並不能保證能夠將undo資訊儲存900秒,如果undo表空間不足,那麼oracle將忽略undo_retention的設定,直接覆蓋掉以前的undo,這個時候有可能會產生ora-01555錯誤。如果undo表空間空間足夠,那麼undo將會儲存很長一段時間,直到undo表空間達到maxsize,這個時候才會覆蓋undo資訊,而且oracle會從最古老的undo資訊開始覆蓋。
oracle推薦我們將undo 表空間中的datafile 設定maxsize ,不要讓它一直自動擴充套件,如果oracle獲得了自動擴充套件的能力,那麼舊的undo不會被覆蓋,到後來undo表空間會越來越大,越來越大,直到將磁碟空間耗盡。
在有guarantee的保證下,oracle將會保證undo資訊能夠儲存到undo_retention設定的值之後才被覆蓋,如果這個時候同時執行了很多事物,將undo表空間耗完了,那麼那個事物會失敗,會報ora-30036 錯誤,所以使用guarantee一定要慎用,如果非要使用guarantee,那麼盡量將undo 表空間設大 一點。
oracle10g開始,如果你設定undo_retention為0,那麼oracle啟用自動調整以滿足最長執行查詢的需要。當然如果空間不足,那麼oracle滿足最大允許的長時間查詢。而不再需要使用者手工調整。
對於這個功能,我問了 我們的新同事,他說 這個功能很少用,畢竟oracle沒有強烈推薦,可能是乙個過渡的,而且我們不知道它有沒有什麼bug。
表空間使用率
檢視表空間名稱 大小 使用大小 剩餘大小和使用率 select a.tablespace name 表空間名稱 total 1024 1024 表空間大小 m free 1024 1024 表空間剩餘大小 m total free 1024 1024 表空間使用大小 m total 1024 102...
undo表空間使用率99 居高不下
背景 兩套同樣的測試環境,一套資料庫undo使用率一直處於99 已經持續了很長一段時間,而另外一套幾乎為0 排查手段 整體undo使用情況 select b.tablespace name,nvl used undo,0 used undo m total undo total undo m tru...
表空間使用率查詢
select a.file id 檔案號,a.tablespace name 表空間名稱,b.file name 物理檔名,b.autoextensible 自動擴充套件,b.maxbytes 1024 1024 1024 最大空間g,total 1024 1024 表空間mb,free 1024 ...