Oracle Data Pumpは便利なツール
日々の論理バックアップやバージョンアップ時のデータ移行など、Oracle Data Pumpを活用している方は多いかと思います。
しかし、expdpやimpdpを実行した際に、内部で何が行われているのかを意識する機会はあまりないかもしれません。
この記事では、Data Pumpの内部動作について掘り下げてみます。
expdp/impdpはクライアント
マニュアルを確認してみると、以下のような記載があります。
Oracle Data Pump expdpクライアントを使用して、Oracle Data Pumpエクスポートを開始します。impdpクライアントを使用して、Oracle Data Pumpインポートを開始します。クライアントでは、コマンドラインで入力されたパラメータを使用してエクスポートおよびインポート・コマンドを実行するために、PL/SQLパッケージDBMS_DATAPUMPで提供されているプロシージャを使用します。
参照:Oracle® AI Database データベース・ユーティリティ 26ai
実は、expdpコマンドやimpdpコマンドで実行しているのはあくまでクライアントです。内部では、DBMS_DATAPUMPパッケージのプロシージャが処理を実行しています。
実際に確認してみる
expdpはクライアントに過ぎないため、ジョブの開始後にクライアントセッションを切断しても、Data Pumpジョブ自体はサーバ側で継続して実行されます。
実際に試してみます。
エクスポートが始まった段階で、クライアントから抜けてみます。
Data PumpではCtrl+Cを押すと、対話モード(Interactive Mode)へ移行します。そこで EXIT_CLIENT を実行すると、クライアントのみ切断されます。
>expdp system/******@XEPDB1 SCHEMAS=***** DIRECTORY=DATA_PUMP_DIR DUMPFILE=test.dmp LOGFILE=test.log
Export: Release 21.0.0.0.0 - Production on 金 7月 17 17:02:22 2026
Version 21.3.0.0.0
Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved.
接続先: Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
"SYSTEM"."SYS_EXPORT_SCHEMA_01"を起動しています: system/********@XEPDB1 SCHEMAS=***** DIRECTORY=DATA_PUMP_DIR DUMPFILE=test.dmp LOGFILE=test.log
オブジェクト型SCHEMA_EXPORT/TABLE/TABLE_DATAの処理中です
オブジェクト型SCHEMA_EXPORT/PACKAGE/PACKAGE_BODYの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICSの処理中です
Export> EXIT_CLIENT
>
この時ジョブの状態をSQL*Plusから確認すると、実行中であることが分かります。
Data Pumpジョブはデータベースサーバ上で管理されており、DBA_DATAPUMP_JOBSビューから状態を確認できます。
SQL> SELECT owner_name,
2 job_name,
3 state
4 FROM dba_datapump_jobs;
OWNER_NAME
--------------------------------------------------------------------------------
JOB_NAME
--------------------------------------------------------------------------------
STATE
--------------------------------------------------------------------------------
SYSTEM
SYS_EXPORT_SCHEMA_01
EXECUTING
少し待って、実行ログを確認してみます。
;;;
Export: Release 21.0.0.0.0 - Production on 金 7月 17 17:02:22 2026
Version 21.3.0.0.0
Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved.
;;;
接続先: Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
"SYSTEM"."SYS_EXPORT_SCHEMA_01"を起動しています: system/********@XEPDB1 SCHEMAS=***** DIRECTORY=DATA_PUMP_DIR DUMPFILE=test.dmp LOGFILE=test.log
オブジェクト型SCHEMA_EXPORT/TABLE/TABLE_DATAの処理中です
(中略)
マスター表"SYSTEM"."SYS_EXPORT_SCHEMA_01"は正常にロード/アンロードされました
******************************************************************************
SYSTEM.SYS_EXPORT_SCHEMA_01に設定されたダンプ・ファイルは次のとおりです:
C:\APP\ORACLE\PRODUCT\21C\ADMIN\XE\DPDUMP\E1E2B0C326134C5C9D8B54CC83B50FCA\TEST.DMP
ジョブ"SYSTEM"."SYS_EXPORT_SCHEMA_01"が金 7月 17 17:03:09 2026 elapsed 0 00:00:45で正常に完了しました
ジョブ"SYSTEM"."SYS_EXPORT_SCHEMA_01"が正常に完了していることが分かります。
なお、ログ中に出力されている「マスター表"SYSTEM"."SYS_EXPORT_SCHEMA_01"」は、Data Pumpが進捗管理用に内部的に作成する表です。
Data Pumpはこの表を利用してジョブ状態を管理しているため、クライアント切断後も処理を継続したり、ジョブへ再接続したりすることが可能です。
まとめ
expdpやimpdpはData Pumpの実行主体ではなく、DBMS_DATAPUMPを呼び出すためのクライアントです。
Data Pumpを利用していると、
- expdp/impdpを実行した端末が落ちた
- ネットワーク接続が切れた
- Data Pumpが終わったかが分からない
- 古いData Pumpジョブが残っている
といった場面に遭遇することがあります。そのような場合でも、Data Pumpの実体がサーバ側ジョブであることを理解していれば、DBA_DATAPUMP_JOBSやログファイルを確認することで状況を判断できます。
普段何気なく実行しているexpdp/impdpですが、「実際に処理を行っているのはクライアントではなくサーバ側のData Pumpジョブである」を意識することで、トラブルシュート時の切り分けがスムーズになるかと思います。
We Are Hiring!