2011年7月5日火曜日

Oracleのimpで"表がありません"とエラー

真夜中の障害テスト中にドハマリしたので、メモ。

Oracleを使ったシステムを構築している。
データリカバリテストとしてテーブルを一つDROPして、
FULL=Yでexpしておいたファイルから削除したテーブルを
TABLES=で指定してimpコマンドを実行したところ、
"表がありません"とエラー出力された。
sqlplusで接続すると確かに表は作成されていなかった。

ひとまずメッセージを信じてexpしたファイルをviewで
確認したが、件のテーブルをcreateする記述が確かにあった。

結局、勘で原因がわかった。
念のためにDB全体をバックアップするため、
expはSYSTEMユーザで実行している。
ただし、テーブルは通常利用する一般ユーザで作ったものだけを
旧戻しする想定だった。

exp同様、impもSYSTEMユーザで実行したが、
対象テーブルは所有者でないため、認識できなかったようだ。
TOUSERとFROMUSERに一般ユーザを指定したところ、
テーブルが無事に戻った。