Oracle:expdpとimpdpの使い方まとめ | けしくんのWebLog

けしくんのWebLog

自分が考えたこと、調べたことを忘れずに残しておくため、Web上にLogを残していきます。

Oracle10g以降のコマンドexpdp/impdpの使い方まとめ。
さらに細かく指定したい場合は、マニュアルをみる。

よく使うOracle SQL/コマンドまとめ

expdp/impdpの実行方法
手順1.DUMPファイルを出力するDIRECTORYオブジェクトの準備
手順2.コマンド実行時に指定するOracleユーザーへの権限付与
手順3.expdpまたはimpdpの実行

DIRECTORYオブジェクトの作成

CREATE DIRECTORY ディレクトリオブジェクト名 AS 'OSのディレクトリ(絶対パス)';

※DUMPファイルはコマンドを実行するOSユーザーがオーナーとなるため、それに合わせた権限をOSディレクトリに与えておくこと。

Oracleユーザーへの権限付与

CREATE  SESSION TO Oracleユーザー名;
CREATE TABLE TO Oracleユーザー名;
GRANT READ,WRITE ON DIRECTORY ディレクトリオブジェクト名
TO expdp/impdpを実行するOracleユーザー名;

※expdp/impdpを実行するOracleユーザーとは別スキーマのオブジェクトを対象とする場合、 更に別の権限が必要となる(そのような場合は、問題なければsystemユーザーまたはそれと同等の権限を持っているユーザーで実行してしまうのが楽)。

expdpの実行(OSコマンド)

expdp Oracleユーザ名/パスワード
directory=ディレクトリオブジェクト名
(dumpfile=ディレクトリオブジェクト名:絶対パス)
(logfile= ディレクトリオブジェクト名:絶対パス)
tables=テーブル名, テーブル名,…
または
schemas=Oracleスキーマ名, Oracleスキーマ名,…

※dumpfileを省略すると、expdat.dmpファイルがディレクトリオブジェクト指定されているOSディレクトリ上に作成される。
※logfileを省略すると、export.logファイルがディレクトリオブジェクト指定されているOSディレクトリ上に作成される。
※dumpファイルとlogファイルを別ディレクトリに出力したい場合は、それぞれディレクトリオブジェクトを用意し、コマンド内で指定する。

impdpの実行(OSコマンド)

impdp Oracleユーザ名/パスワード
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を指定している場合は、このオプションは無効。

impdp Oracleユーザ名/パスワード
directory=ディレクトリオブジェクト名
(dumpfile=ディレクトリオブジェクト名:絶対パス)
(logfile= ディレクトリオブジェクト名:絶対パス)
tables=テーブル名
table_exists_action=[skip | append | truncate | replace]

 

2.schema単位でimpdpを行う際、ORA-39684(オブジェクト型USER:"XXX"はすでに存在します)が発生する。

 

⇒EXCLUDE=USERを指定する。

impdp Oracleユーザ名/パスワード
directory=ディレクトリオブジェクト名
(dumpfile=ディレクトリオブジェクト名:絶対パス)
(logfile= ディレクトリオブジェクト名:絶対パス)
schema=Oracleスキーマ名
exclude=user

 


よく使うOracle SQL/コマンドまとめ