OracleのDataPump

最近、昔からのexport/importユーティリティを使用すると、何だがエラーが出る事が多い。

そんな感じなんで、新しいデータ移行ツールであるDataPump(expdp/impdp)を使用してみたりしてみてます。

これがまた、セキュリティの強化が目的とか何とかで、Dumpデータを置くディレクトリが制限されていて、最初使用しようとすると私はちょっとハマってしまいました。後は、パラメーターが全体的に変わっていて(出来る事は変わらないけど)、旧impのfromuser/touserがちょっとだけハマりました。

で、やりかた。
expdpの使用方法
※expdpするサーバ上にて(リモートでもできるかもしれないけど、やったことなし)
スキーマを丸ごとDumpする例です。

1.まず、sqlplusにログイン
>sqlplus ユーザ名/パスワード@データベース別名


2.ディレクトリオブジェクトの作成
>create directory ディレクトリオブジェクト名 as 'ディレクトリのフルパス';


3.使用ユーザにディレクトリに対する読み込み書き込み権限がなければ権限を付ける。
>grant read,write on directory ディレクトリオブジェクト名 to ユーザ名;


4.sqlplusからログオフし、expdpを実行
>expdp ユーザ名/パスワード@データベース別名 DIRECTORY=ディレクトリオブジェクト名 DUMPFILE=ダンプファイル名 SCHEMAS=スキーマ名 LOGFILE=ログファイル名


で、正常終了したらOK。

impdpの使用方法
※impdpするサーバ上にて(リモートでもできるかもしれないけど、やったことなし)
※移行元スキーマと移行先スキーマが異なる際の例です。

1.まず、sqlplusにログイン
>sqlplus ユーザ名/パスワード@データベース別名


2.ディレクトリオブジェクトの作成
>create directory ディレクトリオブジェクト名 as 'ディレクトリのフルパス';


3.使用ユーザにディレクトリに対する読み込み書き込み権限がなければ権限を付ける。
>grant read,write on directory ディレクトリオブジェクト名 to ユーザ名;


4.sqlplusからログオフし、impdpを実行
>impdp ユーザ名/パスワード@データベース別名 DIRECTORY=ディレクトリオブジェクト名 DUMPFILE=ダンプファイル名 REMAP_SCHEMA='元スキーマ名:先スキマー名' LOGFILE=ログファイル名


で、正常終了したらOK。つっても、REMAP_SCHEMAで指定した先スキーマが存在しますってエラーが出るので最低1個のエラーは出ます。先スキーマを作成せずにimpdpしたらいいのか?やったことはないです。

なんか、旧exp/impより速いっつー触れ込みですが、impdpに関しては、統計情報を再生成したりするので、そんなに速い感じはしないです。まあ、impdp直後のオブジェクトの状態としてはいい状態にはなります。

あと、impdp時のスクリプト等のコンパイルエラーもちゃんと出してくれるので、コンパイルエラーを見逃す確率も減ります。

なんで、10gのデータ移行に関しては、DataPumpを使った方がよろしいかと思います。