oracle undoautotune,温故知新 - UNDO,UNDO_RETENTION 及 _undo_autotune
Undo一個重要用途就是在對數據進行修改時候,能將數據塊中被修改前的數據(注意
不是數據塊,一般被稱為before image)保存到回滾段中。回滾時就可以取出還原。
UNDO還有其他用途,如一致性讀、閃回功能(Flashback Database及flashback drop
[recyclebin]除外)等。
-- UNDO的幾種狀態:
active - 活動狀態的回滾段,不能夠被覆蓋或者是離線(offline)
inactive - 當事務提交或者是回滾之后,對應的回滾區則標記為非活動(Inactive)狀態
處于非活動狀態的回滾區不再為數據回滾或是數據庫恢復等功能所用,但是UNDO的其它
如一致性讀和閃回等功能卻還是有可能用到這些回滾段。因此處于Inactive的回滾區也
并不意味著就可以馬上被覆蓋,這個需要取決于UNDO的RETENTION的設置(undo_retention)。
--UNDDO_RETENTION
在事務提交或回滾之后,因為flashback或一致讀的需求,還需要將對應的UNDO數據
保存在UNDO表空間中一段時間,這個時間就是由undo_retention來設置的。
根據UNDDO_RETENTION可以繼續將UNDO的inactive狀態劃分為EXPIRED,UNEXPIRED兩類,
undo中超過undo_retention時間之外的inactive undo回滾區稱為expired, 還處于
unod_retention時間之內的inactive undo回滾區稱為unexpired .
--RETENTION GUARANTEE
UNDO_RETENTION不是說必須達到這個時間后才能被覆蓋,而只是一個期望值,比如UNDO
表空間文件設置為非自動擴展,當一個大事務需要將undo中未使用的區域及過期的undo
區域都使用完了,而UNDO空間不能自動擴展,這時保證事務順利運行優先級比較高,UNDO
中沒有過期的回滾區也會被覆蓋使用(從其中使用時間越早的開始),也就是說retention
設置的時間段內的UNDO非過期數據是沒有保證的。10g開始提供參數RETENTION GUARANTEE
設置在tablespace的屬性中,那么未過期的UNDO數據就不會再被覆蓋掉了。但是設置屬性
RETENTION GUARANTEE,UNDO空間不足時很可能造成事務失敗,所以一般不會設置。
_UNDO_AUTOTUNE
從10g開始,Oracle提供了UNDO自動優化功能,就是在UNDO表空間非自動增長的情況下,
Oracle會根據UNDO表空間的大小來調整UNDO RETENTION的大小,自動調整RETENTION就是
最大限度的利用當前UNDO表空間的可用空間,盡可能的保留最多的UNDO數據,以最大化的
減少類似ORA-01555 等錯誤發生。在這種情況下的UNDO RETENTION就基本沒有用處了。
默認情況下 _UNDO_AUTOTUNE =TRUE, 開啟UNDO自動優化功能。經過優化的UNDO RETENTION
可以在V$UNDOSTAT的? TUNED_UNDORETENTION 中看到, 一般oracle每10分鐘寫一條unod表
空間使用情況記錄到V$UNDOSTAT, 包括 TUNED_UNDORETENTION 。
總結
以上是生活随笔為你收集整理的oracle undoautotune,温故知新 - UNDO,UNDO_RETENTION 及 _undo_autotune的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux系统中使用oracle透明网关
- 下一篇: oracle 5632,17、oracl