【Oracle】Data Pumpで複数テーブルをまとめてエクスポートする方法完全ガイド|tables指定・parfile・スキーマ別・進捗確認・エラー対処まで

【Oracle】Data Pumpで複数テーブルをまとめてエクスポートする方法 Oracle
この記事でわかること

  • 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 管理、条件フィルタ付きエクスポート、進捗監視まで、実務ですぐに使える内容です。

スポンサーリンク
  1. 事前確認:DIRECTORYオブジェクト
    1. 利用可能なディレクトリの確認
    2. ディレクトリの作成(DBA権限が必要)
    3. 書き込み権限の確認
  2. 基本構文:tablesパラメータで複数テーブル指定
    1. コマンドライン構文
    2. 括弧で囲む形式(どちらでも可)
  3. 使用例:3テーブルを一括エクスポート
    1. 実行コマンド
    2. 実行結果の出力例
  4. スキーマ名を明示的に指定する(異なるスキーマのテーブル)
    1. 他スキーマのテーブルを指定するコマンド
    2. 接続ユーザーと同じスキーマのテーブルはスキーマ名を省略可
    3. 権限の確認
  5. テーブルリストをparfileで管理する(10テーブル以上の場合)
    1. parfileの作成例(export.par)
    2. parfileを指定してexpdpを実行
    3. parfileにパスワードを含める場合
  6. フィルタ付きエクスポート(queryパラメータ)
    1. 基本構文
    2. 複数テーブルにそれぞれWHERE句を指定
    3. parfileでqueryを指定する場合
  7. tables / schemas / full の使い分け
    1. 各モードの使用例
  8. parallelオプションで高速化
    1. parallelを指定したコマンド
    2. ファイルサイズ制限と分割
  9. エクスポート進捗を確認する方法
    1. 方法1:DBA_DATAPUMP_JOBSビューで確認
    2. 方法2:Attachモードで対話的に確認
  10. よくあるエラーと対処法
    1. ORA-39001: invalid argument value
    2. ORA-31617: unable to open dump file for write
    3. ORA-39166: object SCHEMA.TABLE was not found
    4. ORA-01017: invalid username/password; logon denied
    5. ORA-31626: job does not exist
    6. エラーログの確認
  11. よくある質問
  12. まとめ
  13. あわせて読みたい

事前確認: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;
注意:ディレクトリオブジェクトで指定するパスは、DBサーバー上の実際のパスである必要があります。クライアントマシンのパスを指定しても機能しません。パスが存在しない場合は OS 上で先に作成してください(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)
テーブル名の大文字・小文字:Oracleのデフォルトでは識別子は大文字で格納されます。小文字で指定した場合、自動的に大文字変換されます。ダブルクォートで作成した小文字テーブルは 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 foundORA-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に記述すれば)

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の%Uについて:複数ファイルに分割出力する場合や parallel を使う場合は、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)"
queryパラメータの用途例:

  • 直近1年分のデータだけを移行環境にコピーする
  • 特定部門・特定ステータスのレコードだけをバックアップする
  • 大量データから検証用サンプルデータを抽出する

queryパラメータの詳細については 【Oracle】expdpでWHERE句を使って条件付きエクスポートする方法 も参照してください。

tables / schemas / full の使い分け

Data Pump のエクスポートモードには tablesschemasfull の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
スキーマ全体のエクスポートについては【Oracle】スキーマごとにエクスポートする方法(schemas パラメータ) も参照してください。

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
parallelを使う際の注意点:

  • 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
パラレル処理の詳細については【Oracle】Data Pump の parallel オプションで高速化する方法 も参照してください。

エクスポート進捗を確認する方法

大規模なエクスポートは時間がかかることがあります。進捗を確認するには、データディクショナリの参照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                -- 使えるコマンドの一覧を表示
Attachモードの活用場面:

  • 長時間かかるエクスポートの進捗をリアルタイムで監視したい
  • ジョブを一時停止して夜間バッチの影響を回避したい
  • クライアント側の接続が切れても、ジョブ自体はサーバーで継続されている

よくあるエラーと対処法

ORA-39001: invalid argument value

原因:directoryパラメータに指定したDIRECTORYオブジェクト名が存在しない、またはスペルミス。
対処: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

原因:DIRECTORYオブジェクトが指すOSパスへの書き込み権限がない、またはパスが存在しない。
対処: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

原因:Attachモードで指定したジョブ名が存在しない、または既に完了・削除済み。
対処: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 を確認
ORA-31684(オブジェクト重複エラー)についての詳細は【Oracle】ORA-31684エラーの原因と対処法 も参照してください。

よくある質問

tablesに100テーブルを指定することはできますか?
理論上、テーブル数に上限はありません。ただし、コマンドラインが非常に長くなるため、10テーブル以上の場合はparfileを使って管理することを強く推奨します。parfileなら改行やコメントを使えるため、可読性と保守性が大幅に向上します。
自分のスキーマ以外のテーブルをエクスポートするにはどうすればいいですか?
スキーマ名.テーブル名の形式(例:tables=HR.EMPLOYEES)で指定します。ただし、他スキーマのオブジェクトにアクセスするには EXP_FULL_DATABASE ロールまたは DBA 権限が必要です。権限がない場合は ORA-39166 または ORA-01031 が発生します。DB管理者に権限付与を依頼してください。
dumpfileのサイズはどれくらいになりますか?複数ファイルに分割できますか?
ダンプファイルのサイズはエクスポートするデータ量によって変わります。filesize=2G のようにパラメータで1ファイルあたりの上限を指定すると、自動的に複数ファイルに分割されます。その際、dumpfile=export_%U.dmp のように %U(連番プレースホルダ)を含める必要があります。parallelオプション使用時も同様に %U が必須です。
エクスポート中にエラーが発生した場合、途中まで処理されたデータは保存されますか?
ダンプファイルには途中まで処理されたデータが書き込まれますが、ジョブが正常完了していないダンプファイルは不完全であり、インポートには使用できません。エラーが発生した場合は、原因を修正してから再度エクスポートを実行してください。なお、stop_jobで一時停止したジョブは start_jobで再開でき、その場合は途中から処理を続けることができます。
旧来の exp コマンドと expdp(Data Pump)の違いは何ですか?
主な違いは以下のとおりです:

  • 速度: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 モードを使用

あわせて読みたい