• ベストアンサー

imp コマンドに関して

OS:winXp オラクル バージョン:10.2 ◎作業 1.testユーザをexpでバックアップ(BK1.dmp)を作成しました。 2.testユーザのテーブルのレコードを変更、削除追加などを行う 3.testユーザにimpでバックアップ(BK1.dmp)を行ったところ『一意制約エラーが発生します』のエラーが出ます。 (1)そのままのエラーだと思うのですが、この場合testユーザを再作成した方がいいのでしょうか? (2)1の状態に戻す方法が、他にもあるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.2

impユーティティは以下の動きをします。 (1)オブジェクトを作成 ※オブジェクトが存在した場合はエラーとなる。  ignore=yで回避可能。 (2)データをインサート  exp時点のデータを単純にインサートするだけ。  既にテーブルにデータが入っていれば重複する。 データを戻す場合はテーブルデータを削除(delete)してからimpします。 ユーザを削除すると、対象ユーザに対する操作(grant等)が 削除されるので、あまりやらない方が良いと思います。 まあ、exp時点に完全に戻したいなら、ユーザ削除からimpでも 良いと思います。

tyome2
質問者

お礼

お礼が遅くなって申し訳ありません。 手っ取り早いのは、ユーザ削除してユーザの再作成なんですかね? 『一意制約エラー』にならない条件があるのではと思いました。 レコードがあったら消して入れるみたいな。。。 ありがとうございました。

その他の回答 (1)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

ユーザを作り直す方法もありますが、対象がテーブルだけなのであれば、テーブルを空にしてtables='%'で再実行してもいいのでは。 ヒープテーブルが含まれていればデータはダブって入っているでしょうから。

tyome2
質問者

お礼

お礼が遅くなって申し訳ありません。 変更されたテーブルがすぐわかるのであればそれでもいいかもですね。 全テーブルをTRUNCATEするプロシージャを作ればいいんですかね。 それから、impを行えば『一意制約エラー』も起きないですね。 ありがとうございます。

関連するQ&A