web-dev-qa-db-ja.com

Oracleデータディクショナリを更新して、削除されたテーブルスペースとデータファイルを削除する方法は?

要するに、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です。

1
amyassin

データディクショナリに問題はありません。

アクティブなデータベースのundoデータファイルを上書きした瞬間(ファイルロックではこれができないため、どうやって管理したのか疑問に思います)に、データベースを一貫した状態に回復することが不可能になりました。

試した方法は通常のユーザーテーブルスペースで機能しますが、元に戻す操作は異なります。データベースがクラッシュしました。矛盾した状態です。クラッシュ時にアクティブだったトランザクションはロールバックする必要があるため、データベースを一貫した状態に回復することはできません。ロールバックには元に戻す必要がありますが、もう元に戻すことはできません。元に戻すだけをスキップして、その参照を辞書から削除することはできません。

一貫性のないデータベースを開くことができたとしても(場合によっては、これを可能にするいくつかの隠しパラメーターがある)、開いた直後にクラッシュする可能性があります。このシナリオは、もう開くことができず、バックアップもないデータベースからデータを回収する最後の手段の1つです。 (最後の手段は、Oracleデータファイルを直接読み取り、そこからデータを回収できるデータマイニングツールについて、サードパーティ企業に連絡することです。)

通常、RMANバックアップを取得し、不足しているファイルを復元して回復すれば、問題は解決しますが、バックアップはありません。

ダンプファイルがあるので、先に進み、新しい空のデータベースを作成してインポートします。次に、適切なバックアップジョブをスケジュールします。

2
Balazs Papp