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
をはじめとする代表的なエラーは、既存データやオブジェクトとの競合が原因であることが多いため、事前にオブジェクトの存在チェックやバックアップを行ってからインポート作業を実施することが重要です。
ログの確認とパラメータ調整を丁寧に行えば、安全で確実なリストアが可能になります。エラーに直面した際も、冷静に原因を特定し、適切な対処を行いましょう。