星期四, 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

沒有留言:

LinkWithin-相關文件

Related Posts Plugin for WordPress, Blogger...