アットウィキロゴ

UNDO管理

 

①UNDO管理

 ・セグメント

  UNDOデータはUNDOセグメントに格納される。

  通常セグメントはユーザにより作成されるが、UNDOセグメントはOracleが自動作成する。

 

 ・管理

  UNDOデータの管理は自動UNDO管理を利用する(できる)

  UNDO表領域を用意して、使用するUNDO表領域を設定するだけで自動でUNDOセグメントが利用できる。

      セグメント数、サイズ、エクステント管理

  旧:ロールバックセグメントを作成し、オンライン化する。

 

  CREATE UNDO TABLESPACE  表領域名

   DATAFILE 'データファイル名'

       AUTOEXTEND ON [NEXT SIZE]

      MAXSIZE UNLIMITE| 最大サイズ

 

  自動UNDOの設定

     ※以下の初期化パラメータを設定

  ・UNDO_MANAGEMENT = AUTO|MANUAL(最低これだけはやる)

  ・UNDO_TABLESPACE = インスタンスでアクティブにするUNDO表領域

 

     ※インスタンスでアクティブに出来るUNDO表領域はひとつだけ

   UNDO表領域は複数作成できるがオンライン化できるのは一つのみ!!

 

②UNDOの保存

  UNDOはトランザクションのロールバック、フラッシュバック問い合わせに使用される。

  UNDOデータは、COMMITされるまでは上書きされない。

  その後は【UNDO保存期間】を設け、出来るだけ上書きしないようにする。

  【UNDO保存期間】

    初期化パラメータ:UNDO_RETENTION = 900秒(15分)

          ※フラッシュバック問い合わせや、読み取り一貫性を考慮して決めること。

     自動UNDO保存チューニングで調整される。UNDO_RETENTIONが小さすぎる場合は適切な値に

     調整される。

     UNDO表領域が十分ではない場合、UNDO_RETENTION内でも上書きされる可能性はある。

  【UNDO保存保障】

    UNDO保存期間中の上書き防止機能

           ※トランザクションが停止されるので要注意!!

 

    alter tablespace 表領域名 retention guarantee;

 

         確認)

    select TABLESPACE_NAME,RETENTION from dba_tablespaces;

          TABLESPACE_NAME  RETENTION
           ---------------- ---------------- ----------------

             UNDOTBS1        NOGUARANTEE

 

③できないこと 

 ・アクティブなトランザクションがある場合は、UNDO表領域は削除できない。

 ・UNDO_TABLESPACEパラメータに存在しない表領域を指定すると起動時にエラーとなる。

 ・変更方法

  alter system set undo_tablespace='' scope=memory;

     ※NULLに設定でSYSTEM表領域に割り当てはできる。

   但し、SYSTEM関連(表領域内のデータ)のUNDOであれば利用されるが、その他ユーザのトランザクション

   には利用できないためエラーとなる。

 ・CREATE Table句でTableSpaceをUNDOを使用できない。

 ・現行インスタンスでアクティブになっているUNDO表領域の確認

  v$parameter

最終更新:2009年12月02日 21:18