UNDOに関する検証 その4
<UNDOに関する検証その4>
ペンネーム:クレイジーボーダー
前回は、UNDO表領域の削除を行った。UNDO_RETENTIONで設定した期間内でも
UNDO表領域が削除でき、フラッシュバック問合せができなくなった。
前回紹介できなかったが、UNDO表領域の削除・変更で注意する点がもう1つ
ある。それはSYSTEMロールバック・セグメントについてである。このSYSTEM
ロールバック・セグメントはデータベースを作成すると自動的にシステム表領
域に作成されるが、これはOracleが内部的な処理を実行するために使用される
もので、一般的な用途では使用されない。
データベースを起動させる前に、初期化パラメータ(UNDO_TABLESPACE)を
「”」(2つの一重引用符)に設定すると、使用可能なUNDO表領域に自動的に
割当てて起動する。UNDO表領域が使用可能な状態なら問題ない。
ただし、動的にSQL文から「”」を設定すべきではない。実際に試してみる。
まず、使用可能なテーブルスペースを確認する。
SQL> SELECT TABLESPACE_NAME, STATUS FROM DBA_TABLESPACES; TABLESPACE_NAME STATUS ------------------------------ --------- SYSTEM ONLINE UNDOTBS_01 ONLINE UNDOTBS_02 ONLINE MAG ONLINE MAG2 ONLINE SQL> SHOW PARAMETER UNDO_TABLESPACE; NAME TYPE VALUE ---------------------------------- ----------- ------------------- UNDO_TABLESPACE STRING UNDOTBS_01
現在使用中のUNDO表領域は、UNDOTBS_01である。
ここで、パラメータ値を「”」(2つの一重引用符)に変更する。
SQL> ALTER SYSTEM SET UNDO_TABLESPACE=''; SYSTEM ALTERED.
使用UNDO表領域を確認する。
SQL> SHOW PARAMETER UNDO_TABLESPACE; NAME TYPE VALUE --------------------------------- ----------- --------------------- UNDO_TABLESPACE STRING
VALUEの値が何も入っていない状態になった。現在のロールバック・セグメン
トの使用状態を確認する。
SQL> SELECT N.USN, N.NAME, S.STATUS, S.XACTS 2 FROM V$ROLLNAME N, V$ROLLSTAT S 3 WHERE N.USN = S.USN; USN NAME STATUS XACTS ---------- ------------------------------ --------------- ---------- 0 SYSTEM ONLINE 0
使用しているロールバック・セグメントはSYSTEMだけになっている。
ここで、INSERT文を発行してみる。
SQL> INSERT INTO TBL_MAG1 VALUES (1234, 'MAG_0205'); INSERT INTO TBL_MAG1 VALUES (1234, 'MAG_0205'); * ERROR at line 1: ORA-01552: cannot use system rollback segment for non-system tablespace 'MAG'
やはりSYSTEMしか利用可能になっていなかったのでエラーになってしまった。
ALERTログを見ると以下のようになっていた。
Tue Feb 4 12:13:13 2003 Undo Segment 1 Offlined Undo Segment 2 Offlined Undo Segment 3 Offlined Undo Segment 4 Offlined Undo Segment 5 Offlined Undo Segment 6 Offlined Undo Segment 7 Offlined Undo Segment 8 Offlined Undo Segment 9 Offlined Undo Segment 10 Offlined Undo Tablespace 1 successfully switched out. Tue Feb 4 12:13:13 2003 ALTER SYSTEM SET undo_tablespace='' SCOPE=MEMORY; Tue Feb 4 12:14:59 2003 ***Warning - Executing transaction without active Undo Tablespace
結果、UNDO表領域を変更すると、UNDO表領域(UNDOTBS_02)がオンラインで使用
可能だったにもかかわらず、何も選択されない状態になり、現在使用している
UNDO表領域の割当てを解除してしまった。そのため、SYSTEMロールバック・セ
グメントのみが使用可能な状態になり、エラーになった。
動的に、UNDO_TABLESPACE=”とは設定すべきではないということになった。
っとSYSTEMロールバック・セグメントだけで説明が終わってしまったが、次回
こそ、V$UNDOSTATを使用してUNDO_RETENTIONについて検証していきたい。
以上、NET&COM2003来たる幕張にて