datapump とは

datapump は、oracle10g より導入されたユーティリティであり、データベースに
格納されているデータやオブジェクトのメタデータのインポートやエクスポートが可能。
従来の export/import ユーティリティと比較すると、処理性能が向上している。

「データポンプ」や「データパンプ」と呼び方はまちまちだが、
Oracle のマニュアルで、カタカナ表記の場合は「データポンプ」となっているので、
正確にはデータポンプなのだろう。 Oracle エンジニア同士の会話では、
「データパンプ」の方が多いけれども。

Oracle9i まで主力であった export/import ユーティリティは、
11g 以降でも利用することは可能だが、非推奨となっている。
将来的に廃止される運命にあるため、これから使うなら datapump を利用した方がよい。

バージョンアップの度に新機能が追加されており、現在主力の Oracle 12c はもちろん、
最新 Oracle18c においても実装されているので、覚えておきたいコマンド。



ディレクトリオブジェクトの登場

datapump を利用する場合、export/import ユーティリティでは
存在しなかった「ディレクトリオブジェクト」が必要になる。

これは名の通りオブジェクトの一種として扱われるため、
テーブルやインデックスなどと同様に権限も必要となる。

インポート時はダンプファイルの読込先となり、
エクスポート時はダンプファイルの出力先となる。

コマンドも exp/imp から、expdp/impdp に変わっている。

datapump に必要な権限

  • create session
  • create table
  • create directory
  • read, write on directory
  • 最低限、これだけの権限が必要。
    他のスキーマオブジェクトが対象の場合は、別途権限が必要となるため、
    可能であればロールを付与して、 read, write on directory を追加する。

    ディレクトリオブジェクトの作成

    create or replace directory
    <ディレクトリオブジェクト名> as ‘<対象ディレクトリパス>‘;

  • ここで設定したパスが impdp の入力先、expdp の出力先となる
  • impdp や expdp コマンドでは「directory=ディレクトリオブジェクト名」という形で指定
  • 注意点

  • 対象ディレクトリをフルパスで記載すること
  • エクスポート元とインポート先の環境が異なるなら、それぞれの環境で実施すること
  • 権限付与コマンド

    grant read, write on directory
    <ディレクトリオブジェクト名> to <ユーザ名>;