Oracle 10g以降は非推奨とされているOracleのimp/expユーティリティですが、仕事上では普通に使用しています。
よくData Pumpのコマンドとごっちゃになるのでメモしときます。
エクスポート(exp)
exp user/pass@db_sid file=c:¥hoge¥exp.dmp log=c:¥hoge¥exp.log
基本的にfileパラメータとlogパラメータは設定しています。
設定しなくても動作はするらしい。
その他、エクスポート時によく使うであろうオプションは以下の通り。
full
exp user/pass@db_sid file=c:¥hoge¥exp.dmp log=c:¥hoge¥exp.log full=y
full=yの形で指定する。(わざわざfull=nを指定する必要はない)
上記の例では、データベースdb_sidの全てをエクスポートする。
丸々バックアップ取るときとかに使用する。
owner
exp user/pass@db_sid file=c:¥hoge¥exp.dmp log=c:¥hoge¥exp.log owner=(user1,user2,user3)
owner=(user1,user2,user3...)の形で指定する。
単一ユーザーの場合はowner=user1でOK。
複数指定する場合は上記例のようにカッコ書きで指定する。
上記例では、データベースdb_sidのuser1,user2,user3のオブジェクト・データをエクスポートする。
tables
emp user/pass@db_sid file=c:¥hoge¥exp.dmp log=c:¥hoge¥exp.log tables=(tabel1,table2,table3)
tables=(table1,table2,table3...)の形で指定する。
経験上あまり使ったことがない。
上記例では、データベースdb_sidのユーザーuserのテーブルtable1,table2,table3をエクスポートする。
続いてはインポートです。
インポート(imp)
imp user/pass@db_sid file=c:¥hoge¥exp.dmp log=c:¥hoge¥imp.log
こちらもexpと同様に基本的にfileパラメータとlogパラメータは設定しています。
ログファイルはexp時と別にしています。
インポート時によく使うであろうオプションは以下の通り。
full
imp user/pass@db_sid file=c:¥hoge¥exp.dmp log=c:¥hoge¥imp.log full=y
full=yの形で指定する。
上記の例では、exp.dmpファイル中に含まれる全てをインポートする。
tables
imp user/pass@db_sid file=c:¥hoge¥exp.dmp log=c:¥hoge¥imp.log tables=(tabel1,table2,table3)
tables=(table1,table2,table3...)の形で指定する。
上記例では、データベースdb_sidのエクスポート時と同じユーザーにテーブルtable1,table2,table3をインポートする。
fromuser, touser
imp user/pass@db_sid file=c:¥hoge¥exp.dmp log=c:¥hoge¥imp.log fromuser=(user1,user2) touser=(user3,user4)
fromuser=(user1,user2....) touser=(user11,user22...)の形で指定する。
上記例では、user1→user3とuser2→user4の組み合わせで出力時のユーザーを入力時のユーザーに替えてインポートする。
ignore
imp user/pass@db_sid file=c:¥hoge¥exp.dmp log=c:¥hoge¥imp.log ignore=y
インポート時に発生するエラーを無視するオプションで、ignore=yで指定する。(わざわざignore=nを指定する必要はない)
基本的にこれを指定しないと、エラーで処理が終了してしまうので指定しとくと良いのかも。
また、すでにインポート先のテーブルが存在する場合で、データのみインストールしたい場合にもこれを指定すれば良い。
ただし、一意制約等でエラーが出るようなインポート処理を行うと時間がかなりかかるため注意が必要。
まとめ
今回はよく使うメモとしてimp/expユーティリティの使い方をまとめました。
ここまで書いておいてなんですが、Data Pumpが使用できる場合はimpdp/expdpユーティリティを使用したほうが良いです。(当たり前ですが)
Data Pumpの方が出力が早いですし、出来ることもData Pumpの方が多いです。
近いうちにそちらのよく使うメモもまとめたいと思います。
そういえば、Oracle Exadata上で暗号化されたデータベースにはexpユーティリティは使用できませんでした。
Exadataや暗号化で不可であった件はまたしっかり調べてまとめたいです。