ここではOracleのimpdpコマンドを使ったリストアについて紹介します。

impdpコマンドとは

impdpコマンドは、Oracle10gから導入された新しいインポートユーティリティです。以前のimpコマンドはOracle11g以降、非推奨となっています。

impdpのインポートには以下の4種類があります。
・データベース全体のインポート
・スキーマ単位のインポート
・表領域単位のインポート
・テーブル単位のインポート
impdpコマンドはコマンドプロンプトで実行します。


デフォルトのインポートファイルの格納場所の確認

impdpコマンドではインポートファイルの格納場所を自由に指定できません。
既存のディレクトリを指定するか、CREATE DIRECTORY文でディレクトリ・オブジェクトを作成します。
既存のディレクトリは以下のSQL文を実行して DIRECTORY_PATH を確認します。

SELECT * FROM DBA_DIRECTORIES WHERE DIRECTORY_NAME = 'DATA_PUMP_DIR';

Oracle Database 21c Express Edition の DATA_PUMP_DIR の DIRECTORY_PATH は「C:\app\product\21c\admin\xe\dpdump/1B9A306AF0A44EDE9F5C5A6FB718B61F」でした。


データベース全体のインポート

以下はデータベース全体をインポートするimpdpコマンドの構文です。

構文

impdp {ユーザー名}/{パスワード}@{接続文字列}
      full=y
      directory={ディレクトリ}
      dumpfile={ファイル名}
      log={ログファイル名}

以下はデータベース全体をインポートするimpdpコマンドの例です。

C:\>impdp sample/pass@XEPDB1 directory=DATA_PUMP_DIR dumpfile=db.dmp logfile=db.log full=y

 


スキーマ単位のインポート

以下はスキーマ単位にインポートするimpdpコマンドの構文です。

構文

  impdp {ユーザー名}/{パスワード}@{接続文字列}
        schemas={スキーマ名}
        directory={ディレクトリ}
        dumpfile={ファイル名}
        log={ログファイル名}

以下はスキーマ単位にインポートするimpdpコマンドの例です。

C:\>impdp sample/pass@XEPDB1 schemas=sample directory=DATA_PUMP_DIR dumpfile=sample.dmp logfile=sample.log

 


スキーマ単位のバックアップファイルから異なるスキーマにインポートする場合は remap_schema を指定します。
以下はスキーマ単位のバックアップファイルから異なるスキーマにインポートする場合のimpdpコマンドの構文です。

構文

  impdp {ユーザー名}/{パスワード}@{接続文字列}
        remap_schema={スキーマ名元:スキーマ名先}
        directory={ディレクトリ}
        dumpfile={ファイル名}
        log={ログファイル名}

以下はスキーマ単位のバックアップファイルから異なるスキーマにインポートする場合のimpdpコマンドの例です。

C:\>impdp sample/pass@XEPDB1 remap_schema=sample:test directory=DATA_PUMP_DIR dumpfile=sample.dmp logfile=test.log

 


表領域単位のインポート

以下は表領域単位にインポートするimpdpコマンドの構文です。

構文

  impdp {ユーザー名}/{パスワード}@{接続文字列}
        tablespaces={表領域}
        directory={ディレクトリ}
        dumpfile={ファイル名}
        log={ログファイル名}

以下は表領域単位にインポートするimpdpコマンドの例です。

C:\>impdp sample/pass@XEPDB1 tablespaces=USERS directory=DATA_PUMP_DIR dumpfile=USERS.dmp logfile=USERS.log

 


テーブル単位のインポート

以下はテーブル単位にインポートするimpdpコマンドの構文です。

構文

  impdp {ユーザー名}/{パスワード}@{接続文字列}
        tables={テーブル名}
        directory={ディレクトリ}
        dumpfile={ファイル名}
        log={ログファイル名}

以下はテーブル単位にインポートするimpdpコマンドの例です。

C:\>impdp sample/pass@XEPDB1 tables=EMP directory=DATA_PUMP_DIR dumpfile=EMP.dmp logfile=EMP.log

 


複数のテーブルのバックアップファイルからインポートする場合は、テーブル名とバックアップファイル名をカンマで区切ります。
以下は複数のテーブルのバックアップファイルからインポートする場合のimpdpコマンドの例です。

C:\>impdp sample/pass@XEPDB1 tables=EMP1, EMP2, EMP3 directory=DATA_PUMP_DIR dumpfile=EMP1.dmp, EMP2.dmp, EMP3.dmp logfile=table.log

 


スキーマ単位のバックアップファイルからインポートする場合は、テーブル名をカンマで区切ります。また、インポート先のテーブルの存在した場合の動きは table_exists_action を指定します。
table_exists_actionの定義は以下の通りです。
・truncate:既存データをtruncateしてからインポートする。
・replace:既存の定義をdropしてからインポートする。
・append:既存のデータはそのままにインポートする。
・skip:既存の定義とデータはそのままで、次のオブジェクトのインポートに移る。
以下はスキーマ単位のバックアップファイルから既存の定義をdropしてからインポートする場合のimpdpコマンドの例です。

C:\>impdp sample/pass@XEPDB1 tables=EMP1, EMP2, EMP3 table_exists_action=replace directory=DATA_PUMP_DIR dumpfile=sample.dmp logfile=table.log

 



以上、Oracleのimpdpコマンドを使ったリストアについて解説しました。