Oracleのスキーマオブジェクトを活用するORACLE MASTER Bronze DBA講座(10)

Oracleデータベースエンジニアとしての実力を証明するORACLE MASTER資格。その入り口であるBronze資格の取得は難しくない。本連載と、同時掲載中の連載「Bronze SQL基礎I 講座」で合格を目指そう!(参考記事:「Oracle 10g対応のORACLE MASTERとは?」)

» 2006年02月17日 00時00分 公開
[有限会社 G.F.インフィニティ (Project - ∞)]

 前回に引き続き、スキーマオブジェクトの管理について学びます。前回「Oracleの表の作成とビューの利用」では、表の作成と変更、ビューの管理について紹介しました。今回はそのほかのスキーマオブジェクトの作成と変更、Oracle Enterprise Managerを使用したスキーマオブジェクトの管理を学びましょう。

理解しておきたいこと

1.確認しておきたい内容

  • 表、ビュー以外のスキーマオブジェクトの作成と変更
  • Enterprise Managerを使用した表へのデータのロード

2.索引の作成

 本などで単語について調べる場合、索引から単語を探してページを確認してから、実際のページを開くと思います。データベースも同じで、列に索引を付けることができます。

 索引は列値と行へのポインタを別領域に保存しています。行にアクセスするときはまず索引からポインタを取得してから実際にアクセスを行います。索引の作成は、大規模な表から少ない行を頻繁に取得する場合などに適しています。

 しかし、行が更新されると索引も自動的に更新されるため、負荷がかかります。そのため、更新が頻繁に行われる表の場合は、索引の作成は慎重に行う必要があります。

 主キー制約と一意キー制約を使用する場合にも索引が必要です。Oracleデータベースでは、主キー制約と一意キー制約を宣言した列に索引が存在しない場合、一意索引が自動作成されます。

3.常駐型プログラムユニット

 Oracleデータベース内にコンパイルして格納したプログラムを「常駐型プログラムユニット」と呼び、PL/SQLまたはJavaで作成することができます。常駐型プログラムユニットには次のものがあります。

常駐型プログラムユニット 説明
プロシージャ 実行形式で使用するプログラム。サブルーチン。パラメータを使用して値を渡すことも戻すこともできる
ファンクション 文の一部として使用するプログラム。関数。渡す値は複数あってもよいが、戻す値は1つのみ
パッケージ プロシージャやファンクション、変数、データ型などをまとめたもの。パッケージ仕様部(外部からの呼び出し方法)とパッケージ本体(実際のコード)の2つのオブジェクトで構成される
データベーストリガー データベースの表やビュー、イベント(DMLや起動や停止など)に関連付けられたプログラム。イベントによって自動起動する

問題

問題1

データベース内に格納されるプログラム構造体を4つ選択しなさい。

a.トリガー
b.インデックス
c.パッケージ
d.プロシージャ
e.ファンクション
f.シノニム

正解:a、c、d、e

解説

 前回、宿題とした問題です。Oracleデータベースのプログラム構造は正解のとおりです。

 不正解となったオブジェクトを確認しましょう。

選択肢b:インデックス(索引)はプログラムとは異なります。表から行を取得するとき、索引オブジェクトに格納したポインタを使用して必要な行のみにアクセスさせることができます。

選択肢f:シノニムは、オブジェクトに対する別名です。こちらもプログラムとは無縁です。

問題2

元本資金と貸し出し期間、利息率を使用して固定資産を導き出す必要があります。この処理を行うに当たり、適切な構造体を選択しなさい。

a.パッケージ
b.トリガー
c.インデックス
d.ファンクション
e.シノニム
f.ビュー

正解:d

解説

 Oracleデータベースにおいて、プログラムを使用した構造体には、パッケージ、プロシージャ、ファンクション、トリガーがあります。今回の問題のように計算を行うプログラムが必要であれば、ファンクションを使用するのが適切です(正解d)。

 SQL文内でSYSDATEなどの関数が使用できるように、SQL文内で使うことも考えているのであれば、ファンクションを作成しましょう。逆に、SQL文で使うことは考えておらず、ほかのプログラムから呼び出して処理を行うだけならば、プロシージャを作成した方がよいでしょう。

 不正解となるオブジェクトタイプは次のように解釈できます。

選択肢a:プロシージャやファンクションが複数あり、同じタイミングで使われるのであれば、パッケージとしてグループ化することを検討します。

選択肢b:表に対してDMLが行われたら自動的に起動するようなロジックが必要であれば、トリガーを検討します。トリガーは表だけでなく、ビューやデータベースイベント(データベースの起動/停止、ログオン/ログオフ)に関連付けて作成できます。

選択肢c:行の抽出を高速化させるため、行にポインタを付けたいときにインデックスを作成します。

選択肢e:複雑なオブジェクト名に単純な名前を付けたい場合や、ほかのスキーマオブジェクトにアクセスするときの「スキーマ名.オブジェクト名」の代わりとなる名前が必要な場合に、シノニムを作成します。

選択肢f:表の特定の列や特定の行のみにアクセスを許可したい場合や、毎回複雑なSELECT文を記述したくない場合に、ビューを作成します。

