ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

Oracle:なぜかINDEXが全くなくなっていたデータベースにINDEXを再作成

普段SI Object Browserというアプリケーションを使って、Oracleを操作しています。
テストで同じ挿入のSQLを2度実行したところ、重複で2度目はエラーになるはずが、エラーになりませんでした。

f:id:AJYA:20160205055350j:plain
photo credit: Experience Green via photopin (license)

制約がなくなっている

SI Object BrowserでINDEXとして表示されるところを見ても、全くなにも表示されません。
テーブルの定義を確認しても、一意制約やインデックスの定義がありません。

復旧作業

自社で開発したものではなく、お客さんから運用を委託されているシステムで、なぜINDEXがないのかはわかりません。
お客さん側で調査をされ、以下の手順でINDEXを復旧することになりました。

  1. 既存のデータベースをSI Object Browserでエクスポート
  2. 既存のデータベースを削除
  3. 新たにデータベースを作成
  4. 新たなデータベース用にリスナーを構成
  5. 新たなデータベースにユーザーを作成
  6. 新たなデータベースにお客さんが用意したINDEXが存在するバックアップから、データを除いてSI Object Browserでインポート
  7. 新たなデータベースに1.でエクスポートしたバックアップから、データのみSI Object Browserでインポート

結果は、目論見通りINDEXが作成され、データも元に戻りました。


本番開始前に発覚して、対処をできて助かりました。