
Oracleエンジニアを目指す
ORACLE MASTER Silver DBAポイント解説
第5回 記憶領域構造とUNDOデータの管理
小野寺智子
2005/3/30
| これまで連載してきた「ORACLE MASTER Goldポイント解説」では第4回までは「PL/SQL」を解説し、第5回以降にDBAの解説を行っている。しかし、2003年10月の資格制度の変更に合わせ、連載タイトルを「新ORACLE MASTER Silver DBAポイント解説」に変更する。そのため、本連載は「ORACLE MASTER Goldポイント解説」で紹介した内容を確認したうえでお読みいただきたい。 |
今回は、前回(「第4回 Oracleの表領域の管理」)解説した表領域の内部構造であるセグメント、エクステント、データ・ブロックについて解説いたします。今回の内容は、前回解説した表領域の構造を頭に入れていると、理解するのが早いと思います。また、Oracle9iからの新機能として、UNDOデータの管理を解説いたします。
■記憶領域構造
記憶領域構造については前回の表領域と同じく、論理的構造、つまりOracle側から見た構造を説明します。記憶領域構造というと難しいような感じを受けますが、Oracleが格納するデータを整理して、使用別にさまざまな領域に格納していると考えると難しくないと思います。例えば、机の中にある文具などを分かりやすいように格納しておけば、すぐに取り出しやすいのと同じかと思います。
●セグメントの種類と特性
Oracleの表領域がどのような構造になっているか、前回の図をここで再度掲載しますので、もう1度確認してください(図1)。
![]() |
| 図1 表領域の構成 |
前回解説したように、セグメントはいくつかのエクステントが集まって構成されています。つまり、Oracleの中に存在する表などのオブジェクトでは、そのオブジェクトを構成するエクステントがすべて集まり、セグメントを構成しているということです。Oracleには、さまざまな種類のセグメントがあります。このセグメントの種類と特性はしっかり覚えてください。
|
||||||||||||||||||||||||
| 表1 セグメントの種類とその特性 |
●記憶領域パラメータの優先順位
セグメントを構成しているエクステントが、どのようにセグメントに割り当てられるかを制御するために、記憶領域パラメータを使用します。なお、記憶領域パラメータがどのような順序で使用されるかは以下のとおりです。
|
||||||||||
| 表2 記憶領域パラメータの優先順位 |
●データ・ブロック
データ・ブロックはOracleが扱う論理的なI/Oの最小単位です。データ・ブロックは1つ以上のOSブロックから構成されています。データ・ブロックは図2のように、大きく分けると「ブロックヘッダ」「空き領域」「データ領域」の3つの層から構成されています。ブロックヘッダには、データ・ブロックのアドレス情報などが格納されています。データ領域には、行データが格納されています。空き領域はデータ・ブロックの中央にあり、データ領域とブロックヘッダの領域拡張のために確保している領域です。
![]() |
| 図2 データ・ブロックの内容 |
データ・ブロックのこれらの領域を制御するには、以下のパラメータを使用します(表3)。INITRANS、MAXTRANSはブロックヘッダ部分のトランザクションの情報を制御し、PCTFREEとPCTUSEDは行データ領域の使用率を制御します。
|
||||||||||
| 表3 データ・ブロック領域管理のためのパラメータ |
●データ・ブロックの空き領域管理
Oracle9iから、データ・ブロックの空き領域管理を自動で行うことができるようになりました。Oracle8iまでは、表3で紹介したパラメータPCTFREEとPCTUSEDに、セグメントに割り当てられているデータ・ブロックの中で、挿入可能なブロックを示すリストの数を指定するパラメータFREELISTSを使用して手動で管理を行っていました。
Oracle9iからは、表領域作成時に、「SEGMENT SPACE MANAGEMENT AUTO」を指定することで自動セグメント領域管理のモードになります。空き領域の管理は従来の空きリストを使用してのものではなく、ビットマップを使用しての管理になります。ただし、自動セグメント領域管理に指定できるのは、ローカル管理の永続表領域のみです。自動セグメント領域管理に設定するとPCTFREEやPCTUSEDのパラメータ値は無視されます。
また、データ・ブロックの3つの領域を適切に設定することによって、「行移行」(図3)や「行連鎖」(図4)といったパフォーマンスに影響を及ぼす動作をなくすことができます。
![]() |
| 図3 行移行 |
![]() |
| 図4 行連鎖 |
●記憶領域に関するデータ・ディクショナリ・ビュー
表領域、データ・ファイル、セグメント、エクステントなどに関する情報はデータ・ディクショナリ・ビューから取得することができます。それらのデータ・ディクショナリ・ビューは以下のとおりです(表4)。
|
||||||||||||
| 表4 記憶領域である表領域、データ・ファイル、セグメント、エクステント間の情報を格納しているデータ・ディクショナリ・ビュー |
●UNDOセグメントの管理
UNDOセグメントは、Oracle8iまではロールバック・セグメントと呼ばれ、データに矛盾がない状態を保ち、読み取り一貫性を実現する役割を持ったセグメントです。Oracle9iからはUNDOセグメントと呼ばれるようになり、自動管理ができるようになりました。以前までは、ロールバック・セグメントの領域が足りなくなった場合、領域を手動で追加したり、領域を割り当てたりしましたが、Oracle9iからはOracle Serverが自動的に管理してくれます。silverDBAの試験では自動で管理する方法を問われます。手動で管理する方法は、試験範囲に含まれないため、説明を割愛させていただきます。
●UNDOセグメントの役割
UNDOセグメントの自動管理の内容を説明する前に、UNDOセグメントにはどのような役割があるのかを説明します。
UNDOセグメントは、トランザクションが発生し、データの変更が行われると、変更中のデータが確定されるまで変更前のデータを格納します。何らかの原因で変更中のデータが確定されなかった場合は、UNDOセグメントに格納していた変更前のデータを戻します。また、変更途中のデータにほかの人がアクセスした場合、まだ確定していないデータを参照させることは大変危険です。ですから、確定している以前のデータを参照できるようにするためにも、以前のデータを格納しておく必要があります。
![]() |
| 図5 UNDOセグメントの役割 |
●自動UNDOの管理
自動UNDO管理に設定した場合は、UNDOセグメントの名前はOracle Serverによって命名されます。また、手動UNDO管理で使用されるパラメータ値はすべて無視されます。自動UNDO管理で使用するパラメータは以下のとおりです。
|
||||||||||
| 表5 自動UNDO管理で使用するパラメータ |
また、「ORA-01555 スナップショットが古すぎます」といったエラーは「UNDO_RETENTION」パラメータ値を増やすことで抑制できます。
●UNDO表領域の作成・変更・切り替え・削除
自動UNDO管理に設定しても、UNDO表領域の作成や削除に関しては、Oracleが自動的に行うことはありません。また、自動UNDO管理でも必要に応じて、UNDO表領域のサイズの変更や切り替えはDBAが手動で行います。
UNDO表領域は、データベース作成時に一緒に作成することもできますが、データベース作成後でも作成可能です。気を付けなければいけないのは、UNDO表領域を削除する場合です。インスタンスで使用中のUNDO表領域は削除できません。別のUNDO表領域に切り替え、現在のトランザクションが完了してから削除を行います。
●自動UNDO管理に関する動的パフォーマンス・ビュー
自動UNDO管理に関する情報は以下のデータ・ディクショナリ・ビュー、動的パフォーマンス・ビューから取得できます。特に、UNDO表領域に関するビューから、UNDO表領域の統計情報や、適切なサイズを検討する際に必要な情報を格納しているビューがあります。
|
||||||||||
| 表6 UNDO表領域の統計情報や、適切なサイズを検討する際に必要な情報を格納しているビュー |
ORACLE MASTER Silver DBAポイント解説 バックナンバー
- 第1回 認証方法とインスタンスの管理
- 第2回 データベースの作成とデータ・ディクショナリ
- 第3回 制御ファイルとREDOログ・ファイルの管理
- 第4回 Oracleの表領域の管理
- 第5回 記憶領域構造とUNDOデータの管理
|
|
|
| スキルアップに役立つ問題を無料で出題 | |
| ITスキル研修4000件、最新情報の検索できます |
キャリアアップ
スポンサーからのお知らせ
・ケ・ュ・チマツ、クヲオ貍シ・ケ・ン・・オ。シ
- - PR -






PHP技術者認定の最上位、ウィザード試験が5月より開始