【Oracle】バージョン違いでData Pumpを使うときの注意点|互換性とオプションの違い

【Oracle】バージョン違いでData Pumpを使うときの注意点|互換性とオプションの違い Oracle

OracleのData Pump(expdp/impdp)は、データベースのエクスポート・インポートを効率的に行うツールですが、バージョンが異なる環境間で使用する場合には注意点があります。特に本番環境と開発環境でバージョンが一致していないケースでは、Data Pumpの挙動やサポート状況が変わるため、互換性を意識した設定が重要です。

Data Pumpの前提:下位バージョンへの直接インポートは不可

Oracleでは、基本的にexpdpimpdp同一バージョン間でのやり取りを前提として設計されています。高いバージョンでエクスポートしたダンプファイルを、そのまま低いバージョンでインポートすることはできません。

例:

  • 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の互換性に配慮することで、エラーを未然に防ぎ、スムーズな移行が可能になります。