質問: 自分とは違うデータベースからエクスポートされたdmpファイルを自分のデータベースにインポートしたいのですが、SQL Developerでのdmpファイルインポート時に以下のエラーが出てしまいます。 **エラーメッセージ:** ``` 例外:ORA-39001:引数値が無効です dbms_datapump.get_status(数字...) ORA-39001:引数値が無効です ORA-39000:ダンプ・ファイル指定が無効です ORA-39143:ダンプ・ファイル"C:\temp\M01.dmp"は、元のエクスポート・ダンプ・ファイルである場合があります ``` ![画像の説明をここに入力](https://i.stack.imgur.com/8VELv.png) 検索した結果、以下の様なケースがあることがわかりました。 > > ORA-39000 ダンプ・ファイル指定が無効です > > 原因: 現行のジョブで使用できないダンプ・ファイルが指定されました。後続のエラー・メッセージに、不適切なダンプ・ファイルの箇所が記載されています。 > > 処置: ジョブに使用できるダンプ・ファイルを指定してください。 > > > ORA-39001 引数値が無効です > > 原因: 誤まった型または値の範囲でAPIパラメータを指定しました。DBMS_DATAPUMP.GET_STATUSによって表示される後続のメッセージに、エラーが記載されています。 > > 処置: 無効な引数を修正して、APIを再試行してください。 > > > ORA-39143 ダンプ・ファイル"string"は、元のエクスポート・ダンプ・ファイルである場合があります > > 原因: 元のエクスポート・ユーティリティを使用して作成した可能性のあるダンプ・ファイルがインポート操作に指定されました。これらのダンプ・ファイルは、Data Pumpインポート・ユーティリティで処理できません。 > > 処置: このダンプ・ファイルは、元のインポート・ユーティリティを使用して処理してください。 > > > おそらくdmpファイルがエラーの原因なのではないかと推測しますが、対策としての「このダンプ・ファイルは、元のインポート・ユーティリティを使用して処理してください。」という意味が分かりません。 いろいろ検索してみましたが対策が見つかりませんでしたので、質問させていただきました。 よろしくお願いいたします。 **実行環境:** * windows10 * oracle12c(R2) * oracle SQL Developer
回答: `exp.exe`で出力したデータを`impdp.exe`で読み込ませているために、ご質問のエラーが発生しているのではないのでしょうか。 SQL Developerのインポート/エクスポートは裏側で上記ツールのいずれかを呼び出しているはずですが、ツールは複数の種類に分かれています。 cf: B SQL*Loader、エクスポートおよびインポートのInstant Clientの表B-1 ツール・パッケージ内のInstant Clientファイル 古いデータベースから`exp.exe`(クラシックなエクスポートツール)で出力したデータは、`impdp.exe`(11g以降推奨されている新しいインポートツール)で読み込むことはできません。 下記いずれかの対応によりエラーを回避できることがあります。 * 移行元のデータベースで`expdp.exe`によるエクスポートを行う。 * 新しいデータベースに対して`imp.exe`を実行してインポートを行う。 + SQL Developerのオプションを見直すか、コマンドラインから直接`imp.exe`を実行する必要がある + 11g以降は`exp.exe`/`imp.exe`が非推奨なので、18c以降に適用できるか不明(未確認) cf: Export/Importの使い方