連載
» 2007年03月23日 00時00分 公開

ORACLE MASTER Silver DBA講座(10):Data PumpとSQL*Loaderによるデータのロード

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

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

 前回「SQLでのデータ操作方法を覚えよう」に引き続き、データの管理方法について学びます。

データの管理:Data PumpとSQL*Loader

ポイント

 Data Pumpを使用したエクスポート/インポート、SQL*Loaderを使用したデータのロードが対象です。Oracle Enterprise ManagerによるGUI画面だけでなく、コマンドラインでの実行オプションも対象となりますので、よく覚えておきましょう。

Data Pumpエクスポート

 Data Pumpエクスポートは、Oracleデータベース内のオブジェクトを高速にアンロードできるユーティリティです。取り出されたデータはData Pumpにより、ダンプファイルとしてファイル化されます。Enterprise Managerだけでなく、expdpコマンドラインユーティリティを使用することもできます。

 次のようなオプションを使用して、アンロードする内容を詳細に指定することができます。

  • エクスポートタイプ
    データベース全体(FULL=Y)、スキーマ(SCHEMAS)、表(TABLES)を指定できます。データベース全体、他スキーマを対象とする場合、EXP_FULL_DATABASEロールが必要です。
  • コンテンツ
    デフォルト(CONTENT=ALL)では、データとメタデータ(定義)の両方がエクスポートされますが、データのみ(CONTENT=DATA_ONLY)、メタデータのみ(CONTENT=META_DATA)とすることもできます。

Data Pumpインポート

 Data Pumpインポートは、Data Pumpエクスポートにより作成されたダンプファイルをOracleデータベースにロードするユーティリティです。Enterprise Managerだけでなく、impdpコマンドラインユーティリティを使用することもできます。

 次のようなオプションを使用して、ロードする内容を詳細に指定することができます。

  • インポートタイプ
    データベース全体(FULL=Y)、スキーマ(SCHEMAS)、表(TABLES)を指定できます。データベース全体、他スキーマを対象とする場合、IMP_FULL_DATABASEロールが必要です。
  • 再マッピング
    スキーマ(REMAP_SCHEMA)、表領域(REMAP_TABLESPACE)、ファイル名(REMAP_DATAFILE)をエクスポート時と異なるものにすることができます。

ダンプファイル

 Data Pumpを使用したエクスポート/インポートでは、サーバ側に置かれるダンプファイルに書き込み、読み込みが行われます。サーバ側のディレクトリを直接指定するのではなく、ディレクトリオブジェクトを使用します。

SQL> CREATE DIRECTORY temp_dir AS 'D:\temp';
ディレクトリが作成されました。
SQL> SELECT * FROM dba_directories
  2  WHERE directory_name='TEMP_DIR';
OWNER      DIRECTORY_NAME       DIRECTORY_PATH
---------- -------------------- --------------------
SYS        TEMP_DIR             D:\temp

 Data Pumpエクスポート/インポートでは、ファイル名に「%U」置換変数を使用することができます。これは01から始まり単純に増加していく固定幅の数字です。複数のファイルが生成される場合に使用します。

SQL*Loader

 SQL*Loaderは、外部ファイルをOracleデータベースにロードするユーティリティです。

図1 SQL*Loader 図1 SQL*Loader

 関連するファイルとして、次のものがあります。

  • 入力ファイル
制御ファイル どのようにロードするかを記述しているテキストファイル。ロードするデータの位置、データ形式などを記述する
データファイル ロードする実際のデータを記述しているテキストファイル。制御ファイルに含めることも可能
  • 出力ファイル
データ ロード条件を満たしたレコードのみ、データベース内の既存テーブルに格納される
ログファイル 成功時も失敗時も生成される。成功時はどのようにロードしたかが、失敗時はどのようなエラーが発生したかが記録される
不良ファイル Oracleデータベースにロードが拒否されたレコードが格納される。制約に違反したり、データ型が異なっていたり、最大サイズを超過していたりする場合、そのレコードはロードされず、不良ファイルにコピーされる
廃棄ファイル 制御ファイル内に「WHEN 条件」が存在する場合、条件を満たさないレコードは廃棄レコードとなりロードされない。廃棄ファイルを生成するように指定しておくと、廃棄レコードが廃棄ファイルにコピーされる

 SQL*Loaderでは、次の2つのロード方法があります。

  • 従来型パスロード
    レコードの配列を作成し、INSERT文でロードされる方法です。テーブルの最高水位標(HWM)より下のブロックが使用できるロード方法です。常にREDOログが生成されます。
  • ダイレクトパスロード
    ブロックイメージを作成し、データファイルのデータブロックに直接保存する方法です。テーブルの最高水位標より上の未使用ブロックのみが使用されます。NOARCHIVELOGモード時や、NOLOGGING設定されたテーブルの場合は、REDOログが生成されません。

問題

問題1

PRODデータベースからSALESデータベースにデータを移動するに当たり、Data Pumpを使用することにしました。データのスキーマを変更するために必要なオプションを選択しなさい。