4.Database Controlを使用したスキーマオブジェクトの管理

 Database Controlを使用してオブジェクトを確認する場合、「管理」タブ→「スキーマ」リージョン内のリンクを使用します(図1)。

図1 Database Controlを使用したオブジェクトの確認(クリックで全体を表示します) 図1 Database Controlを使用したオブジェクトの確認(クリックで全体を表示します)
図2 Database Controlを使用したデータのロード(クリックで全体を表示します) 図2 Database Controlを使用したデータのロード(クリックで全体を表示します)

 Database Controlを使用してデータのロードを行うこともできます。この場合、「メンテナンス」タブ→「ユーティリティ」リージョンの「ファイルからデータをロード」を使用します(図2)。

 ここからSQL*Loaderを使用してデータのロードを行うことができます。データのロードを行うときは、SQL*Loaderの制御ファイル(どのようにデータをロードするかを定義したファイル)とSQL*Loaderのデータファイル(ロードするデータを格納したファイル)を使用します。

問題

問題1

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

資料にあるようにアクション「データの表示」を実行した結果を選択しなさい。

a.employees表の定義が表示される
b.employees表のすべての行が表示される
c.employees表のすべての行とSELECT文が表示される
d.employees表の行数が表示される

正解:c

解説

 Database Controlを使用して各種ページにアクセスしていれば、簡単に解ける問題ですね。

 問題で使用しているのは、「管理」タブ→「スキーマ」リージョンの「表」リンクからアクセスしたページです。「アクション」リストにて「データの表示」を実行すると、次の結果が表示されます(図3)。

図3 「アクション」リストから「データの表示」を実行(クリックで全体を表示します) 図3 「アクション」リストから「データの表示」を実行(クリックで全体を表示します)

 つまり、正解cのようにSELECT文と結果が表示されるわけです。

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

選択肢a:employees表のビューページで表示します。資料にも見えている「ビュー」ボタンをクリックすると列、制約などを確認できます(図4)。

図4 employees表のビューページ(クリックで全体を表示します) 図4 employees表のビューページ(クリックで全体を表示します)

選択肢b:「データの表示」ページに表示されますが、同時にSELECT文も表示されるので、この問題の回答としては正解cの方が適切です。

選択肢d:行数だけを確認することは、「データの表示」ページでもできません。SQL*PlusやiSQL*Plusを使用して、SELECT COUNT(*) FROM employees文を発行しましょう。

問題2

SQL*Loaderにてデータをロードする際に使用されるファイルを2つ選択しなさい。

a.ログファイル
b.制御ファイル
c.ダンプファイル
d.データファイル
e.パラメータファイル

正解:b、d

解説

 SQL*Loaderを使用することで、外部ファイル(CSV形式のデータや固定長で区切られたホストデータなど)を表にロードすることができます。どのようにロードするかを記述した「制御ファイル」とデータが格納された「データファイル」を使用します。

・制御ファイル:dept.ctl

LOAD DATA
INFILE 'dept.dat'
APPEND
INTO TABLE dept
(DEPTNO POSITION(01:02) INTEGER EXTERNAL,
 DNAME  POSITION(04:28) CHAR,
 LOC    POSITION(30:43) CHAR)

・データファイル:dept.dat

60 ACCOUNTING                NEW YORK
70 RESEARCH                  DALLAS
80 SALES                     CHICAGO
90 OPERATIONS                BOSTON

 これらのファイルをDatabase Controlの「ファイルからデータをロード」ページを使用して指定するか、sqlldrコマンドラインツールを使用するかしてロードを行うことができます。

 選択肢aはロード後に作成されます。どのようにロードされたかというログを確認することで、エラーとなったデータなどの確認ができます。

 選択肢cと選択肢eは、SQL*Loaderでは使用されない用語です。エクスポートやインポートといった処理では選択肢cのダンプファイルという用語が使用されます。

まとめ

 前回と今回の2回にわたって、スキーマオブジェクトの管理について解説しました。次の内容をチェックしておきましょう。

  • 各種データ型の特徴(文字列データとしてのCHARとVARCHAR2の違いなど)
  • 各種制約の違い
  • ビューの特徴(データとしての領域は使用されないなど)
  • 常駐型プログラムユニットの違い(プロシージャ、ファンクション、パッケージ、トリガー)
  • 常駐型プログラムユニットの使用目的(計算プログラムならファンクションなど)
  • Database Controlの各種ページの結果
  • SQL*Loaderによるデータのロード時に使用されるファイルについて(制御ファイルとデータファイルなど)

宿題

 次回は、「バックアップ/リカバリの実行」を確認します。次の宿題を解いておいてください。

NOARCHIVEモードでのバックアップの特徴を3つ選択しなさい。

a.すべてのREDOログファイルが適用済みとなる
b.すべての制御ファイルの変更が適用済みとなる
c.インスタンスが停止している必要がある
d.インスタンスが起動している必要がある
e.データファイルの障害からリカバリできる
f.インスタンスの障害からリカバリできる

IT資格試験の模擬問題をWebベースで学習できる@IT自分戦略研究所の新サービス「@IT資格攻略」では、Oracle関連の資格をテーマとして取り上げています。Bronze SQL 基礎 I、Bronze DBA 10gも近日中に追加予定です。「無料お試し版」もありますので、記事と併せてご覧ください。



Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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