【Oracle】imp/expの書き方とよく使うパラメータのメモ

Oracle imp/expの書き方とよく使うパラメータのメモ

 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→user3user2→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や暗号化で不可であった件はまたしっかり調べてまとめたいです。