a.TOUSER
b.REMAP_SCHEMA
c.FROMUSER
d.RESCHEMA

正解:b

解説

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

 Data Pumpインポートを使用して、エクスポート時と異なるスキーマにインポートするには、REMAP_SCHEMAオプションを使用します(正解b)。

$ impdp system/oracle directory=dir1 dumpfile=exp.dmp \
> remap_schema=(HR:SCOTT) tables=(EMPLOYEES)

 上記の例では、dir1ディレクトリオブジェクトにあるexp.dmpファイルを読み込み、HRスキーマからエクスポートしたファイル内のEMPLOYEES表をSCOTTスキーマにインポートしています。

 不正解となるそのほかの選択肢は、impdpコマンドのオプションとしては存在しません。

問題2

Data Pumpに関する説明として正しいものを選択しなさい。

a.Data Pumpエクスポートを行うには、常にEXP_FULL_DATABASEロールが必要である
b.Data Pumpでは、ディレクトリオブジェクト、または物理的なディレクトリ名でダンプファイルを格納する場所を指定する
c.複数のダンプファイル名に連続した番号を加えるには%U置換変数を使用する
d.Data Pumpでは、常にメタデータとデータの両方が対象となる

正解:c

解説

 Data Pumpを使用したエクスポート/インポートでは、複数のダンプファイルを対象とすることができます。明示的にファイル名をカンマ(,)で区切ったリストとして指定することもできますが、%U置換変数を使用すれば、01から始まって1ずつ増分する固定幅の整数を利用することができます(正解c)。

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

選択肢a:FULL(データベース全体)のエクスポート、他スキーマのエクスポートを行う場合にはEXP_FULL_DATABASEロールが必要ですが、自分のスキーマオブジェクトをエクスポートするのに特別な権限は必要ありません。

選択肢b:Data Pumpエクスポートとインポートでは、必ずディレクトリオブジェクトを使用する必要があります。物理パスを指定してダンプファイルやログファイルにアクセスすることはできません。

選択肢d:CONTENTオプションを使用することで、メタデータのみ、データのみのエクスポートやインポートを行うことができます。

$ expdp hr/hr directory=dir1 dumpfile=exp.dmp \
> tables=(EMPLOYEES) content=DATA_ONLY

 上記の例では、HRスキーマのEMPLOYEES表に対し、メタデータ(表の定義)は取り出さずにデータ部分だけを取り出す操作を行っています(DATA_ONLY)。メタデータのみを対象とするには、METADATA_ONLYを指定します。デフォルトはALLで、メタデータとデータの両方を対象とします。

問題3

SQL*Loaderに関する説明として正しいものを2つ選択しなさい。

a.制御ファイル内に入力データを記述することが可能である
b.ダイレクトパスロードを使用すると、最高水位標より下のブロックが使用される
c.廃棄データは常に廃棄ファイルに出力される
d.入力データファイルには、固定レコード、可変レコード、ストリームレコードの3つの形式がある

正解:a、d

解説

 SQL*Loaderによるデータのロードでは、通常は制御ファイルとデータファイルに分かれた入力ファイルを使用します。しかし1度限りのロードなどでは、制御ファイルにBEGINDATA句を記述し、それ以降にロードするデータを記述することができます(正解a)。

 また、入力ファイルとなるデータでは、固定レコード、可変レコード、ストリームレコードの3つの形式を使用することができます(正解d)。

  • 固定レコード
    すべてのレコードが同じサイズになります。制御ファイルでは「INFILE データファイル名 "fix n"」とし、nが固定サイズとなります。
  • 可変レコード
    各レコードの先頭にレコードサイズを指定します。制御ファイルでは「INFIILE データファイル名 "var n"」とし、nが各レコードの先頭に指定するレコードサイズを決める文字数となります。
  • ストリームレコード
    レコードの終了記号を指定します。デフォルトでは改行コードが終了記号。制御ファイルでは「INFILEデータファイル名 "str '終了記号'"」とします。

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

選択肢b:ダイレクトパスロードでは、最高水位標(HWM)より上のデータブロックが使用されます。最高水位標より下のデータブロックを使用できるのは、従来型パスロードの場合です。

選択肢c:廃棄データは、制御ファイルのWHEN句で指定した条件に一致しなかったためにロードされないデータです。デフォルトでは廃棄ファイルは作成されません。廃棄ファイルを作成するには、制御ファイルにDISCARDFILEで指定するか、コマンドラインオプションDISCARDで廃棄ファイル名を指定する必要があります。

宿題

 次回は、「PL/SQL」を確認します。次の宿題を解いておいてください。

問題

変更されることがないはずの顧客テーブルのデータが変更されていることが疑われています。PL/SQLを使用して監視する方法として適切なオブジェクトタイプを選択しなさい。

a.データベーストリガー
b.パッケージ
c.プロシージャ
d.ファンクション

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



Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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