expdp は、Oracle Data Pump Exportでデータやメタデータをダンプファイルに出力するコマンドです。使えるオプションは多いですが、実務でよく使うものはある程度決まっています。
この記事では、expdp のよく使うオプションを目的別に整理し、最小構成、スキーマ単位、テーブル単位、条件付きエクスポート、圧縮、並列化、除外指定、一貫性のあるバックアップ、parfile の書き方までまとめます。Data Pump全体の流れは、Data Pump(expdp / impdp)完全ガイドも参考にしてください。
DIRECTORY、DUMPFILE、LOGFILE、SCHEMAS または TABLES を基本にし、必要に応じて QUERY、COMPRESSION、PARALLEL、EXCLUDE、FLASHBACK_TIME を足します。- expdpオプション早見表
- expdpオプションをコマンドで確認する
- 最小構成のexpdpコマンド
- DIRECTORYの作成と権限付与
- 出力先を指定するオプション
- ダンプサイズを見積もるオプション
- 対象を指定するオプション
- parfileでオプションを管理する
- QUERYで一部データだけエクスポートする
- CONTENTでデータのみ・定義のみを切り替える
- COMPRESSIONでダンプサイズを小さくする
- FILESIZEでダンプファイルを分割する
- PARALLELと%Uで高速化する
- EXCLUDE・INCLUDEで対象を調整する
- FLASHBACK_TIMEで一貫性のあるエクスポートを取る
- VERSIONで移行先バージョンを指定する
- 実務で使いやすいparfileテンプレート
- よくある失敗パターン
- 関連ページ
- よくある質問
- まとめ
expdpオプション早見表
| 目的 | 主なオプション | 使いどころ |
|---|---|---|
| 出力先を指定する | DIRECTORY DUMPFILE LOGFILE |
ほぼ必須。ダンプとログの置き場所を決める |
| 対象を指定する | FULL SCHEMAS TABLES TABLESPACES |
全体、スキーマ、テーブル、表領域単位で出力する |
| 行を絞る | QUERY |
WHERE句で一部データだけ出力する |
| 中身を切り替える | CONTENT |
データのみ、定義のみ、両方を選ぶ |
| 不要なものを除外する | EXCLUDE INCLUDE |
インデックスや統計情報などを除外・限定する |
| 容量を抑える | COMPRESSION FILESIZE REUSE_DUMPFILES |
圧縮、分割、既存ファイル上書きを制御する |
| 高速化する | PARALLEL %U |
複数プロセスと複数ダンプファイルで並列出力する |
| 一貫性を保つ | FLASHBACK_TIME FLASHBACK_SCN |
特定時点の状態でエクスポートする |
| 互換性を指定する | VERSION |
下位バージョンへ持っていくときに指定する |
| 実行管理する | JOB_NAME STATUS ATTACH METRICS |
ジョブ名、進捗、再接続、処理量を確認する |
expdpオプションをコマンドで確認する
手元のOracle環境で使える expdp オプションを確認したい場合は、まず help=y を実行します。バージョンやエディションにより使える指定が異なることがあるため、実機のヘルプ確認は地味ですが大切です。
expdp help=y
この記事では実務でよく使うものを中心に整理しています。細かいパラメータまで含めた最終確認は、必ず対象環境の help=y と検証実行で確認してください。
最小構成のexpdpコマンド
まずは、スキーマ単位でエクスポートする最小構成です。DIRECTORY はOracle側に作成済みのディレクトリオブジェクト名を指定します。
expdp app_user/password \ DIRECTORY=DATA_PUMP_DIR \ DUMPFILE=app_schema.dmp \ LOGFILE=app_schema_exp.log \ SCHEMAS=APP_USER
OSのパスを直接 DUMPFILE に書くのではなく、Oracleの DIRECTORY オブジェクト経由で指定する点が重要です。Data Pumpの基本構文やディレクトリ作成は、Data Pumpの使い方完全ガイドで整理しています。
DIRECTORYの作成と権限付与
DIRECTORY はOS上のディレクトリをOracleに登録したオブジェクトです。DBA権限を持つユーザーで作成し、実行ユーザーに読み書き権限を付与します。
CREATE OR REPLACE DIRECTORY DATA_PUMP_DIR AS '/u01/app/oracle/dpump'; GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO APP_USER;
ORA-39087 やファイル作成エラーが出る場合は、Oracle側のディレクトリオブジェクト、OS側の実ディレクトリ、Oracle実行ユーザーのOS権限、DBユーザーへの READ / WRITE 付与を確認します。
出力先を指定するオプション
| オプション | 意味 | 例 |
|---|---|---|
DIRECTORY |
ダンプファイルを置くOracleディレクトリオブジェクト | DIRECTORY=DATA_PUMP_DIR |
DUMPFILE |
出力するダンプファイル名 | DUMPFILE=app_%U.dmp |
LOGFILE |
実行ログのファイル名 | LOGFILE=app_exp.log |
NOLOGFILE |
ログファイルを作成しない | NOLOGFILE=YES |
REUSE_DUMPFILES |
既存ダンプファイルの上書きを許可する | REUSE_DUMPFILES=YES |
REUSE_DUMPFILES=YES は便利ですが、既存バックアップを誤って上書きする危険があります。定期実行では日付付きファイル名や世代管理を優先するほうが安全です。
ダンプサイズを見積もるオプション
エクスポート前におおよその容量を見たい場合は、ESTIMATE_ONLY を使います。本番環境で容量不足を避けたいときや、転送時間を見積もりたいときに便利です。
expdp app_user/password \ DIRECTORY=DATA_PUMP_DIR \ SCHEMAS=APP_USER \ ESTIMATE_ONLY=YES \ ESTIMATE=BLOCKS
ESTIMATE=BLOCKS はブロック情報から見積もります。実際のダンプサイズは圧縮、LOB、断片化、対象データの内容で変わるため、正確な値ではなく目安として扱います。
対象を指定するオプション
expdp は、どの単位で出力するかを最初に決めます。よく使うのは SCHEMAS と TABLES です。
| オプション | 対象 | 注意点 |
|---|---|---|
FULL=Y |
データベース全体 | 権限と容量に注意。全体移行向け |
SCHEMAS=APP |
スキーマ単位 | アプリ単位の移行・バックアップで使いやすい |
TABLES=APP.ORDERS |
テーブル単位 | 一部テーブルだけバックアップしたいときに使う |
TABLESPACES=USERS |
表領域単位 | 表領域設計に沿った移行で使う |
expdp app_user/password \ DIRECTORY=DATA_PUMP_DIR \ DUMPFILE=orders_%U.dmp \ LOGFILE=orders_exp.log \ TABLES=APP.ORDERS,APP.ORDER_ITEMS
複数テーブルの指定や parfile を使った管理は、Data Pumpで複数テーブルをまとめてエクスポートする方法も参考になります。
parfileでオプションを管理する
オプションが増えると、コマンドラインに直接書くより parfile に分けたほうが安全です。クォートが絡む QUERY や、複数行の設定を管理しやすくなります。
userid=app_user/password directory=DATA_PUMP_DIR dumpfile=app_%U.dmp logfile=app_exp.log schemas=APP_USER parallel=4 compression=all metrics=yes
expdp parfile=app_export.par
パスワードを平文で置く運用にできない場合は、実行ユーザー、OS認証、Oracle Walletなどの接続方式も検討します。パスワードレス接続は、Oracle Wallet(SEPS)完全ガイドの考え方が近いです。
QUERYで一部データだけエクスポートする
QUERY を使うと、WHERE句で行を絞ってエクスポートできます。本番から検証環境へ直近データだけ移す、特定部門のデータだけ出す、といった場面で使います。
userid=app_user/password directory=DATA_PUMP_DIR dumpfile=orders_recent.dmp logfile=orders_recent_exp.log tables=APP.ORDERS query=APP.ORDERS:"WHERE ORDER_DATE >= DATE '2026-01-01'"
QUERY はシェルやコマンドプロンプトのクォートで詰まりやすいので、複雑な条件では parfile に寄せるのが無難です。詳しい書き方は、expdpでWHERE句(queryパラメータ)を使う方法で解説しています。
CONTENTでデータのみ・定義のみを切り替える
CONTENT は、エクスポートする中身を切り替えるオプションです。
| 指定 | 出力内容 | 使いどころ |
|---|---|---|
CONTENT=ALL |
定義とデータ | 通常のバックアップ・移行 |
CONTENT=DATA_ONLY |
データのみ | 表定義は移行先にある場合 |
CONTENT=METADATA_ONLY |
定義のみ | DDL相当を別環境に作りたい場合 |
expdp app_user/password \ DIRECTORY=DATA_PUMP_DIR \ DUMPFILE=app_metadata.dmp \ LOGFILE=app_metadata_exp.log \ SCHEMAS=APP_USER \ CONTENT=METADATA_ONLY
インポート側でデータだけ入れる場合は impdp CONTENT=DATA_ONLY や table_exists_action の扱いが重要です。impdpでデータだけをインポートする方法もあわせて確認してください。
COMPRESSIONでダンプサイズを小さくする
COMPRESSION は、ダンプファイルのサイズを抑えるためのオプションです。利用できる値やライセンス条件は環境により確認が必要です。
| 指定 | 意味 | 注意点 |
|---|---|---|
COMPRESSION=METADATA_ONLY |
メタデータを圧縮 | 標準的に使いやすい |
COMPRESSION=DATA_ONLY |
データを圧縮 | 環境条件を確認する |
COMPRESSION=ALL |
メタデータとデータを圧縮 | 容量削減に有効だがCPU負荷も見る |
COMPRESSION=NONE |
圧縮しない | 速度優先や検証で使う |
expdp app_user/password \ DIRECTORY=DATA_PUMP_DIR \ DUMPFILE=app_compressed_%U.dmp \ LOGFILE=app_compressed_exp.log \ SCHEMAS=APP_USER \ COMPRESSION=ALL
圧縮の効果、ライセンス確認、parfile 例は、Data Pumpでエクスポート時に圧縮する方法で詳しく扱っています。
FILESIZEでダンプファイルを分割する
大きなダンプを1ファイルにしたくない場合は、FILESIZE と %U を組み合わせます。ファイル転送や保管先の制限がある環境では、分割しておくと扱いやすくなります。
expdp app_user/password \ DIRECTORY=DATA_PUMP_DIR \ DUMPFILE=app_%U.dmp \ LOGFILE=app_filesize_exp.log \ SCHEMAS=APP_USER \ FILESIZE=2G
DUMPFILE=app_%U.dmp の %U は連番ファイルを作るための置換文字です。FILESIZE だけを指定しても、ファイル名側に %U がないと分割運用で詰まりやすくなります。
PARALLELと%Uで高速化する
PARALLEL はData Pumpジョブを並列化するオプションです。複数のダンプファイルに分けるため、DUMPFILE には %U を入れるのが基本です。
expdp app_user/password \ DIRECTORY=DATA_PUMP_DIR \ DUMPFILE=app_%U.dmp \ LOGFILE=app_parallel_exp.log \ SCHEMAS=APP_USER \ PARALLEL=4
PARALLEL を上げれば必ず速くなるわけではありません。CPU、I/O、ネットワーク、対象表の構造、ダンプファイルの置き場所がボトルネックになります。詳しくは、Data Pumpのパラレル処理で高速化する方法を参照してください。
EXCLUDE・INCLUDEで対象を調整する
EXCLUDE は不要なオブジェクトを除外し、INCLUDE は必要なオブジェクトだけに限定します。両方を雑に組み合わせると意図しない結果になりやすいため、まずはどちらか一方で設計します。
expdp app_user/password \ DIRECTORY=DATA_PUMP_DIR \ DUMPFILE=app_no_index.dmp \ LOGFILE=app_no_index_exp.log \ SCHEMAS=APP_USER \ EXCLUDE=INDEX
インデックスを除外して後から再作成する運用は、移行時間や領域使用量を調整したいときに使います。Data Pumpでインデックスを除外する方法もあわせて確認してください。
FLASHBACK_TIMEで一貫性のあるエクスポートを取る
稼働中のDBからエクスポートする場合、処理中にデータが更新されることがあります。特定時点の一貫した状態で取りたい場合は FLASHBACK_TIME または FLASHBACK_SCN を検討します。
expdp app_user/password \ DIRECTORY=DATA_PUMP_DIR \ DUMPFILE=app_flashback.dmp \ LOGFILE=app_flashback_exp.log \ SCHEMAS=APP_USER \ FLASHBACK_TIME="SYSTIMESTAMP"
長時間のエクスポートではUNDO保持期間にも注意します。一貫性を優先するのか、停止時間を確保して確実に取るのかは、データ量と業務要件で決めます。
VERSIONで移行先バージョンを指定する
下位バージョンのOracleへ持っていく場合は、VERSION を指定することがあります。ただし、上位バージョンでしか使えない型や機能を下位へ完全に移せるわけではありません。
expdp app_user/password \ DIRECTORY=DATA_PUMP_DIR \ DUMPFILE=app_19c.dmp \ LOGFILE=app_19c_exp.log \ SCHEMAS=APP_USER \ VERSION=19
バージョン差がある移行では、事前に検証環境で impdp まで通すことが大切です。バージョンが違うDBでData Pumpを使うときの注意点も参考になります。
実務で使いやすいparfileテンプレート
日常運用では、次のように目的を明確にした parfile を用意しておくと再利用しやすくなります。
userid=app_user/password directory=DATA_PUMP_DIR dumpfile=app_user_%U.dmp logfile=app_user_exp.log schemas=APP_USER parallel=4 compression=all flashback_time=SYSTIMESTAMP metrics=yes status=60
STATUS=60 を付けると、60秒ごとに進捗が表示されます。長時間ジョブでは JOB_NAME も付けておくと、切断後に ATTACH しやすくなります。
userid=app_user/password directory=DATA_PUMP_DIR dumpfile=app_job_%U.dmp logfile=app_job_exp.log schemas=APP_USER job_name=EXP_APP_USER_01 status=30 metrics=yes
ジョブの一時停止、再開、強制停止、残存ジョブの確認は、Data Pumpジョブの一時停止・再開・強制停止で詳しくまとめています。
よくある失敗パターン
| 症状 | 原因 | 確認ポイント |
|---|---|---|
| ダンプファイルを作れない | DIRECTORY の権限不足、OSディレクトリ不備 |
READ / WRITE 権限と実パスを確認 |
| 複数ファイルにならない | PARALLEL だけ指定して %U がない |
DUMPFILE=app_%U.dmp にする |
| QUERYでエラーになる | クォートの解釈違い | parfile に分ける |
| 圧縮しても遅い | CPUやI/Oが詰まっている | 圧縮率だけでなく処理時間も比較する |
| 移行先でインポートできない | バージョン差、文字コード、オブジェクト既存 | VERSION と impdp 側オプションを確認 |
関連ページ
よくある質問
expdpで最低限必要なオプションは何ですか?
基本は DIRECTORY、DUMPFILE、LOGFILE、SCHEMAS または TABLES です。対象や用途に応じて追加します。
expdpのオプション一覧を確認するコマンドはありますか?
expdp help=y で、その環境のヘルプを確認できます。バージョン差があるため、実際に使うDB環境で確認するのが確実です。
DIRECTORYにはOSのパスを直接指定できますか?
直接は指定しません。CREATE DIRECTORY でOracleディレクトリオブジェクトを作成し、DIRECTORY=DATA_PUMP_DIR のようにオブジェクト名を指定します。
expdpの実行前に容量を見積もれますか?
ESTIMATE_ONLY=YES を使うと見積もりだけ実行できます。ただし圧縮やデータ内容によって実サイズは変わるため、あくまで目安です。
expdpのオプションはコマンドラインとparfileのどちらに書くべきですか?
短いコマンドなら直接指定で十分ですが、実務では parfile が安全です。QUERY、複数テーブル、除外条件、並列化などを管理しやすくなります。
expdpで一部データだけ出力できますか?
できます。QUERY オプションでWHERE句を指定します。クォートが複雑になりやすいため、parfile に書く方法がおすすめです。
expdpを高速化するには何を指定しますか?
PARALLEL と DUMPFILE=%U を組み合わせます。ただし、CPU、I/O、ネットワーク、ストレージ性能が足りないと効果は限定的です。
expdpで圧縮するにはどのオプションを使いますか?
COMPRESSION を使います。COMPRESSION=ALL、COMPRESSION=DATA_ONLY、COMPRESSION=METADATA_ONLY などを環境に応じて選びます。
expdpでインデックスを除外できますか?
できます。例として EXCLUDE=INDEX を指定します。移行後にインデックスを作り直す運用では、時間と領域の見積もりも必要です。
まとめ
expdp のオプションは多いですが、まずは出力先、対象、絞り込み、容量、速度、一貫性の6つに分けて考えると整理しやすくなります。基本は DIRECTORY、DUMPFILE、LOGFILE、SCHEMAS または TABLES です。
実務では、コマンドを長くするより parfile にまとめるほうが再利用しやすく、ミスも減らせます。特に QUERY、PARALLEL、COMPRESSION、EXCLUDE、FLASHBACK_TIME を使う場合は、事前に検証環境でリストアまで確認しましょう。

