Data Pump(expdp/impdp)とは

Data Pump(データポンプと読みます)は10gから追加されたORACLEの論理バックアップのエクスポート及びインポートを行うexp/empの後継ユーティリティです。

exp/impから移行するにあたり、Data Pumpにはexp/impとの互換性はなくexpで作成したdmpファイルをimpdpで使用することはできないこと、 Data Pumpはデータベースサーバー側でdmpファイルを作成するアーキテクチャのためexpのようにクライアント側にdmpファイルを作成することはできず、 dmpを作成/読み込むためのDirectoryオブジェクトを作成しておく必要があることに注意する必要があります。



dmpファイルの入出力先

expdp/impdpをクライアント側で実行したとしてもdmpファイルはDBサーバ側の入出力になりますが、入出力先は以下のように決まります。

・何も指定しなかった場合
デフォルトで存在しているDATA_PUMP_DIRディレクトリに作成されます。 以下のSQLで出力パスを確認することができます。
SYS@ORCL102 > SELECT directory_name, directory_path FROM dba_directories
  2   WHERE directory_name='DATA_PUMP_DIR';

DIRECTORY_NAME
------------------------------------------------------------
DIRECTORY_PATH
---------------------------------------------------------------------------------

DATA_PUMP_DIR
E:\oracle\product\10.2.0\db_1\rdbms\log\
・dumpfileパラメータまたはdirectoryパラメータで指定した場合
どちらでもdmpは指定したdirectoryオブジェクトのパスに出力されますが、dumpfileパラメータで指定した場合ログファイルはDATA_PUMP_DIRに出力されてしまうため directoryパラメータで指定したほうがわかりやすいと思います。
directoryオブジェクトの作成
SQL>CREATE DIRECTORY TEMP_DIR AS 'E:\';
SQL>GRANT READ,WRITE ON DIRECTORY TEMP_DIR TO TEST;
directoryパラメータ指定
C:\>expdp test/test tables=test directory=TEMP_DIR dumpfile=test.dmp
dumpfileパラメータ指定
C:\>expdp test/test tables=test dumpfile=TEMP_DIR:test.dmp

実行モード

expdp/impdpには5つのモードがあり、目的に応じて必要最小限のバックアップのみ取得することが可能です。

・全体モード
expdp <ユーザ名>/<パスワード> FULL=Y dumpfile=<出力ファイル名>
impdp <ユーザ名>/<パスワード> FULL=Y dumpfile=<出力ファイル名>

・スキーマモード
expdp <ユーザ名>/<パスワード> SCHEMAS=<スキーマ名>,<スキーマ名>・・・ dumpfile=<出力ファイル名>
impdp <ユーザ名>/<パスワード> SCHEMAS=<スキーマ名>,<スキーマ名>・・・ dumpfile=<出力ファイル名>

・表領域モード
expdp <ユーザ名>/<パスワード> TABLESPACES=<表領域名>,<表領域名>・・・ dumpfile=<出力ファイル名>
impdp <ユーザ名>/<パスワード> TABLESPACES=<表領域名>,<表領域名>・・・ dumpfile=<出力ファイル名>

・表モード
expdp <ユーザ名>/<パスワード> tables=<テーブル名>,<テーブル名>・・・ file=<出力ファイル名>
impdp <ユーザ名>/<パスワード> tables=<テーブル名>,<テーブル名>・・・ file=<出力ファイル名>

・トランスポータブル表領域モード※
expdp test/test TRANSPORT_TABLESPACES=USERS dumpfile=test.dmp
impdp test/test TRANSPORT_TABLESPACES=USERS dumpfile=test.dmp
※トランスポータブル表領域モードは異なるデータベースのデータファイルを移行する際のモードです。使用するには対象表領域をread onlyモードにする必要があるなど、さまざまな制約があります。

主なオプション

・CONTENT
オブジェクトのデータとメタデータ(オブジェクト定義)をそれぞれ処理対象とするか選択することができます。

・データのみ処理する
CONTENT=DATA_ONLY

・メタデータのみ処理する
CONTENT=METADATA_ONLY

・データ、メタデータ両方処理する
CONTENT=ALL

・INCLUDE、EXCLUDE
特定のオブジェクトのみを対象、または対象外とすることができます。

