oracle10 dba_tablespace中的retention

oracle_ace發表於2008-03-03

oracle10g中,針對dba_tablespace,加了其中一個額外列是retention.

回憶一下Oracle 10g之前,在自動Undo管理的模式下,我們都知道undo_retention引數的作用是用來控制當transaction被commit之後,undo資訊的保留時間。這些undo資訊可以用來構造consistent read以及用於一系列的閃回恢復,而且足夠的undo資訊還可以減少經典的ORA-01555錯誤的發生,在Oracle 9R1中呢,這個value的預設值是900秒,Oracle 9R2以後這個value提高到了10800秒。即使我們設定了undo_retention這個引數,那麼在預設情況下,這是一個noguarantee的限制。也就是說我將undo_retention=10800,那麼原本以為在一個transaction commit之後,之前的undo還可以儲存10800秒,才可以被別的transaction DML覆蓋,孰不知當有其他的transaction DML處理過程中需要undo空間的時候,恰恰這個時候not enough space for undo,也就說我並沒有允許undo tablespace自動擴充套件。由於我們的retention是noguarantee的,所以transaction DML就會忽略這種retention的時間限制直接回繞覆蓋我們的undo資訊,這種結果下其實在很多情況下是不希望得到的。

Oracle 10g之後,oracle提出了一個特性就是undo的guarantee,可以強制oracle來guarantee的undo資訊,也就說如果一個session的transaction DML需要undo空間的時候,即使undo的空間不足,這個session也不會強制覆蓋由undo_retention所保護的undo資訊,那麼這個transaction DML會因為undo空間的不足會而report一個error並自動退出。

在Oracle10g中如何要修改guarantee模式可以

SQL> select tablespace_name,block_size,extent_management
  2  segment_space_management,contents,retention
  3  from dba_tablespaces;

TABLESPACE_NAME                BLOCK_SIZE SEGMENT_SP CONTENTS  RETENTION   BIG
------------------------------ ---------- ---------- --------- ----------- ---
SYSTEM                               8192 LOCAL      PERMANENT NOT APPLY   NO
UNDOTBS1                             8192 LOCAL      UNDO      NOGUARANTEE NO
SYSAUX                               8192 LOCAL      PERMANENT NOT APPLY   NO
TEMP                                 8192 LOCAL      TEMPORARY NOT APPLY   NO
USERS                                8192 LOCAL      PERMANENT NOT APPLY   NO
EXAMPLE                              8192 LOCAL      PERMANENT NOT APPLY   NO
TEST                                 8192 LOCAL      PERMANENT NOT APPLY   NO
UNDO_SMALL                           8192 LOCAL      UNDO      NOGUARANTEE NO
RBTEST                               8192 LOCAL      PERMANENT NOT APPLY   NO
MYALAN                               2048 LOCAL      PERMANENT NOT APPLY   NO
ALAN_SPACE01                         8192 LOCAL      PERMANENT NOT APPLY   NO
ALAN_SPACE02                         8192 LOCAL      PERMANENT NOT APPLY   NO
ALAN_SPACE03                         8192 LOCAL      PERMANENT NOT APPLY   NO
LMT                                  8192 LOCAL      PERMANENT NOT APPLY   NO
MYTEST                               8192 LOCAL      PERMANENT NOT APPLY   NO
MSSM                                 8192 LOCAL      PERMANENT NOT APPLY   NO
MYSTOCKS                             8192 LOCAL      PERMANENT NOT APPLY   NO

SQL> alter tablespace undo_small retention guarantee;

表空間已更改。

SQL> select tablespace_name,block_size,extent_management
  2  segment_space_management,contents,retention
  3  from dba_tablespaces;

TABLESPACE_NAME                BLOCK_SIZE SEGMENT_SP CONTENTS  RETENTION
------------------------------ ---------- ---------- --------- -----------
SYSTEM                               8192 LOCAL      PERMANENT NOT APPLY
UNDOTBS1                             8192 LOCAL      UNDO      NOGUARANTEE
SYSAUX                               8192 LOCAL      PERMANENT NOT APPLY
TEMP                                 8192 LOCAL      TEMPORARY NOT APPLY
USERS                                8192 LOCAL      PERMANENT NOT APPLY
EXAMPLE                              8192 LOCAL      PERMANENT NOT APPLY
TEST                                 8192 LOCAL      PERMANENT NOT APPLY
UNDO_SMALL                           8192 LOCAL      UNDO      GUARANTEE
RBTEST                               8192 LOCAL      PERMANENT NOT APPLY
MYALAN                               2048 LOCAL      PERMANENT NOT APPLY
ALAN_SPACE01                         8192 LOCAL      PERMANENT NOT APPLY
ALAN_SPACE02                         8192 LOCAL      PERMANENT NOT APPLY
ALAN_SPACE03                         8192 LOCAL      PERMANENT NOT APPLY
LMT                                  8192 LOCAL      PERMANENT NOT APPLY
MYTEST                               8192 LOCAL      PERMANENT NOT APPLY
MSSM                                 8192 LOCAL      PERMANENT NOT APPLY
MYSTOCKS                             8192 LOCAL      PERMANENT NOT APPLY

需要注意的是這種guarantee模式只針對undo tablespace別的表空間是不適用的。

在Oracle 10g中我們還可以設定undo_retention=0來讓Oracle自動調整保留提交後undo資訊的時間。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12361284/viewspace-199208/,如需轉載,請註明出處,否則將追究法律責任。

相關文章