ORACLE MASTER資格の中級に位置付けられ、取得すればOracle技術者としてグローバルに認定される「ORACLE MASTER Silver Oracle Database 10g」。例題を利用してポイントを押さえ、確実な合格を目指そう!
本連載第3回「Oracleデータベースの制御ツールを使い倒す」、第4回「Oracleデータベースの起動と停止を押さえよう」で、データベースの制御について学びました。今回は、記憶域の構造について紹介します。
表領域とデータファイル、表領域の管理などが対象となります。表領域の変更・削除の際の特徴や使用オプションについても押さえておきましょう。
Oracleサーバでは、データは論理的には表領域に格納され、物理的にはデータファイルに格納されます。
表領域のサイズは、対応付けられたデータファイルの合計サイズになります。
領域を確保して保存する必要のあるオブジェクトは「セグメント」と呼ばれます。表や索引などはセグメントです。実際の領域割り当ては、データファイル内に「エクステント」という単位で獲得することで行われ、セグメントの領域拡張(追加領域割り当て)にも対応します。エクステントは「データブロック」で構成され、実際のレコードはデータブロックに格納されています。
エクステントの割り当て管理方法によって、表領域は2種類に分けられます。
デフォルトの表領域はローカル管理表領域です。SYSTEM表領域がディクショナリ管理表領域として作成された場合に限り、ディクショナリ管理を使用することができます。
ローカル管理表領域の場合、さらにセグメント内の空き領域管理方法として次の2種類があります。
Oracle Database 10g Release1までは手動セグメント領域管理がデフォルトですが、Oracle Database 10g Release 2より、自動セグメント領域管理がデフォルトになります。
既存の表領域に対して、さまざまな変更を行うことができます。次のような特徴を覚えておきましょう。
表領域を削除する場合、その表領域に格納されているセグメントも同時に削除する必要があります。デフォルトでは空の表領域のみ削除することができます。次のようなオプションを使用することで、この動作を変更できます。
次のコマンドを確認してください。
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で作成されたという前提条件は記述されていないため、不正解になります。
次の資料を確認してください。
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を設定したと考えてください。
USERS表領域の領域が不足した場合に、データファイルのサイズが大きくなるようにする方法を選択しなさい。
a.自動セグメント領域管理を使用する
b.デフォルト表領域を使用する
c.データベースにAUTOEXTENDの設定を行う
d.データファイルにAUTOEXTENDの設定を行う
正解:d
表領域のサイズは、対応付けられたデータファイルサイズの合計サイズです。そのため、領域を拡大させる方法には次の2つがあります。
そのほかの選択肢の不正解の理由は次のとおりです。
●選択肢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.