Oracleロールバックセグメント


ロールバックセグメントと表領域の例

ロールバックセグメント

Oracleのテキストに出てくる円形の概念図は一つのセグメントだけを 表している。そこで、専用の表領域に複数ロールバックセグメントを 持つSAP R/3を参考にして、上記のような例を描いてみた。 例からわかることは以下のとおり。

さらに、管理者として理解しておかなければならない動作は 以下のとおり。

エラー別対処法

ORA-1650 : unable to extend rollback segment <Segment> by <N> in tablespace <TableSpace>

意味 あるロールバックセグメントが表領域を使い切ってしまい、 エクステント拡張できなかった。
対処 更新処理のcommit頻度を上げる。表領域を拡張する。

ORA-1628 : max # extents (N) reached for rollback segment <Segment>

意味 あるロールバックセグメントがMAXEXTENTSに達してしまい、 エクステント拡張できなかった。
対処 更新処理のcommit頻度を上げる。全てのロールバック セグメントのMAXEXTENTSを大きくする(オンラインで実施可)。

ORA-1555 : snapshot too old: rollback segment number <Number> with name "<Segment>" too small

意味 非アクティブになったbefore image Aが、他の更新処理の before image Bで上書きされてしまい、Aを参照し続けていた select処理に対して読み取り一貫性が保証できなくなった。
対処 長すぎるselect処理を短くする(最優先)。 ロールバックセグメントの数を増やす。 MINEXTENTSを大きくする、またはINITIAL,NEXTを大きくする (ロールバックセグメントの作り直しが必要となる)。

診断

v$rollstatのカラムhwmsizeは、Oracleインスタンスが 起動してから現在までで、ロールバックセグメントが 最も大きくなったときのサイズを示す。
SVRMGR> select rssize, hwmsize
     2> from v$rollstat;
RSSIZE     HWMSIZE
---------- ----------
    729088     729088
   5316608   14901248
   5316608    5316608
   5316608    8511488
   5300224    5300224
   5316608    7446528
   5316608  201129600
   5316608   55369728
   5316608   83058688
  60694528   60694528
   5316608   10641408
   5316608   12771328
   5316608    7446528
   5316608   25550848
   5316608   14901248
   5316608   70279168
   5316608   12771328
   5316608  129916928
   5316608   24485888
   5316608    5316608
   5316608    5316608
21 rows selected.
上の例では、最も大きくなったものでも200MBほどなので、 しばらくはORA-1628(MAXEXTENTS到達)の心配は無い。 ORA-1650(表領域あふれ)については、大きな更新の 同時発生数にも依存するので、上記の情報からだけでは なんともいえない。

関連するディクショナリとビュー


2001/9/24 Taikou Yamada (t-yamada@ceres.dti.ne.jp)