【Oracle】impdpでORA-31684などのエラーが出る原因と対処法まとめ

【Oracle】impdpでORA-31684などのエラーが出る原因と対処法まとめ Oracle

OracleのData Pump Import(impdp)を使ってデータを復元しようとした際に、ORA-31684などのエラーが表示されることがあります。これらのエラーは一見難解に思えるかもしれませんが、原因と対処法を理解していれば適切に対応できます。本記事では、代表的なエラーとその対処法を分かりやすく解説します。

ORA-31684: Object type TABLE:”XXXX” already exists

原因: インポート先に同名のテーブルがすでに存在しており、impdpがテーブルの作成に失敗している状態です。

対処法:

  • table_exists_action=replace を指定して既存テーブルを削除して再作成
  • table_exists_action=append で既存テーブルにデータを追加
  • table_exists_action=skip で既存テーブルをスキップ(デフォルト動作)
impdp scott/tiger directory=DATA_PUMP_DIR dumpfile=emp.dmp tables=emp table_exists_action=replace

ORA-39082: Object type INDEX failed to create with error

原因: インデックスを作成しようとした際に、対象のテーブルやカラムが見つからない、または既存のオブジェクトと衝突している場合に発生します。

対処法:

  • テーブルが正しくインポートされているか確認
  • 既存の同名インデックスがあれば削除
  • 必要に応じて exclude=index を指定してインデックスのインポートを無効化
impdp scott/tiger directory=DATA_PUMP_DIR dumpfile=emp.dmp tables=emp exclude=index

ORA-39083: Object type TABLE failed to create with error

原因: テーブルの作成に失敗した際に出力されます。データ型の不一致、パーミッション不足、存在しないユーザーなどが主な原因です。

対処法:

  • 対象のテーブル定義やスキーマに問題がないか確認
  • スキーマが存在するか、必要な権限があるかを確認
  • remap_schema を使用して別スキーマにインポート
impdp system/manager directory=DATA_PUMP_DIR dumpfile=emp.dmp remap_schema=scott:john

ORA-39111: Dependent object type … skipped

原因: 依存関係のあるオブジェクト(インデックス、トリガーなど)が対象のメインオブジェクトの作成失敗によりスキップされたことを示します。

対処法: まずは元となるテーブルやビューのインポートに成功しているか確認し、関連オブジェクトの状態をチェックしましょう。

ORA-39002: invalid operation

原因: 不正なパラメータ指定や、前提条件を満たしていない場合に発生します。

対処法:

  • パラメータのスペルミスを確認
  • ディレクトリがOracleに認識されているか確認(CREATE DIRECTORYが必要)
  • 対応バージョンかどうか確認

impdpのログファイルを確認する

エラーの詳細は、logfileで指定したファイルに出力されます。実行後は必ずログファイルの末尾を確認して、どこで失敗したのかを特定しましょう。

impdp scott/tiger directory=DATA_PUMP_DIR dumpfile=emp.dmp logfile=emp_import.log

まとめ

Data Pump Import(impdp)は強力なツールですが、事前の準備やパラメータ設定を正しく行わないと、さまざまなエラーが発生します。ORA-31684をはじめとする代表的なエラーは、既存データやオブジェクトとの競合が原因であることが多いため、事前にオブジェクトの存在チェックやバックアップを行ってからインポート作業を実施することが重要です。

ログの確認とパラメータ調整を丁寧に行えば、安全で確実なリストアが可能になります。エラーに直面した際も、冷静に原因を特定し、適切な対処を行いましょう。