Oracle10g以降のコマンドexpdp/impdpの使い方まとめ。
さらに細かく指定したい場合は、マニュアルをみる。
よく使うOracle SQL/コマンドまとめ
expdp/impdpの実行方法
手順1.DUMPファイルを出力するDIRECTORYオブジェクトの準備
手順2.コマンド実行時に指定するOracleユーザーへの権限付与
手順3.expdpまたはimpdpの実行
DIRECTORYオブジェクトの作成
※DUMPファイルはコマンドを実行するOSユーザーがオーナーとなるため、それに合わせた権限をOSディレクトリに与えておくこと。
Oracleユーザーへの権限付与
CREATE TABLE TO Oracleユーザー名;
GRANT READ,WRITE ON DIRECTORY ディレクトリオブジェクト名
TO expdp/impdpを実行するOracleユーザー名;
※expdp/impdpを実行するOracleユーザーとは別スキーマのオブジェクトを対象とする場合、 更に別の権限が必要となる(そのような場合は、問題なければsystemユーザーまたはそれと同等の権限を持っているユーザーで実行してしまうのが楽)。
expdpの実行(OSコマンド)
directory=ディレクトリオブジェクト名
(dumpfile=ディレクトリオブジェクト名:絶対パス)
(logfile= ディレクトリオブジェクト名:絶対パス)
tables=テーブル名, テーブル名,…
または
schemas=Oracleスキーマ名, Oracleスキーマ名,…
※dumpfileを省略すると、expdat.dmpファイルがディレクトリオブジェクト指定されているOSディレクトリ上に作成される。
※logfileを省略すると、export.logファイルがディレクトリオブジェクト指定されているOSディレクトリ上に作成される。
※dumpファイルとlogファイルを別ディレクトリに出力したい場合は、それぞれディレクトリオブジェクトを用意し、コマンド内で指定する。
impdpの実行(OSコマンド)
directory=ディレクトリオブジェクト名
(dumpfile=ディレクトリオブジェクト名:絶対パス)
(logfile= ディレクトリオブジェクト名:絶対パス)
tables=テーブル名, テーブル名,…
または
schemas=Oracleスキーマ名, Oracleスキーマ名,…
<オプション>
content=all(デフォルト) または data_only または metadata_only
※export時の表領域やスキーマを、import時に変更することも可能。その場合は以下のように指定する。
remap_tablespace=変更元の表領域名:変更先の表領域名
remap_schema=変更元のスキーマ名:変更先のスキーマ名
※すでにテーブルオブジェクトが作成されている環境にデータのみを入れたい場合、
オプションでcontent=data_onlyを指定する
テーブル定義だけImportしたい場合は、content=metadata_onlyを指定する
デフォルトでは、テーブルを作り、データを入れるように動くため、テーブルが存在するとエラーとなる
【よくあるエラーとその対応】
1.Tableあるいはschema単位でimpdpを行う際、ORA-39151(表が存在します)が発生する。
⇒TABLE_EXISTS_ACTIONを指定する。
・SKIP : 表に対して何もしない。ただし、CONTENT=DATA_ONLYを指定している場合は、このオプションは無効。これがデフォルトだが、明示的にSKIPを指定しないと、impdpコマンド自体はエラー終了する。
・APPEND : 表のデータはそのままにして、ソースからデータをロードする。
・TRUNCATE : 表からデータを削除して、ソースからデータをロードする。
・REPLACE : 表を削除し、ソースから表とデータをロードする。ただし、CONTENT=DATA_ONLYを指定している場合は、このオプションは無効。
directory=ディレクトリオブジェクト名
(dumpfile=ディレクトリオブジェクト名:絶対パス)
(logfile= ディレクトリオブジェクト名:絶対パス)
tables=テーブル名
table_exists_action=[skip | append | truncate | replace]
2.schema単位でimpdpを行う際、ORA-39684(オブジェクト型USER:"XXX"はすでに存在します)が発生する。
⇒EXCLUDE=USERを指定する。
directory=ディレクトリオブジェクト名
(dumpfile=ディレクトリオブジェクト名:絶対パス)
(logfile= ディレクトリオブジェクト名:絶対パス)
schema=Oracleスキーマ名
exclude=user