連載
» 2007年01月16日 00時00分 公開

ORACLE MASTER Silver DBA講座(5):Oracleデータベースの記憶域はどうなっている?

ORACLE MASTER資格の中級に位置付けられ、取得すればOracle技術者としてグローバルに認定される「ORACLE MASTER Silver Oracle Database 10g」。例題を利用してポイントを押さえ、確実な合格を目指そう!

[有限会社 G.F.インフィニティ (Project - ∞)]

 本連載第3回「Oracleデータベースの制御ツールを使い倒す」、第4回「Oracleデータベースの起動と停止を押さえよう」で、データベースの制御について学びました。今回は、記憶域の構造について紹介します。

記憶域の構造

ポイント

 表領域とデータファイル、表領域の管理などが対象となります。表領域の変更・削除の際の特徴や使用オプションについても押さえておきましょう。

表領域とデータファイル

 Oracleサーバでは、データは論理的には表領域に格納され、物理的にはデータファイルに格納されます。

図1 表領域とデータファイル 図1 表領域とデータファイル

 表領域のサイズは、対応付けられたデータファイルの合計サイズになります。

 領域を確保して保存する必要のあるオブジェクトは「セグメント」と呼ばれます。表や索引などはセグメントです。実際の領域割り当ては、データファイル内に「エクステント」という単位で獲得することで行われ、セグメントの領域拡張(追加領域割り当て)にも対応します。エクステントは「データブロック」で構成され、実際のレコードはデータブロックに格納されています。

 エクステントの割り当て管理方法によって、表領域は2種類に分けられます。

  • ディクショナリ管理表領域
    エクステントの管理は、データディクショナリによって行われます。エクステントの割り当て/解除が行われるとデータディクショナリが更新されるため、内部的なSQL(再帰的SQL)の発行が多くなります。
  • ローカル管理表領域
    エクステントの管理は、データファイルのヘッダに格納されるビットマップという領域で行われます。ビットマップは、エクステントの割り当て/解除が行われると変化するようになっています。ディクショナリ管理表領域と異なり、ディクショナリアクセスがいらないため、内部的なSQL(再帰的SQL)は不要です。

 デフォルトの表領域はローカル管理表領域です。SYSTEM表領域がディクショナリ管理表領域として作成された場合に限り、ディクショナリ管理を使用することができます。

 ローカル管理表領域の場合、さらにセグメント内の空き領域管理方法として次の2種類があります。

  • 手動セグメント領域管理
    セグメント内の空き領域管理に空きリストを使用する方法です。空きリストは、行が挿入されるデータブロックの決定のために使用されるリストです。空きリストの数は、セグメント属性FREELISTSとFREELIST GROUPSで決定されます。データブロック内の使用済み領域がセグメント属性PCTUSEDを下回ると、空きリストに登録されます。
  • 自動セグメント領域管理
    セグメント内の空き領域管理にセグメント内のビットマップブロックを使用する方法です。行の挿入時や削除時にメンテナンスされるため、空きリストを使用しません。従って、セグメント属性FREELISTS、FREELIST GROUPS、PCTUSEDは設定できません(設定しても無視されます)。

 Oracle Database 10g Release1までは手動セグメント領域管理がデフォルトですが、Oracle Database 10g Release 2より、自動セグメント領域管理がデフォルトになります。

表領域の変更

 既存の表領域に対して、さまざまな変更を行うことができます。次のような特徴を覚えておきましょう。

  • ステータス
    READ WRITE(読み込みと書き込みが可能)、READ ONLY(読み込みのみ可能)、OFFLINEの3つがあります。READ ONLYは、SYSTEM表領域とSYSAUX表領域に対して指定することはできません。表領域をOFFLINEにする際、IMMEDIATE(即時)オプションを使用すると、次回ONLINEに戻すときにリカバリが必要になります。
  • サイズ変更
    表領域のサイズを大きくする方法として、表領域にデータファイルを追加する方法と、既存のデータファイルサイズを大きくする方法の2つがあります。既存のデータファイルを大きくする方法には、手動と自動(AUTOEXTEND ON)があります。既存のデータファイルを小さくすることも可能ですが、使用されているサイズよりも小さくすることはできません。

表領域の削除

 表領域を削除する場合、その表領域に格納されているセグメントも同時に削除する必要があります。デフォルトでは空の表領域のみ削除することができます。次のようなオプションを使用することで、この動作を変更できます。

  • INCLUDING CONTENTS句
    表領域に格納されているセグメントも同時に削除します。
  • INCLUDING CONTENTS AND DATAFILES句
    表領域に格納されているセグメントと、表領域に対応付けられているデータファイルも同時に削除します。

問題

問題1

次のコマンドを確認してください。

SQL> DROP TABLESPACE tbs01 INCLUDING CONTENTS;

このコマンドの特徴を2つ選択しなさい。

a.表領域に含まれるセグメントが存在する場合はエラーとなる
b.表領域に含まれるセグメントを含めて、表領域の定義が削除される
c.表領域の定義とデータファイルが削除される
d.デフォルト一時表領域に設定されている表領域の場合はエラーとなる

正解:b、d

解説

 前回、宿題とした問題です。

 DROP TABLESPACEコマンドにINCLUDING CONTENTS句が指定されているため、セグメントを含む表領域も削除されます。この場合、セグメントは表領域と同時に削除されます(正解b)。

 ただし、対象となる表領域がデフォルト永続表領域、デフォルト一時表領域に設定されている場合はエラーとなります(正解d)。その場合は、事前に別の表領域をデフォルト永続表領域、デフォルト表領域に設定しておき、削除します。現在の設定を確認するにはDATABASE_PROPERTIESビューを使用します。

