【Oracle】Data Pumpで既存オブジェクトをスキップしてインポートする方法|table_exists_action=skip

【Oracle】Data Pumpで既存オブジェクトをスキップしてインポートする方法|table_exists_action=skip Oracle

OracleのData Pump(impdp)を使ってデータをインポートする際、すでに存在しているテーブルやオブジェクトをどう扱うかは重要なポイントです。特に、本番環境や共有環境でのインポートでは、既存データを誤って上書きしないよう注意が必要です。

このようなケースで有効なのが、table_exists_action=skipオプションです。この記事では、このオプションの使い方と注意点について詳しく解説します。

table_exists_actionとは?

impdpコマンドに指定できるオプションの1つで、インポート対象のテーブルがすでに存在する場合にどのような処理を行うかを制御します。

指定可能な値は以下の通りです:

  • skip:既存のテーブルはスキップ(インポートしない)
  • append:既存のテーブルにデータを追加
  • truncate:既存のデータを削除してからデータを追加
  • replace:既存のテーブルを削除して新たに作成し直す

この中でskipは、既存のオブジェクトに対して一切の変更を加えないため、安全性の高い選択肢です。

基本的な構文

Data Pumpで既存のテーブルをスキップしたい場合、以下のように指定します。

impdp ユーザー名/パスワード directory=DATA_PUMP_DIR dumpfile=backup.dmp logfile=import.log table_exists_action=skip

この構文では、すでに存在しているテーブルはインポート対象から除外され、新しいテーブルだけが作成・インポートされます。

具体例

たとえば、以下のような条件でインポートを行うとします。

  • テーブルAはすでに存在している
  • テーブルBは存在していない

このとき、以下のコマンドを実行すると:

impdp scott/tiger directory=dp_dir dumpfile=scott_backup.dmp logfile=import.log table_exists_action=skip

結果として、テーブルAはスキップされ、テーブルBだけが新規に作成されてインポートされます。

注意点

table_exists_action=skipは、テーブル単位の動作です。つまり、1つのテーブルがスキップされても、他のテーブルは通常通りインポートされます。

また、制約やインデックス、トリガーなどの関連オブジェクトも含めてスキップされるため、構成の整合性には十分注意してください。

もしもオブジェクト単位で柔軟な制御を行いたい場合は、EXCLUDEINCLUDEオプションとの併用も検討すると良いでしょう。

まとめ

Data Pumpで既存オブジェクトをスキップしたい場合は、table_exists_action=skipを指定することで、安全に新規テーブルのみをインポートできます。

特に本番環境での誤上書きを防止したい場合に有効なオプションです。インポート前に対象テーブルの有無を確認し、意図しないデータ更新が発生しないよう慎重に運用しましょう。