ORACLE MASTER資格の中級に位置付けられ、取得すればOracle技術者としてグローバルに認定される「ORACLE MASTER Silver Oracle Database 10g」。例題を利用してポイントを押さえ、確実な合格を目指そう!
前回「SQLでのデータ操作方法を覚えよう」に引き続き、データの管理方法について学びます。
Data Pumpを使用したエクスポート/インポート、SQL*Loaderを使用したデータのロードが対象です。Oracle Enterprise ManagerによるGUI画面だけでなく、コマンドラインでの実行オプションも対象となりますので、よく覚えておきましょう。
Data Pumpエクスポートは、Oracleデータベース内のオブジェクトを高速にアンロードできるユーティリティです。取り出されたデータはData Pumpにより、ダンプファイルとしてファイル化されます。Enterprise Managerだけでなく、expdpコマンドラインユーティリティを使用することもできます。
次のようなオプションを使用して、アンロードする内容を詳細に指定することができます。
Data Pumpインポートは、Data Pumpエクスポートにより作成されたダンプファイルをOracleデータベースにロードするユーティリティです。Enterprise Managerだけでなく、impdpコマンドラインユーティリティを使用することもできます。
次のようなオプションを使用して、ロードする内容を詳細に指定することができます。
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は、外部ファイルをOracleデータベースにロードするユーティリティです。
関連するファイルとして、次のものがあります。
制御ファイル | どのようにロードするかを記述しているテキストファイル。ロードするデータの位置、データ形式などを記述する |
---|---|
データファイル | ロードする実際のデータを記述しているテキストファイル。制御ファイルに含めることも可能 |
データ | ロード条件を満たしたレコードのみ、データベース内の既存テーブルに格納される |
---|---|
ログファイル | 成功時も失敗時も生成される。成功時はどのようにロードしたかが、失敗時はどのようなエラーが発生したかが記録される |
不良ファイル | Oracleデータベースにロードが拒否されたレコードが格納される。制約に違反したり、データ型が異なっていたり、最大サイズを超過していたりする場合、そのレコードはロードされず、不良ファイルにコピーされる |
廃棄ファイル | 制御ファイル内に「WHEN 条件」が存在する場合、条件を満たさないレコードは廃棄レコードとなりロードされない。廃棄ファイルを生成するように指定しておくと、廃棄レコードが廃棄ファイルにコピーされる |
SQL*Loaderでは、次の2つのロード方法があります。
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コマンドのオプションとしては存在しません。
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で、メタデータとデータの両方を対象とします。
SQL*Loaderに関する説明として正しいものを2つ選択しなさい。
a.制御ファイル内に入力データを記述することが可能である
b.ダイレクトパスロードを使用すると、最高水位標より下のブロックが使用される
c.廃棄データは常に廃棄ファイルに出力される
d.入力データファイルには、固定レコード、可変レコード、ストリームレコードの3つの形式がある
正解:a、d
SQL*Loaderによるデータのロードでは、通常は制御ファイルとデータファイルに分かれた入力ファイルを使用します。しかし1度限りのロードなどでは、制御ファイルにBEGINDATA句を記述し、それ以降にロードするデータを記述することができます(正解a)。
また、入力ファイルとなるデータでは、固定レコード、可変レコード、ストリームレコードの3つの形式を使用することができます(正解d)。
そのほかの選択肢の不正解の理由は次のとおりです。
●選択肢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.