目的
expとimpは公式に非推奨となり、expdp/impdpのパフォーマンスが比較的によいのため、
expdpとimpdpに変更して、
という、上司からの**「簡単」**な指示があった。
実際の作業で、expdp/impdpのメリットは全然体験できず、
デメリットしか記憶に残っていないので、この記事は同じようにexpdp/impdpを検討している人に参考になればと思う。
コマンドのサンプル
expdp USER/Pass@DB directory=DATA_PUMP_DIR dumpfile=test01.dmp logfile=test01_exp.log tables=tbl01 reuse_dumpfiles=yes
impdp USER/Pass@DB directory=DATA_PUMP_DIR dumpfile=test01.dmp logfile=test01_imp.log table_exists_action=truncate query='where id=1'
注意事項
expdpとimpdpの最大の変更はダンプファイルの場所であると思う。
(場合によっては厄介になる)
expではダンプファイルがクライアント側に保存されるが、
expdpではDB側に保存される。
※具体的には、DBサーバに定義されているDIRECTORYというロジック場所に保存される。
ネット上の共有フォルダなどを使用しない限り、DIRECTORYは基本的にDBサーバにある。
簡単に言うと、
expは
①ダンプファイルを直接に指定の場所に作成、というone-stepであったが、
expdpは
①ダンプファイルをDB側に作成
②DBサーバからダンプファイルを取ってくる
のようなtwo-stepになった。
※impdpは逆に、ローカルからDBサーバにダンプファイルをコピーしてからインポートする必要がある。
もしexpdpで作成したダンプファイルはそのまま使う場合(ダンプファイルがDBサーバのDIRECTORYに残っている)は、コピー作業が発生しないので、この場合のみはexp/impより便利になると思う。
このため、バックアップや移行など時に、expdpの抽出性能が上がっても、expと比べてDB側からクライアント側や保存したい場所にダンプファイルやexpのログをコピー・移動する作業が発生する。
特に、クライアント側はWindow、DBサーバはLinuxの場合は、ネット上でDIRECTORYの物理フォルダを共有したり、SMBを構築したり、(特に企業の場合)ADドメインに追加したり、色んな追加作業・知識が必要。
余計な話
「抽出と取込の性能のみで判断」という前提があれば、expdp/impdpはよいかもしれないが、
作業は単純なものでなく、色んな状況を考えないといけない。
個人業務には影響少ないと考えられるが、会社や企業の作業にはやはり影響は大きい。
「ダンプファイルのコピーだけが増えるじゃない?」と言われるかもしれないが、
会社や企業でのファイルコピーに対して、
①各環境(Win・Linux・ActiveDirectoryなど)のユーザ・アカウント・権限の追加と変更
②抽出・取込変更後の動作確認
③抽出・取込変更前とのパフォーマンスの比較
④ログもDB側に出力されるため、ログの解析が必要な場合ログのコピーも必要になる
など色々作業が発生するので、十分の工数を予め確保したほうがよいと思う。