星期四, 12月 01, 2011
undo tablespace 心得
當進行update record期間,還未下commit 時,table中舊的資料會被放在undo
tablespace,如果執行rollback,即可將舊資料還原,但如果做完commit後,資料就會被
寫到redo中,但實際寫入datafile時機決定於何時執行checkpoint
簡單解釋:
如果1 已經被修改成2, 尚未commit
1會被放在undo
所有修改紀錄都會放在redo
commit 之後,
已經執行的SQL 仍能查到, 1
重新執行的SQL 會查到2
-
2012.4. 最近發現redo 不僅僅只寫入committed data , 連其中修改的過程也會紀錄
-
設定undo tablespace management,且自動管理
UNDO_TABLESPACE = undotbs_01 -> 指定tablespace name
UNDO_MANAGEMENT = AUTO ->auto /manual
-
alter tablespace undotbs_01 reteneion guarantee;
undo_retention : 900
完成commited的交易會被存放在undo tablespace 15min 後才會被overidden
此特性搭配flashback query 就可以查詢到已被commit的交易紀錄,
flashback query用於row-level recovery from user errors.
UNDO_MANAGEMENT
If AUTO, use automatic undo management mode. If MANUAL, use manual undo
management mode.
UNDO_TABLESPACE
A dynamic parameter specifying the name of an undo tablespace to use.
UNDO_RETENTION
A dynamic parameter specifying the length of time to retain undo. Default is
900 seconds(9iR1)
undo_retention=10800(s)(9iR2)
--
http://www.itpub.net/thread-822957-1-1.html
在Auto Undo tablespace Management模式下,UNDO_RETENTION參數用以控制事務提交以後
undo信息保留的時間。該參數
以秒為單位,9iR1初始值為900秒,在Oracle9iR2增加為10800秒。但是這是一個NO
Guaranteed的限制。也就是說,如果有其他事務需要回滾空間,而空間出現不足時,這些
信息仍然會被覆蓋。很多時候這是不希望看到的。
從Oracle10g開始,如果你設置UNDO_RETENTION為0,那麼Oracle啓用自動調整以滿足最長
運行查詢的需要。當然如果空間不足,那麼Oracle滿足最大允許的長時間查詢。而不再需
要用戶手工調整。同時Oracle增加了Guarantee控制,也就是說,你可以指定UNDO表空間
必須滿足UNDO_RETENTION的限制。
SQL> alter tablespace undotbs1 retention guarantee;
Tablespace altered
SQL> alter tablespace undotbs1 retention noguarantee;
Tablespace altered
在DBA_TABLESPACES視圖中增加了RETENTION字段用以描述該選項:
SQL> select tablespace_name,contents,retention from dba_tablespaces;
TABLESPACE_NAME CONTENTS RETENTION
------------------------------ --------- -----------
SYSTEM PERMANENT NOT APPLY
UNDOTBS1 UNDO NOGUARANTEE
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言