ファンクションを対象外にする
EXCLUDE=FUNCTION

パッケージを対象外にする
EXCLUDE=PACKAGE

I_TESTから始まるインデックスを対象外にする
EXCLUDE=INDEX:"LIKE 'I_TEST%' " ※

TESTスキーマは対象外にする
EXCLUDE=SCHEMA:"= 'TEST'" ※

・QUERY
テーブルデータに対して抽出条件を設けます。
QUERY=TABLE1:"WHERE COL1 < 10" ※

・FLASHBACK_TIME
対象の全オブジェクトに対して指定時間の一貫性を維持してデータで処理します。 つまり、15:00を指定したとすると全て15:00時点のデータがエクスポートされます。 注意点としてトランザクションによりUNDO表領域が圧迫されている場合や、undo_retentionパラメータの値が短すぎる場合ORA-01555で処理が失敗する可能性があります。

処理開始時点の一貫性のあるデータを処理する
FLASHBACK_TIME="to_timestamp(sysdate)" ※

※・・・シングルクォーテーション等一部の記号はOSによってはシェルの特殊文字であるためそのままの値でパラメータが渡されないあるため、 UNIX系OSでは「\」でエスケープするかPARFILEパラメータによりパラメータを設定ファイルに外だしする必要があります。
エスケープの例:QUERY=TEST:\"WHERE COL1 \< 10\" tables=test

TIPS

datapumpはチューニング系パラメータは廃止された
datapumpは後述する見積もり処理によりexp/imp等で必要だったチューニング系パラメータは全て廃止され自動チューニングされるようになりました。 data pump固有のチューニング系パラメータは多重度を指定するPARALLELパラメータのみです。

datapumpは大規模表を想定した実装になっている
datapumpは実行すると最初に対象データのサイズ等を計算しており処理時間が最適化されるように見積もりを行っています。 この見積もり処理に数秒程度時間がかかるため、小規模表を1テーブル毎にexp/impしている処理をそのままdatapumpに差し替えると datapumpのほうが遅くなる場合があるためdatapumpを使用する場合は一度に複数の表をまとめて処理する実装を検討します。

datapumpはJOBとして実行される
datapumpの処理はORACLEのJOBとして実装されておりdbms_datapumpパッケージを利用すると処理の中断や再開が可能になっています。 この影響でバージョンによってはdatapumpを途中キャンセルしたり異常終了したりすると内部オブジェクト(SYS_EXPORT_SCHEMA_01といったテーブル等)が残ったままになり再実行してもエラーになる場合があります (残っている内部テーブルを削除することでエラーは解消します)。 また、このジョブで実装するというアーキテクチャの影響と思われますがdatapumpは並列で実行すると処理間が競合し処理時間が長くなる傾向があります。
この競合はJOB_NAMEパラメータに一意な値を指定することである程度改善します。

既存表に対してimpdpを行う場合はPK索引を削除しておくと早くなる
既に存在する表へimpdpする場合、PK索引が存在しているとダイレクト処理ではなく従来型で処理され処理時間が遅くなります。 表を削除しておくか、PK索引を削除しておくことで処理が高速化します。

datapumpはstreams_pool_sizeの領域を利用する
datapumpの実行にはSGA内のstreams_pool_sizeの領域が使用されます。streams_pool_sizeの設定をしていない場合自動的にバッファキャッシュから一定の割合の領域が割り当てられ、 メモリが大きいほど領域が無駄になる可能性が高くなるためstreams_pool_sizeは明示的に設定したほうが無難です。なお、11.2のユーティリティマニュアルでは10MBを推奨するとの記載があります。

datapumpを実行するとalertlogが汚れる
datapumpは実行するたびにalertlogにマスタープロセス及びワーカープロセスの起動情報が書き込まれるため大量実行するとアラートログが肥大化する可能性があります。 RAC環境においては内部的にalter system set services=...で初期化パラメータを変更する処理が実行されるためさらに肥大化します。

マニュアル

ユーティリティ10g リリース2(10.2)
Oracle Databaseユーティリティ11g リリース2(11.2)
カスタム検索

★ORACLE案件承ります
▼ORACLE掲示板