ここでは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コマンドを使ったリストアについて解説しました。