- Data Pump(expdp)で複数テーブルを一括エクスポートする基本構文
- 10テーブル以上を扱う場合のparfileによるリスト管理
- スキーマをまたいだテーブルのエクスポート方法
- queryパラメータでWHERE句を付けた条件付きエクスポート
- tables / schemas / full の使い分け比較
- parallel オプションによる高速化
- 進捗確認とAttachモードの使い方
- ORA-39001・ORA-39166・ORA-31617 などのよくあるエラー対処
OracleのData Pump(expdp)は、データベースオブジェクトを高速にエクスポート・インポートできる標準ツールです。特定のテーブルだけをバックアップしたい・別環境に移行したいという場面で、tablesパラメータを使って複数テーブルをまとめて指定できます。
この記事では、Data Pump で複数テーブルを一括エクスポートするすべての手法を体系的に解説します。基本的なコマンドから、大量テーブルを扱う parfile 管理、条件フィルタ付きエクスポート、進捗監視まで、実務ですぐに使える内容です。
事前確認:DIRECTORYオブジェクト
Data Pump はサーバー側でファイルを読み書きするため、DIRECTORY オブジェクトが必須です。expdp 実行前に、使用するディレクトリが定義済みであることを確認してください。
利用可能なディレクトリの確認
-- DBA権限がある場合 SELECT directory_name, directory_path FROM dba_directories ORDER BY directory_name; -- 一般ユーザーの場合 SELECT directory_name, directory_path FROM all_directories;
ディレクトリの作成(DBA権限が必要)
-- ディレクトリオブジェクトの作成 CREATE DIRECTORY data_pump_dir AS '/home/oracle/datapump'; -- 使用するユーザーに権限を付与 GRANT READ, WRITE ON DIRECTORY data_pump_dir TO scott;
mkdir -p /home/oracle/datapump)。書き込み権限の確認
-- 対象ユーザーのディレクトリ権限確認 SELECT grantee, privilege, directory_name FROM dba_tab_privs WHERE table_name = 'DATA_PUMP_DIR' ORDER BY grantee, privilege;
基本構文:tablesパラメータで複数テーブル指定
複数テーブルをエクスポートするには、tablesパラメータにカンマ区切りでテーブル名を指定します。
コマンドライン構文
expdp ユーザー名/パスワード@接続文字列 \ directory=DATA_PUMP_DIR \ dumpfile=export.dmp \ logfile=export.log \ tables=テーブル1,テーブル2,テーブル3
directory:ダンプファイルとログファイルを出力するDIRECTORYオブジェクト名dumpfile:出力するダンプファイル名(拡張子は慣例的に .dmp)logfile:実行ログファイル名(省略可だが必ず指定推奨)tables:エクスポート対象のテーブル名をカンマ区切りで指定
括弧で囲む形式(どちらでも可)
-- カンマ区切り形式 expdp scott/tiger@orcl directory=DATA_PUMP_DIR dumpfile=export.dmp tables=EMP,DEPT,SALGRADE -- 括弧形式(どちらも同じ動作) expdp scott/tiger@orcl directory=DATA_PUMP_DIR dumpfile=export.dmp tables=(EMP,DEPT,SALGRADE)
tables='"my_table"' のようにクォートが必要です。使用例:3テーブルを一括エクスポート
SCOTTスキーマの代表的なサンプルテーブル EMP・DEPT・SALGRADE を一括でエクスポートする具体例です。
実行コマンド
expdp scott/tiger@orcl \ directory=DATA_PUMP_DIR \ dumpfile=scott_tables.dmp \ logfile=scott_tables.log \ tables=EMP,DEPT,SALGRADE
実行結果の出力例
Export: Release 19.0.0.0.0 - Production on Wed Mar 18 10:00:00 2026 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 Starting "SCOTT"."SYS_EXPORT_TABLE_01": scott/********@orcl directory=DATA_PUMP_DIR dumpfile=scott_tables.dmp logfile=scott_tables.log tables=EMP,DEPT,SALGRADE Processing object type TABLE_EXPORT/TABLE/TABLE_DATA Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS Processing object type TABLE_EXPORT/TABLE/TABLE . . exported "SCOTT"."EMP" 8.773 KB 14 rows . . exported "SCOTT"."DEPT" 6.023 KB 4 rows . . exported "SCOTT"."SALGRADE" 6.023 KB 5 rows Master table "SCOTT"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded ****************************************************************************** Dump file set for SCOTT.SYS_EXPORT_TABLE_01 is: /home/oracle/datapump/scott_tables.dmp Job "SCOTT"."SYS_EXPORT_TABLE_01" successfully completed
exported "SCOTT"."EMP":各テーブルのエクスポート完了とサイズ・行数が表示されますsuccessfully completed:ジョブが正常終了したことを示します- ログファイル(scott_tables.log)にも同じ内容が記録されます
スキーマ名を明示的に指定する(異なるスキーマのテーブル)
エクスポートするユーザー(接続ユーザー)とは異なるスキーマのテーブルを指定するには、スキーマ名.テーブル名の形式で記述します。この場合はDBA権限またはEXP_FULL_DATABASEロールが必要です。
他スキーマのテーブルを指定するコマンド
-- SYSユーザーでHR・SCOTTスキーマのテーブルを混在してエクスポート expdp system/manager@orcl \ directory=DATA_PUMP_DIR \ dumpfile=multi_schema.dmp \ logfile=multi_schema.log \ tables=HR.EMPLOYEES,HR.DEPARTMENTS,SCOTT.EMP,SCOTT.DEPT
接続ユーザーと同じスキーマのテーブルはスキーマ名を省略可
-- scotユーザーで接続した場合、SCOTT.EMP は EMP と省略できる expdp scott/tiger@orcl \ directory=DATA_PUMP_DIR \ dumpfile=scott_only.dmp \ logfile=scott_only.log \ tables=EMP,DEPT -- SCOTT.EMP, SCOTT.DEPT と同じ意味
権限の確認
-- EXP_FULL_DATABASEロールの確認 SELECT grantee, granted_role FROM dba_role_privs WHERE granted_role = 'EXP_FULL_DATABASE' ORDER BY grantee; -- ロールの付与(DBAとして実行) GRANT EXP_FULL_DATABASE TO scott;
ORA-39166: Object SCHEMA.TABLE was not found や ORA-01031: insufficient privileges が発生することがあります。この場合は DBA に EXP_FULL_DATABASE ロールの付与を依頼してください。テーブルリストをparfileで管理する(10テーブル以上の場合)
テーブル数が多い場合や、定期実行のバッチに組み込む場合は、parfile(パラメータファイル)を使うと管理しやすくなります。parfile にはコマンドラインで指定するすべてのパラメータを記述できます。
parfileの作成例(export.par)
directory=DATA_PUMP_DIR dumpfile=multi_export_%U.dmp logfile=multi_export.log filesize=1G tables=( SCOTT.EMP, SCOTT.DEPT, SCOTT.SALGRADE, SCOTT.BONUS, HR.EMPLOYEES, HR.DEPARTMENTS, HR.JOBS, HR.JOB_HISTORY, HR.LOCATIONS, HR.COUNTRIES )
parfileを指定してexpdpを実行
expdp system/manager@orcl parfile=export.par
- テーブルリストをファイルで一元管理できる
- コマンドラインが長くなりすぎず、シェルスクリプトへの組み込みが容易
- テーブルを追加・削除する際にファイルだけ修正すれば済む
- パスワードをコマンド履歴に残さずにすむ(parfileに記述すれば)
parfileにパスワードを含める場合
-- export.par の先頭にユーザー情報を記述する userid=system/manager@orcl directory=DATA_PUMP_DIR dumpfile=multi_export_%U.dmp logfile=multi_export.log tables=(SCOTT.EMP,SCOTT.DEPT,SCOTT.SALGRADE)
-- 実行(usernamは不要) expdp parfile=export.par
dumpfile=multi_%U.dmp のように %U(連番)を含めてください。%Uを含めない場合、ファイルが分割できないとエラーになることがあります。フィルタ付きエクスポート(queryパラメータ)
特定の条件に合致するデータだけをエクスポートしたい場合は、queryパラメータでWHERE句を指定できます。これにより、テーブル全体ではなく必要なデータだけを抽出してエクスポートできます。
基本構文
expdp scott/tiger@orcl \ directory=DATA_PUMP_DIR \ dumpfile=emp_filtered.dmp \ logfile=emp_filtered.log \ tables=EMP \ query=EMP:'"WHERE deptno=10"'
複数テーブルにそれぞれWHERE句を指定
-- テーブルごとに異なる条件を指定(parfileを使うと管理しやすい) expdp scott/tiger@orcl \ directory=DATA_PUMP_DIR \ dumpfile=filtered.dmp \ logfile=filtered.log \ tables=EMP,DEPT \ query=EMP:'"WHERE deptno=10"' \ query=DEPT:'"WHERE deptno IN (10,20)"'
parfileでqueryを指定する場合
-- export_query.par userid=scott/tiger@orcl directory=DATA_PUMP_DIR dumpfile=filtered_%U.dmp logfile=filtered.log tables=(EMP,DEPT) query=EMP:"WHERE deptno=10" query=DEPT:"WHERE deptno IN (10,20)"
- 直近1年分のデータだけを移行環境にコピーする
- 特定部門・特定ステータスのレコードだけをバックアップする
- 大量データから検証用サンプルデータを抽出する
queryパラメータの詳細については 【Oracle】expdpでWHERE句を使って条件付きエクスポートする方法 も参照してください。
tables / schemas / full の使い分け
Data Pump のエクスポートモードには tables・schemas・full の3種類があります。状況に応じて適切なモードを選択してください。
| パラメータ | 対象 | 必要権限 | 主な用途 |
|---|---|---|---|
tables=T1,T2 |
指定テーブルのみ | 一般ユーザー可 (他スキーマはEXP_FULL_DATABASE) |
特定テーブルのバックアップ・移行 |
schemas=SCOTT |
スキーマ全体 (テーブル・インデックス・ビュー等) |
自スキーマは不要 他スキーマはEXP_FULL_DATABASE |
スキーマ全体の移行・クローン作成 |
full=y |
データベース全体 | DBA権限またはEXP_FULL_DATABASE | フルバックアップ・DB全体の移行 |
各モードの使用例
-- tablesモード:特定テーブルのみ expdp scott/tiger@orcl directory=DATA_PUMP_DIR dumpfile=tables.dmp \ tables=EMP,DEPT -- schemasモード:スキーマ全体 expdp system/manager@orcl directory=DATA_PUMP_DIR dumpfile=schema.dmp \ schemas=SCOTT -- fullモード:DB全体 expdp system/manager@orcl directory=DATA_PUMP_DIR dumpfile=full.dmp \ full=y
parallelオプションで高速化
大量データのテーブルをエクスポートする場合は、parallelパラメータで並列ワーカー数を指定すると処理を高速化できます。
parallelを指定したコマンド
-- 4並列でエクスポート(dumpfileに%Uが必須) expdp scott/tiger@orcl \ directory=DATA_PUMP_DIR \ dumpfile=parallel_%U.dmp \ logfile=parallel.log \ tables=EMP,DEPT,SALGRADE \ parallel=4
dumpfileに%U(連番)を含めないと、並列ワーカーがファイルを書けずエラーになりますparallelに指定した数だけのダンプファイルが生成されます(例:parallel=4 → 最大4ファイル)- Oracle Enterprise Edition が必要です(Standard Edition では制限あり)
- サーバーのCPUコア数を超える値を指定しても効果がありません
ファイルサイズ制限と分割
-- filesize で1ファイルあたりのサイズ上限を指定(%U必須) expdp scott/tiger@orcl \ directory=DATA_PUMP_DIR \ dumpfile=large_export_%U.dmp \ logfile=large_export.log \ tables=LARGE_TABLE1,LARGE_TABLE2 \ filesize=2G \ parallel=2
エクスポート進捗を確認する方法
大規模なエクスポートは時間がかかることがあります。進捗を確認するには、データディクショナリの参照とAttachモードの2つの方法があります。
方法1:DBA_DATAPUMP_JOBSビューで確認
-- 実行中のData Pumpジョブを確認
SELECT job_name,
operation,
job_mode,
state,
degree,
attached_sessions
FROM dba_datapump_jobs
WHERE state = 'EXECUTING'
ORDER BY job_name;
-- 進捗状況(percent_done)はV$SESSION_LONGOPSで確認
SELECT sid,
serial#,
opname,
target,
sofar,
totalwork,
ROUND(sofar/NULLIF(totalwork,0)*100, 1) AS pct_done,
time_remaining
FROM v$session_longops
WHERE opname LIKE '%EXPORT%'
AND totalwork > 0
AND sofar != totalwork
ORDER BY start_time;
方法2:Attachモードで対話的に確認
expdp のAttachモードを使うと、実行中のジョブに後からアタッチして、進捗確認・一時停止・再開などの操作ができます。
-- ジョブ名を確認してからアタッチ SELECT job_name FROM dba_datapump_jobs WHERE state = 'EXECUTING'; -- Attachモードで接続(別ターミナルから) expdp scott/tiger@orcl attach=SYS_EXPORT_TABLE_01
-- Attachモードのコマンド一覧 Export> status -- 進捗状況を表示 Export> status=30 -- 30秒ごとに進捗を表示 Export> stop_job=immediate -- ジョブを一時停止 Export> start_job -- 一時停止したジョブを再開 Export> kill_job -- ジョブを強制終了 Export> exit_client -- Attachモードを終了(ジョブは継続) Export> help -- 使えるコマンドの一覧を表示
- 長時間かかるエクスポートの進捗をリアルタイムで監視したい
- ジョブを一時停止して夜間バッチの影響を回避したい
- クライアント側の接続が切れても、ジョブ自体はサーバーで継続されている
よくあるエラーと対処法
ORA-39001: invalid argument value
対処:
SELECT directory_name FROM dba_directories で正確な名前を確認してください。DIRECTORYオブジェクト名は大文字・小文字を区別します。-- 正しいディレクトリ名を確認する SELECT directory_name, directory_path FROM dba_directories ORDER BY 1;
ORA-31617: unable to open dump file for write
対処:OSレベルでディレクトリの存在と書き込み権限を確認してください。Oracleプロセスのユーザー(通常 oracle)がそのディレクトリに書き込めるか確認します。
-- OS側での確認(Linuxの場合) ls -la /home/oracle/datapump/ -- oracle ユーザーに書き込み権限があるか確認 chmod 755 /home/oracle/datapump/ chown oracle:oinstall /home/oracle/datapump/
ORA-39166: object SCHEMA.TABLE was not found
対処:テーブル名の大文字・小文字、スキーマ名を確認してください。他スキーマのテーブルには
EXP_FULL_DATABASE ロールが必要です。-- テーブルが存在するか確認 SELECT owner, table_name FROM dba_tables WHERE table_name = 'EMP' ORDER BY owner;
ORA-01017: invalid username/password; logon denied
対処:sqlplus で接続テストを行い、認証情報を確認してください。パスワードに特殊文字(@や/)が含まれる場合はシングルクォートで囲む必要があります。
-- 接続テスト sqlplus scott/tiger@orcl -- パスワードに特殊文字が含まれる場合 expdp 'scott/"P@ss!word"'@orcl directory=DATA_PUMP_DIR dumpfile=test.dmp tables=EMP
ORA-31626: job does not exist
対処:
SELECT job_name FROM dba_datapump_jobs で現在のジョブ名を確認してください。-- 現在のジョブ名を確認 SELECT job_name, operation, state FROM dba_datapump_jobs ORDER BY job_name;
エラーログの確認
エラーが発生した場合は、logfileで指定したファイルに詳細が記録されています。DIRECTORYオブジェクトのパスにあるログファイルを確認してください。
-- ログファイルの場所を確認してから内容を見る SELECT directory_path FROM dba_directories WHERE directory_name = 'DATA_PUMP_DIR'; -- 例: /home/oracle/datapump/export.log を確認
よくある質問
スキーマ名.テーブル名の形式(例:tables=HR.EMPLOYEES)で指定します。ただし、他スキーマのオブジェクトにアクセスするには EXP_FULL_DATABASE ロールまたは DBA 権限が必要です。権限がない場合は ORA-39166 または ORA-01031 が発生します。DB管理者に権限付与を依頼してください。filesize=2G のようにパラメータで1ファイルあたりの上限を指定すると、自動的に複数ファイルに分割されます。その際、dumpfile=export_%U.dmp のように %U(連番プレースホルダ)を含める必要があります。parallelオプション使用時も同様に %U が必須です。stop_jobで一時停止したジョブは start_jobで再開でき、その場合は途中から処理を続けることができます。- 速度:expdp はダイレクトパスを使用し、exp より大幅に高速(特に大規模データ)
- 並列処理:expdp は parallel パラメータで並列エクスポートが可能
- 実行場所:expdp はサーバー側で実行され、ファイルもサーバーに出力される
- 進捗監視:expdp は Attach モードによる対話的な監視・制御が可能
- サポート:exp は Oracle 11g 以降で非推奨。新規用途には expdp を使用してください
まとめ
Data Pump(expdp)で複数テーブルをエクスポートする主要な手法をまとめます。
| 手法 | コマンド例・特徴 | 適した場面 |
|---|---|---|
| tablesパラメータ(基本) | tables=EMP,DEPT,SALGRADE |
数テーブルの都度バックアップ |
| parfileで管理 | expdp parfile=export.par |
10テーブル以上・定期バッチ化 |
| スキーマ名付き指定 | tables=HR.EMPLOYEES,SCOTT.EMP |
複数スキーマのテーブルを混在 |
| queryフィルタ | query=EMP:"WHERE deptno=10" |
条件付き・サンプルデータ抽出 |
| parallel高速化 | parallel=4 dumpfile=%U.dmp |
大量データの高速エクスポート |
| Attachモード進捗確認 | expdp attach=ジョブ名 |
長時間ジョブの監視・制御 |
- テーブル数が少ない(5つ以下)→ コマンドラインに直接 tables= を指定
- テーブル数が多い(10以上)または定期実行 → parfile で管理
- 条件付きで特定データだけ必要 → query パラメータを追加
- データ量が多く時間がかかる → parallel でCPUコア数に応じて並列化
- スキーマ全体が必要 → tables ではなく schemas モードを使用
あわせて読みたい
- 【Oracle】Data Pump(expdp/impdp)の使い方まとめ:Data Pump の全体像と基本的な使い方を解説しています。
- 【Oracle】expdpでWHERE句を使って条件付きエクスポートする方法:query パラメータの詳細な使い方と注意点を解説しています。
- 【Oracle】impdpでデータのみインポートする方法(content=data_only):エクスポートしたデータをインポートする際のオプションを解説しています。
- 【Oracle】Data Pump の parallel オプションで高速化する方法:並列処理による高速エクスポート・インポートの詳細を解説しています。
- 【Oracle】スキーマごとにエクスポートする方法(schemas パラメータ):スキーマ全体をエクスポートするための schemas パラメータの使い方を解説しています。
- 【Oracle】ORA-31684エラーの原因と対処法:インポート時に発生するオブジェクト重複エラーの対処法を解説しています。
- 【Oracle】Data Pumpで圧縮エクスポートする方法:ダンプファイルを圧縮してディスク容量を節約する方法を解説しています。

