OracleDatabaseのimport/exportで時間と手間を省く


Data Pumpユーティリティは10g以前は使えないので、import/exportを使うことになる。
今回はそのtipsをlogろう。(unix,linux限定だけど;)


10g以前のOracleからのデータ移行って仕事としては結構あるんだよね...


このtipsは、exp時、名前付きパイプを使ってディスクを介さずオンメモリでexp/impしてしまおうというものだ。
どちかというと、データベースリンクが許されない異システム間(例えば基幹系と分析系)のデータ移送バッチなどに組み込むと生きるtips。

エクスポート

mkfifo pipe   # パイプを作る
gzip < pipe > user_name@db_name.dmp.gz &   # パイプをgzipにバックグラウンドでリダイレクト
exp user_name/user_password@db_name file=pipe log=exp.user_name@db_name.dmp.log direct=y   # パイプに対してexp

インポート

mkfifo pipe   # パイプを作る
gunzip < user_name@db_name.dmp.gz > pipe &   # gunzipの出力をパイプにバックグラウンドでリダイレクト
imp userid=\'sys/sys_password@db_name as sysdba\' file=pipe log=imp.user_name@db_name.dmp.log ignore=y feedback=10000 fromuser=user_name touser=user_name   # パイプからimp


exp時の書き出しとgzipのI/O、imp時のgunzipの書き出しとimpのI/Oがかなり短縮されます。