SQL> SELECT property_name,property_value
  2  FROM   database_properties
  3  WHERE  property_name LIKE 'DEFAULT%';
PROPERTY_NAME                  PROPERTY_VALUE
------------------------------ --------------------
DEFAULT_TEMP_TABLESPACE        TEMP
DEFAULT_PERMANENT_TABLESPACE   USERS
DEFAULT_TBS_TYPE               SMALLFILE

 そのほかの選択肢の不正解の理由は次のとおりです。

選択肢a:DROP TABLESPACEコマンドによる表領域削除では、表領域にセグメントが含まれ、かつINCLUDING CONTENTS句を指定しない場合にエラーとなります。

選択肢c:データファイルも同時に削除するには、INCLUDING CONTENTS AND DATAFILES句を指定します。なお、Oracle Managed Files(OMF)で作成されたデータファイルの場合、INCLUDING CONTENTS AND DATAFILES句を指定しなくても削除されますが、問題文にはOMFで作成されたという前提条件は記述されていないため、不正解になります。

問題2

次の資料を確認してください。

SQL> SELECT property_name, property_value FROM database_properties
  2  WHERE  property_name LIKE 'DEFAULT%';
PROPERTY_NAME                PROPERTY_VALUE
---------------------------- ------------------------------
DEFAULT_TEMP_TABLESPACE      TEMP
DEFAULT_PERMANENT_TABLESPACE USERS
DEFAULT_TBS_TYPE             SMALLFILE

次のようにユーザーを作成し、表を作成しました。

SQL> CREATE USER pub1 IDENTIFIED BY oracle
  2  TEMPORARY TABLESPACE temp;
SQL> CREATE TABLE pub1.tab1 (col1 NUMBER);

TAB1表が作成される表領域を選択しなさい。

a.SYSTEM
b.SMALLFILE
c.TEMP
d.USERS

正解:d

解説

 DATABASE_PROPERTIESビューで確認されるDEFAULT_PERMANENT_TABLESPACEプロパティは、デフォルト永続表領域を表します。デフォルト永続表領域は、データベースレベルで設定されたデフォルト表領域です。

 問題のように、ユーザー作成時に明示的にデフォルト表領域を指定しない場合は、この表領域がデフォルトの表領域になります。このユーザーがセグメントを作成するとき、明示的に表領域を指定していないため、デフォルト表領域であるUSERS表領域が使用されることになります(正解d)。

 なお、セグメントを作成するためには、表領域への領域割り当て(QUOTA)が必要です。この問題ではユーザーの作成後、RESOURCEロールを付与したか、ユーザー変更にてQUOTAを設定したと考えてください。

問題3

USERS表領域の領域が不足した場合に、データファイルのサイズが大きくなるようにする方法を選択しなさい。

a.自動セグメント領域管理を使用する
b.デフォルト表領域を使用する
c.データベースにAUTOEXTENDの設定を行う
d.データファイルにAUTOEXTENDの設定を行う

正解:d

解説

 表領域のサイズは、対応付けられたデータファイルサイズの合計サイズです。そのため、領域を拡大させる方法には次の2つがあります。

  • データファイルを追加する
    ALTER TABLESPACE 表領域名 ADD DATAFILE 'ファイル名' SIZE サイズ;
  • 既存のデータファイルサイズを大きくする
    ALTER DATABASE DATAFILE 'ファイル名'
    AUTOEXTEND ON [NEXT 増分サイズ MAXSIZE 最大サイズ];

 そのほかの選択肢の不正解の理由は次のとおりです。

選択肢a:自動セグメント領域管理は、表領域に格納されるセグメント内のデータを格納するデータブロックの使用方法を自動化する設定です。また、使用できる表領域サイズは手動セグメント領域管理に比べ、管理情報を格納するブロック分、むしろ減少するといえます。

選択肢b:デフォルト表領域は、ユーザーが表や索引といったセグメントを作成するとき、表領域を明示的に指定しない場合に使用される表領域のことです。表領域サイズに関係するものではありません。

選択肢c:自動拡張(AUTOEXTEND)の設定は、データファイルに対して行うものです。データベースレベルで設定できるものではありません。なお、表領域をビッグファイル表領域として作成した場合、表領域に対応付けられるデータファイルは1つだけになるため、表領域に対して自動拡張設定を行うことは可能になります。

宿題

 次回から2回にわたって、「ユーザーの管理」を確認します。次の宿題を解いておいてください。

問題

ユーザーのセッションで頻繁に次のエラーが表示されるという報告がありました。

ORA-02392: CPU使用に対するセッション制限を超過しました。ログオフします。

このエラーを回避するにはどうしたらよいでしょうか。

a.ユーザーに割り当てているプロファイルの定義を変更する
b.DEFAULTプロファイルの定義を変更する
c.RESOURCE_LIMIT初期化パラメータをTRUEにする
d.CPUを追加する

IT資格試験の模擬問題をWebベースで学習できる@IT自分戦略研究所の新サービス「@IT資格攻略」では、「Silver DBA(Oracle10g)」をはじめOracle関連の資格をテーマとして取り上げています。「無料お試し版」もありますので、記事と併せてご覧ください。



Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。