Oracle DB へのエクスポート

エクスポートとは、簡単に言うと「データベースから外部ファイルからデータを出力すること」。Oracle DB からエクスポートポートを行う際、 datapump ユーティリティを使用するのが一般的。expdp コマンドで dmp (ダンプファイル)が出力される。

expdp の出力先は、directory で指定したディレクトリオブジェクトに、dumpfile パラメータで指定したファイル名で出力される。 対象は業務データそのものだけではなく、メタデータ(データディクショナリで管理される定義情報)も扱える。


旧 exp コマンドに比べはるかに高速になり、対象データ単位やエクスポート時の変更など、
オプション・パラメータを使い分けることで柔軟な対応が可能となっている。
バージョンアップの度に新機能が追加されており、現在主力の Oracle 12c はもちろん、
最新 Oracle18c においても実装されているので、覚えておきたいコマンド。

export単位

データベース全体

expdp ユーザ/パスワード directory=datapumpディレクトリ dumpfile=dmpファイル full=y

表領域モード

expdp ユーザ/パスワード directory=datapumpディレクトリ dumpfile=dmpファイル tablespaces=表領域

スキーマモード

expdp ユーザ/パスワード directory=datapumpディレクトリ dumpfile=dmpファイル schemas=スキーマ

テーブルモード

expdp ユーザ/パスワード directory=datapumpディレクトリ dumpfile=dmpファイル tables=スキーマ.テーブル
※ 自己所有テーブルの場合は、tables オプションにスキーマ名は指定しなくても良い。

トランスポータブル表領域モード

expdp ユーザ/パスワード directory=datapumpディレクトリ dumpfile=dmpファイル transport_tablespaces=表領域

トランスポートは、単純な export & import より高速のため、大容量の表領域移送に適している。ただし色々と制限事項もあるため、特殊な移行要件でなければ上記4つのモードから選択するのが一般的。

  • dmp ファイルだけでなく、データファイルも必要となる。
  • クロスプラットフォーム(移行元のソース DB と移行先のターゲット DB が別のプラットフォーム)なら、双方の互換性( compatible 初期化パラメータが 10.0.0以上)であること。
  • system, sysaux, 一時表領域は対象外となる。
  • 対象表領域は、読取り専用モードに設定しておく必要がある。
  • 並列度は 1 となる。
  • asm を使用していたり、エンディアンネスが異なるなら、rman で convert datafile による変換が必要 など。
  • 主なオプション

    上記 export 単位のコマンドに続けて「オプション名 = 値」のように指定する。
    デフォルト値が未記載のオプションを使用する場合は、任意の値を入力可能。

    logfile オプション
  • ディレクトリオブジェクト:export.log (デフォルト)
  • ディレクトリオブジェクトのパスがログファイルの出力先となる。
    対象ディレクトリオブジェクトの権限がある場合は、ディレクトリ名も省略可能。

    nologfile オプション
  • yes
  • ログファイルを出力しない。

  • no (デフォルト)
  • ログファイルを出力する。

    content オプション
  • all (デフォルト)
  • 定義とデータ両方をエクスポートする。

  • metadata_only
  • 定義だけをエクスポートする。

  • data_only
  • データだけをエクスポートする。

    estimate_only オプション
  • yes
  • ディスク領域見積もりだけ行う(エクスポートは行わない)。

  • no (デフォルト)
  • 通常のエクスポートと同等。

    exclude オプション
  • オブジェクトタイプ[:対象]
  • expdp exclude に指定することで、エクスポート対象から除外する。
    オブジェクトタイプには、table や index をはじめ、constraint (制約) や、grant (オブジェクト・システム権限) なども指定可能。更に、指定したタイプから除外対象を絞り込む場合、以下のように指定する。
    exclude=table:\”= \’hoge\’\”
    exclude=table:\”like \’hoge%\’\”

    cluster オプション

    Real Application Clusters (RAC) 環境のオプション。

  • yes (デフォルト)
  • 各インスタンスで分散して実行する。オーバーヘッドが掛かるが、対象が大容量データであれば、パフォーマンスの向上が見込める。

  • no
  • 通常のエクスポートと同等。

    compression オプション
  • all
  • 全体を圧縮して dmp ファイルをエクスポートする。
    ※ Enterprise Edition で Advanced Compression オプションライセンスが必要。

  • data_only
  • データのみを圧縮して dmp ファイルをエクスポートする。
    ※ Enterprise Edition で Advanced Compression オプションライセンスが必要。

  • metadata_only(デフォルト)
  • メタデータのみを圧縮して dmp ファイルをエクスポートする。

  • none
  • 圧縮が無効。通常のエクスポートと同等。

    encryption_password オプション
  • パスワードを指定
  • 暗号化データを対象とする場合のセキュリティ強化に使用する。
    パスワード長は最大 128 Byte。インポートする際の暗号化キーとなる。
    ※ Enterprise Edition で Advanced Security オプションライセンスが必要。

    reuse_dumpfiles オプション
  • yes
  • 既存の dmp ファイルを初期化・再利用する。

  • no (デフォルト)
  • 既存の dmp ファイルを使用しない。

    flashback_scn オプション
  • scn を指定
  • scn(システム変更番号)を指定することで、その scn までフラッシュバックする。
    Oracle12cR2 からは、ビッグ scn を使用することも可能。
    ※ flashback_time オプションとは併用できない。

    flashback_time オプション
  • to_timestamp(日時)
  • 指定した日時に最も近い scn までフラッシュバックする。
    to_timestamp(’03-02-2019 14:55:30′, ‘DD-MM-YYYY HH24:MI:SS’) のように指定する。
    ※ flashback_scn オプションとは併用できない。

    logtime オプション
  • none (デフォルト)
  • 表示メッセージとログメッセージに、タイムスタンプを記録しない。

  • all
  • 表示メッセージに、タイムスタンプを記録する。

  • status
  • ログメッセージに、タイムスタンプを記録する。

  • logfile
  • 表示メッセージとログメッセージに、タイムスタンプを記録する。

    関連記事