ロールバック・セグメントに関する検証 その1
~ロールバック・セグメントに関する検証 その1 ~
ペンネーム ちゃむ
今回から、ロールバック・セグメントに関する検証を行なう。
<ロールバック・セグメントの役割>
Oracleには、1つ以上のロールバック・セグメントが存在する。ロールバック・
セグメントには、トランザクション処理時の変更前の値が記録される。
この更新前の値を用いて、読取り一貫性、トランザクションのロールバック、
データベースのリカバリ(REDOをあてていくロールフォワードの後にロールバッ
クを行なう)を実現している。
以下に、ロールバック・セグメントが更新前情報を格納しているイメージ図
を示す。
ロールバック・セグメントには、プライベート・ロールバック・セグメントと
パブリック・ロールバック・セグメントがある。
<プライベート・ロールバック・セグメント>
単一のインスタンスでのみ使用可能。起動時に、初期化パラメータの
rollback_segmentsでロールバック・セグメントの指定を行なわないと、online
にならない。
<パブリック・ロールバック・セグメント>
OPS(Oracle Parallel Server)のような複数のインスタンスで使用可能。Oracle
の起動時に、自動的に以下の初期化パラメータの計算式の個数だけ、
ロールバック・セグメントをonlineにする。
CEIL(TRANSACTIONS/TRANSACTIONS_PER_ROLLBACK_SEGMENT)
CEIL(A)ならA以上の最小の整数
例)CEIL(5.1)なら5.1以上の最小の整数なので6
また、パブリック・ロールバック・セグメントをrollback_segmentsで指定して
も、それはちゃんとonlineになる(以下に検証結果を記載)。
ただ、エラーになるわけではないと言いたかった。
1.パブリック・ロールバック・セグメント(r_pub)を作成
SQL> create public rollback segment r_pub tablespace rbs ;
2.初期化パラメータに「r_pub」を追加してOracleを再起動
rollback_segments = (r1, r2, r3, r4,r0,RBS0,r_pub)
3.パブリック・ロールバック・セグメントがONLINEになっている様子
SVRMGR> SHOW PARAMETER rollback_segments NAME TYPE VALUE ----------------------------------- ------- ------------------------------- max_rollback_segments 整数値 30 rollback_segments 文字列 r1, r2, r3, r4, r0, RBS0, r_pub SQL> SELECT SEGMENT_NAME FROM DBA_ROLLBACK_SEGS WHERE STATUS = 'ONLINE' ; SEGMENT_NAME ------------------------------ SYSTEM R0 R1 R2 R3 R4 RBS0 R_PUB
このように、エラーにならずR_PUBがONLINEになっている様子が確認できる。
また、SYSTEMとはシステム・ロールバック・セグメントのことで、通常、特定
のシステム・トランザクションにのみ使用される。このように、初期化パラメ
ータのrollback_segmentsに指定しなくてもONLINEとなる。また、削除もOFFLINE
にもできない。
SQL> ALTER ROLLBACK SEGMENT SYSTEM OFFLINE ; エラー行: 1: エラーが発生しました。 ORA-01597: ロールバック・セグメントをオンライン/オフラインに変更できません。 SQL> DROP ROLLBACK SEGMENT SYSTEM ; エラー行: 1: エラーが発生しました。 ORA-01544: システム・ロールバック・セグメントは削除できません。
ちなみに、システム・ロールバック・セグメントでなくても、ONLINE状態のも
のは削除できない。
SQL> DROP ROLLBACK SEGMENT R0 ; エラー行: 1: エラーが発生しました。 ORA-01545: 指定したロールバック・セグメント R0は使用できません。
また、初期化パラメータの max_rollback_segments のデフォルトは30個であるが、
この場合、30個以上のロールバック・セグメントを初期化パラメータ rollback_segments
で指定するとORA-01599が発生する。
ORA-01599 キャッシュ領域がいっぱいなので、ロールバック・セグメントを獲
得できません。
以上 今年も梅を 茅ヶ崎にて