はじめに
Oracle DatabaseのData Pumpは、データベース間でデータを移動させるための強力なツールです。この記事では、エクスポートとインポートの基本的な手順と、よくあるエラーの解決方法を説明します。
環境
- Oracle Database 18c Express Edition
- OS: Windows 11
1. エクスポート手順
1.1 ディレクトリオブジェクトの確認
まず、データの出力先となるディレクトリオブジェクトを確認します。
CONNECT / AS SYSDBA
SELECT * FROM DBA_DIRECTORIES WHERE DIRECTORY_NAME = 'DATA_PUMP_DIR';
このコマンドで結果が返ってこない場合は、1.2の後に1.3を実行してください。
1.2 ユーザーへの権限付与
エクスポートを実行するユーザーに必要な権限を与えます。
GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO EXPORT_USER;
1.3 ディレクトリオブジェクトの作成(必要な場合)
ディレクトリオブジェクトが存在しない場合は、以下のコマンドで作成します。
CREATE OR REPLACE DIRECTORY DATA_PUMP_DIR AS 'C:\app\YourUserName\admin\XE\dpdump';
※ パスは実際のOracleインストールディレクトリに合わせて変更してください。
1.4 エクスポートの実行
以下のコマンドでエクスポートを実行します。
expdp EXPORT_USER/password@//localhost:1521/XEPDB1 TABLES=employees DIRECTORY=DATA_PUMP_DIR DUMPFILE=employees_export.dmp LOGFILE=employees_export.log
2. インポート手順
2.1 インポート先テーブルの準備
インポート先のテーブルを作成します。この方法では、元のテーブル構造だけをコピーし、データは含めません。
CREATE TABLE employees_copy AS SELECT * FROM employees WHERE 1=0;
2.2 インポートの実行
以下のコマンドでインポートを実行します。
impdp IMPORT_USER/password@//localhost:1521/XEPDB1 TABLES=employees REMAP_TABLE=employees:employees_copy DIRECTORY=DATA_PUMP_DIR DUMPFILE=employees_export.dmp LOGFILE=employees_import.log
3. よくあるエラーと解決方法
3.1 エクスポート時のエラー
エラーメッセージ:
ORA-39002: 操作が無効です
ORA-39070: ログ・ファイルをオープンできません。
ORA-39087: ディレクトリ名DATA_PUMP_DIRは無効です
解決方法:
- 1.3のステップでディレクトリオブジェクトを作成してください。
- 作成後、1.2のステップで権限を付与してください。
- Windowsのエクスプローラーで、指定したパスにフォルダが実際に存在することを確認してください。
3.2 インポート時のエラー
エラーメッセージ:
ORA-39151: 表"IMPORT_USER"."EMPLOYEES_COPY"が存在します。スキップのtable_exists_actionのため、すべての依存メタデータおよびデータはスキップされます
解決方法:
インポートコマンドにTABLE_EXISTS_ACTION=REPLACE
オプションを追加します。
impdp IMPORT_USER/password@//localhost:1521/XEPDB1 TABLES=employees REMAP_TABLE=employees:employees_copy DIRECTORY=DATA_PUMP_DIR DUMPFILE=employees_export.dmp LOGFILE=employees_import.log TABLE_EXISTS_ACTION=REPLACE
まとめ
テーブルのエクスポートとインポートの勉強の結果をまとめてみました。色々と調べてみたけど、このやり方が分かりやすかったです。