OracleのData Pump(expdp
/impdp
)は、データベースのエクスポート・インポートを効率的に行うツールですが、バージョンが異なる環境間で使用する場合には注意点があります。特に本番環境と開発環境でバージョンが一致していないケースでは、Data Pumpの挙動やサポート状況が変わるため、互換性を意識した設定が重要です。
Data Pumpの前提:下位バージョンへの直接インポートは不可
Oracleでは、基本的にexpdp
とimpdp
は同一バージョン間でのやり取りを前提として設計されています。高いバージョンでエクスポートしたダンプファイルを、そのまま低いバージョンでインポートすることはできません。
例:
- Oracle 19c → Oracle 12c:× 直接インポート不可
- Oracle 12c → Oracle 19c:○ インポート可能
互換性を保つにはversionパラメータを使用
高いバージョンから低いバージョンへデータを移行するには、expdp
実行時にversion
パラメータを指定する必要があります。
expdp user/password dumpfile=data.dmp logfile=export.log \
schemas=HR directory=DATA_PUMP_DIR version=12.2
このversion
に指定できるのは、基本的にはエクスポート元のバージョン以下、かつインポート先が対応しているバージョンです。
version指定時の注意点
互換性を保つためにversion
を使っても、以下のような制限が発生します。
- 新バージョン特有の機能は含まれない(例:Identity列の設定など)
- 型変換が必要な項目ではエラーが発生する可能性がある
- 統計情報などが正しく引き継がれないことがある
impdp側で対応すべきパラメータ
impdp
側では、以下のようなオプションを併用することで、バージョン違いによる影響を緩和できます。
transform=segment_attributes:n
:古い環境で不要な属性を除外data_options=skip_constraint_errors
:制約違反時のスキップexclude=statistics
:統計情報を除外し、再収集を前提にする
オブジェクトタイプによる制限
バージョンが異なる場合、以下のオブジェクトは特に注意が必要です。
- 表領域(tablespace)の属性
- パーティションテーブルの仕様
- 暗号化列、仮想列などの新機能
このようなオブジェクトを含む場合、エクスポート時点で除外したり、インポート先での事前定義が必要です。
ダンプファイルのバージョン確認
ダンプファイルのバージョンは、impdp
で以下のように確認することができます。
impdp dumpfile=data.dmp logfile=check.log sqlfile=check.sql
sqlfile
を使うことで、実際に作成されるオブジェクトのSQL文を事前確認できます。
まとめ
Oracle Data Pumpでバージョン違いの環境を扱う際には、以下のポイントを意識する必要があります。
- エクスポート側で
version
パラメータを指定 - インポート先の対応バージョンと機能を事前に確認
- 一部のオプションやオブジェクトには注意が必要
特にバージョンアップや開発環境の切り替え時には、Data Pumpの互換性に配慮することで、エラーを未然に防ぎ、スムーズな移行が可能になります。