Oracleデータベースエンジニアとしての実力を証明するORACLE MASTER資格。その入り口であるBronze資格の取得は難しくない。本連載と、同時掲載中の連載「Bronze SQL基礎I 講座」で合格を目指そう!(参考記事:「Oracle 10g対応のORACLE MASTERとは?」)
Oracleのデータベース記憶域の管理について紹介します。今回取り上げる制御ファイル、REDOログファイルなどのOracleデータベースの構成ファイルは、前回「Oracleインスタンスを管理する」でも詳しく解説しています。
1.確認しておきたい内容
2.制御ファイル
制御ファイルとはOracleデータベースを構成するファイルの1つで、データファイルやREDOログファイルの情報、Oracleデータベースの管理情報を格納したファイルです。制御ファイルが1つあればOracleサーバは運用できますが、ファイルが損失するとOracleサーバをマウントすることができません。そのため、通常は複数のファイルを認識するように多重化(ミラー化)して運用します。
制御ファイルは、CONTROL_FILES初期化パラメータで認識されており、Database Controlの「管理」タブ→「記憶域」リージョンの「制御ファイル」から確認できます。
≪3.REDOログファイル
≫
REDOログファイルには、データベースに対して行われた変更(DML、DDL)が記録され、データベースに障害があったときの回復に使用されます。最低2つのファイルが必要で、1つのファイルにLGWR(ログライタ)が書き出しを行い、満杯になるとログスイッチで別のファイルに切り替えて記録を続けます。
REDOログファイルはこのように循環して使用されるファイルです。循環できることを表すため、REDOログファイルは最低2つのREDOロググループという単位を持ちます。各REDOロググループは最低1つのファイル(REDOログメンバー)を持つように構成されます。
REDOログファイルも制御ファイル同様、損失に備えて、REDOロググループ内に複数のREDOログメンバーを配置すること(多重化)が推奨されています。
ログスイッチが行われると、チェックポイント(データベースへの書き込みを保証するイベント)が発生します。スイッチ先のREDOロググループのチェックポイントが完了していないと書き込みはできません。ARCHIVELOGモードで運用されているデータベースの場合は、アーカイブログファイルが作成されていなければ、同じく次のREDOロググループに書き込みができません。そこでREDOロググループを追加して、ログスイッチまでの時間を稼ぎ、ログスイッチ時の待機を防止することを検討します。
REDOログファイルのグループ追加やメンバー追加は、Database Controlの「管理」タブ→「記憶域」リージョンの「REDOロググループ」から行えます。
グループ1、グループ2、グループ3の順に追加した3つのREDOロググループで稼働しているOracleデータベースがあります。現行のREDOロググループはグループ2です。ここでログスイッチが行われたときの動作を選択しなさい。
a.グループ2が満杯になるとグループ1に切り替えが行われる
b.グループ2が満杯になるとグループ3に切り替えが行われる
c.グループ1に切り替えが行われる
d.グループ3に切り替えが行われる
e.グループ2が上書きされる
正解:d
REDOログファイルでは、グループに対してLGWRが書込みを行い、満杯になると次のグループにログスイッチされます。この問題ではグループ1、グループ2、グループ3の順にREDOログファイルを作成したとのことですから、この順番に循環します。現行がグループ2であれば、ログスイッチ後は正解dのようにグループ3に切り替えが行われます。
Database ControlのREDOロググループページで、ログ順序番号が確認できます。REDOログファイルはこの順に循環します(図2)。
ここではログ順序番号が3791、3789、3790となっていますので、問題と同様、グループ2→グループ3→グループ1の順番で循環します。
ログスイッチは、グループが満杯になったときだけでなく、明示的なログスイッチコマンド(ALTER SYSTEM SWITCH LOGFILE)が発行されたときも行われます。コマンド発行の場合は即時にスイッチしますので、選択肢aと選択肢bのように満杯になっていなくてもスイッチされる可能性があります。選択肢eのように現在のグループが上書きされるには、循環して戻ってくる必要があります。
4.表領域とデータファイル
Oracleデータベースで管理されるデータ(表データ、索引データなど)は、実際にはデータファイル内に格納されます。ただし、データファイルと表や索引が対応付けられているのではありません。データファイルは、表や索引を格納した表領域と対応付けられています(図3)。
1つの表領域は、複数のデータファイルで構成できます。
表領域に格納される表や索引といったオブジェクトは、セグメントと呼ばれます。セグメントは1つの表領域に格納されますが、表領域に対応付けられている複数のデータファイルにまたがることができます。
Oracleデータベースでは、データファイル内の領域割り当ての単位をエクステントと呼びます。エクステントは、データが格納されるデータブロックが連続した状態で割り当てられています。
Database Configuration Assistant(DBCA)を使用して作成されたデータベースでは、次の表領域が作成されます。
表領域名 | 説明 |
---|---|
SYSTEM | データディクショナリや管理データなどを格納する |
SYSAUX | SYSTEM表領域の補助表領域。関連ツールのリポジトリとして使用される |
TEMP | 一時データ(セッション中に使用するメモリ上でソートしきれないときのソートデータなど)が格納される |
UNDOTBS1 | UNDOデータ(変更前に戻すためのデータ)を格納する |
USERS | 非システムユーザーが作成するセグメントを格納する。表や索引を作成するときに表領域が指定されないと、デフォルトでこの表領域が使用されるように構成されている |
EXAMPLE | サンプルをインストールした場合に作成される。HR(人事)データやOE(注文)データなどが格納される |
表領域のサイズは、対応付けられたデータファイルのサイズの合計です。表領域のサイズを拡大させるには、次の3つの方法が使用できます。
表領域の作成や削除、変更などは、Database Controlの「管理」タブ→「記憶域」リージョンの「表領域」から行えます。このページに表示される内容を確認しておきましょう。
UNDOセグメントが格納される表領域を選択しなさい。
a.SYSTEM
b.SYSAUX
c.TEMP
d.UNDOTBS1
e.EXAMPLE
正解:d
Database Configuration Assistant(DBCA)のテンプレートを使用して作成したデータベースでは、UNDOセグメントは正解dのとおりUNDOTBS1表領域に格納されます。
UNDOセグメントは、DMLによる更新時に変更前の値を格納します。変更前のデータは、ロールバック処理と読み取り一貫性のために使用されます。読み取り一貫性とは、変更途中のデータをほかのトランザクションに見せないことにより、更新中のデータを検索しても一貫したデータを提供できるメカニズムです。
そのほかの選択肢の表領域の特徴は次のとおりです。
●選択肢a:データディクショナリや管理データなどを格納します。
●選択肢b:SYSTEM表領域の補助表領域で、関連ツールのリポジトリとして使用されます。
●選択肢c:一時データが格納されます。
●選択肢e:サンプルスキーマをインストールした場合に作成されます。サンプルデータの表や索引が格納されています。
表領域名から機能はイメージできると思いますが、特徴も理解しておくようにしましょう。
次の要件を満たす表領域を作成するためのオプションを3つ選択してください。
a.ローカル管理
b.ディクショナリ管理
c.一時
d.永続
e.UNDO
f.オフライン
g.読み取り専用
h.読み取り/書き込み
正解:a、d、h
表領域の性質に関する問題です。各要件に対応する選択肢は以下のとおりです。
各属性は「表領域の作成」ページで設定できます(図4)。
正解aの「ローカル管理」ではデータディクショナリではなく、データファイルヘッダ内の情報を使用して領域管理が行われます。一方、選択肢bの「ディクショナリ管理」では、データディクショナリを使用して領域管理が行われます。
正解dの「永続」ではセグメントタイプを限定しませんが、選択肢cの「一時」では一時セグメント専用、選択肢eの「UNDO」ではUNDOセグメント専用の表領域になります。
正解hの「読み取り/書き込み」は通常の表領域の状態です。選択肢fの「オフライン」はデータファイル名の変更やリカバリのときに使用される状態で、表領域が使用できなくなります。選択肢gの「読み取り専用」はその名のとおり、表領域内データの変更ができなくなります。参照専用のデータに使用されますが、表領域作成時に設定するのではなく、データを作成してから変更するのが通常です。
自動拡張の設定は、表領域ではなく、データファイルに関する情報です(図5)。
この問題では要件を満たしていませんね。試験では、このような紛らわしい問題が出されることもありますが、惑わされることなく答えられるようにしておきましょう。
表領域が不足したときに、表領域のサイズを大きくする方法を選択しなさい。
a.表領域のステータスをAUTOEXTENDにする
b.表領域の各データファイルにおいて、AUTOEXTENDを有効にする
c.ロギングを有効化する
d.データブロックサイズの自動拡張を有効にする
正解:b
表領域のサイズは、対応付けられたデータファイルで決まります。正解bの操作を行い、領域不足時にデータファイルが自動的に大きくなるようにすれば、表領域サイズも大きくなります。
自動拡張は「ALTER DATABASE DATAFILE ... AUTOEXTEND ON」というコマンドを使用することから、「AUTOEXTENDを有効にする」と表現されることがあります。
不正解となる選択肢を解説しましょう。
●選択肢a:自動拡張は、表領域ではなくデータファイルに関する情報です。
●選択肢c:ロギングは、表領域内データを変更するときのREDOログファイルの生成を表す情報です。リカバリ処理には影響しますが、表領域サイズに影響を与えるものではありません。
●選択肢d:データブロックサイズは、表領域を作成するときに決定する情報です。後からデータブロックサイズを大きくすることはできません。
問題4
データベースの領域を大きくする方法を4つ選択しなさい。
a.表領域を追加する
b.セグメントサイズを大きくする
c.エクステントサイズを大きくする
d.表領域のデータファイルサイズを大きくする
e.「フルになった場合に自動的にデータファイルを拡張」を有効にする
f.表領域にデータファイルを追加する
正解:a、d、e、f
前回、宿題とした問題です。問題3でも解説したとおり、表領域のサイズは、対応付けられたデータファイルのサイズで決定されます。そのため、正解dと正解fの方法を行えば、即時に表領域サイズが大きくなります。また、正解eの自動拡張も領域不足時にデータファイルが大きくなるわけですから、表領域サイズが大きくなることになります。
データベースのサイズはすべての表領域サイズの合計といえます。正解aのように表領域を追加すれば、それだけデータベースのサイズは大きくなります。
不正解となる選択肢を解説しましょう。選択肢bのセグメントは、表や索引など領域が必要なオブジェクトのことで、表領域に格納されます。データベースのサイズとは関連しません。セグメントを大きくするためには、セグメントを構成するエクステントを増やす必要があります。
同じく不正解の選択肢cのエクステントとは、データファイル内の領域割り当ての単位です。データベースのサイズとは関連しません。なお、ローカル管理表領域を使用している場合は、エクステントサイズを大きくすることはできません。
見方によっては、セグメントが大きくなれば格納領域となるデータファイルの自動拡張が作動するともいえるのですが、単純に大きくする方法を問われていますので、深読みせずに答えられるようにしておきましょう。
次の内容をチェックしておきましょう。
次回は、「ユーザーとセキュリティの管理」を確認します。次の宿題を解いておいてください。
新規ユーザーを作成するにあたり、必須な属性を2つ選択しなさい。
a.一時表領域
b.ユーザー名
c.デフォルト表領域
d.パスワード
e.プロファイル
IT資格試験の模擬問題をWebベースで学習できる@IT自分戦略研究所の新サービス「@IT資格攻略」では、Oracle関連の資格をテーマとして取り上げています。Bronze SQL 基礎 I、Bronze DBA 10gも近日中に追加予定です。「無料お試し版」もありますので、記事と併せてご覧ください。
Copyright © ITmedia, Inc. All Rights Reserved.