要するに、2つのOracleインスタンスが実行されているサーバーora1
およびora2
があります。誰かがora2
のUNDOテーブルスペースを定義し、すでに実行されているora1
のUNDOテーブルスペースデータファイルと同じデータファイルを提供したため、データファイルが破損し、ora1
がシャットダウンされました。インスタンスora1
を再度開こうとすると、次のエラーが発生しました。
ORA-01159: file is not from same database as previous files - wrong database id
alter database datafile .... offline drop;
を試したところ、エラーなしで問題なく動作しましたが、データベースを開くことができなかったため、制御ファイルをバックアップしてファイルを追跡し、再編集して、破損したデータファイルを削除し、新しいコントロールを実行しました。今回は以下のエラーを取得するためだけにファイルします。
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01092: Oracle instance terminated. Disconnection forced
ORA-01173: data dictionary indicates missing data file from system tablespace
Process ID: 9460
Session ID: 355 Serial number: 9
破損したデータファイルは、v$datafile
から選択した場合、またはv$tablespace
からそれに関連付けられたテーブルスペースを選択した場合に表示されなくなりました。
開いてエラーが発生したときにOracleが比較するデータディクショナリを編集する方法はありますか?私の最終的な目標は、データベースを再インストールせずに開くことです。使用しているスキーマ用に復元できるexpdp dmpがあるので、データを失っても大丈夫です。
データベースは、Oracle Linuxサーバー6.3上のOracle 11gR2です。
データディクショナリに問題はありません。
アクティブなデータベースのundoデータファイルを上書きした瞬間(ファイルロックではこれができないため、どうやって管理したのか疑問に思います)に、データベースを一貫した状態に回復することが不可能になりました。
試した方法は通常のユーザーテーブルスペースで機能しますが、元に戻す操作は異なります。データベースがクラッシュしました。矛盾した状態です。クラッシュ時にアクティブだったトランザクションはロールバックする必要があるため、データベースを一貫した状態に回復することはできません。ロールバックには元に戻す必要がありますが、もう元に戻すことはできません。元に戻すだけをスキップして、その参照を辞書から削除することはできません。
一貫性のないデータベースを開くことができたとしても(場合によっては、これを可能にするいくつかの隠しパラメーターがある)、開いた直後にクラッシュする可能性があります。このシナリオは、もう開くことができず、バックアップもないデータベースからデータを回収する最後の手段の1つです。 (最後の手段は、Oracleデータファイルを直接読み取り、そこからデータを回収できるデータマイニングツールについて、サードパーティ企業に連絡することです。)
通常、RMANバックアップを取得し、不足しているファイルを復元して回復すれば、問題は解決しますが、バックアップはありません。
ダンプファイルがあるので、先に進み、新しい空のデータベースを作成してインポートします。次に、適切なバックアップジョブをスケジュールします。