Oracle DB へのインポート

インポートとは、簡単に言うと「データベースに外部ファイルからデータを登録すること」。
Oracle DB へインポートを行う際、 datapump ユーティリティを使用するのが一般的。

実行する際は、エクスポート時に出力した dmp (ダンプファイル)がインプットとなる。
対象は業務データそのものだけではなく、メタデータ(データディクショナリで管理される定義情報)も扱える。

旧 imp コマンドに比べはるかに高速になり、対象データ単位やインポート時の変更など、
オプション・パラメータを使い分けることで柔軟な対応が可能となっている。

例えば、impdp でデータのみを対象とする(content=data_only)、事前に既存データを削除する(table_exists_action=truncate)などが良く使われるオプション。
また、スキーマの変更(remap_schema)や、表領域の変更(remap_tablespace)などの構成変更も行える。

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

import単位

データベース全体

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

表領域モード

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

スキーマモード

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

テーブルモード

impdp ユーザ/パスワード directory=datapumpディレクトリ dumpfile=dmpファイル tables=スキーマ.テーブル

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

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

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

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

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

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

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

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

  • metadata_only
  • テーブル自体が存在しない状態で、定義だけをインポートする。

  • data_only
  • 定義が作成済みのテーブルにデータのみをインポートする。

    table_exists_action オプション

    ※content=data_only の場合、table_exists_action オプションは無効。

  • skip (デフォルト)
  • table_exists_action=skip では、テーブルが存在する場合、データのインポートは行わない。

  • truncate
  • table_exists_action=truncate では、テーブルが存在する場合、既存データ行を内部的に truncate してからデータをインポートする。クラスタ表では使用できない。

  • append
  • table_exists_action=append では、テーブルが存在する場合、既存データ行を変更せずにインポートする。append パラメータの注意点としては、制約に引っかかった際に、重複していないデータも含め全件がスキップされてしまうこと。

  • replace
  • table_exists_action=replace では、テーブルが存在する場合、テーブルそのものを内部的に drop してから再作成して、データをインポートする。旧 imp コマンドの ignore 相当のパラメータ。

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

    remap_schema オプション
  • export時のスキーマ:import時のスキーマ
  • 異なるスキーマへ変更する。

    remap_tablepsace オプション
  • export時の表領域:import時の表領域
  • 異なる表領域へ変更する。
    remap_tablespace=users:hogetbs (この場合 users 表領域から hogetbs 表領域へ変更)

    remap_table オプション
  • export時のテーブル:import時のテーブル
  • 異なるテーブルへ変更する。

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

  • no (デフォルト)
  • 既存のデータファイルを初期化・再利用しない。

    data_options オプション
  • disable_append_hint
  • append ヒントを無効化する。

  • skip_constraint_errors
  • 制約違反が発生しても、ロールバックせずにインポートする。

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

    parallel オプション
  • パラレル実行プロセスの最大値を指定
  • ※ Enterprise Edition

    関連記事