咨询微信: dbservice1234 7 x 24 在线支持!

Oracle 表領域の削除を不完全リカバリによって取り消す方法

Oracle 表領域の削除を不完全リカバリによって取り消す方法

ORACLEデータベース によくあるエラ の解決策

プロのOracle Databaseの復旧サービスを提供
携帯番号: +86 13764045638 メール:service@parnassusdata.com

 

 

[質問]

ARCHIVELOGモードのデータベースで表領域を誤って削除してしまったため、不完全メディア・リカバリ
によって表領域の削除前の状態に戻したいと考えています。その場合の手順を教えてください。



[回答]
1. 表領域の削除が行われた時刻をalert.logで調べます。
     Mon Nov 26 13:32:40 2001
     drop tablespace local_ts including contents
2. 1.の時点より前の制御ファイルのバックアップ(削除された表領域のファイルのエントリが
   含まれているもの)がない場合は、現時点での制御ファイルのバックアップをTO TRACEで
   取得します。
     alter database backup controlfile to trace;
   生成されたトレース・ファイルを次のように修正します。
     - トレースのヘッダ等は削除
     - CREATE CONTROLFILEコマンドのNORESETLOGSをRESETLOGSに変更
     - CREATE CONTROLFILEコマンドに削除してしまった表領域のファイルのエントリを追加
     - CREATE CONTROLFILE以外のコマンド(RECOVER DATABASE等)を削除
3. ログ・スイッチを行い、最後のログがアーカイブされてからインスタンスを停止します。
4. 1.の時刻より前に取得されたすべてのデータ・ファイルのバックアップをリストアします。
   制御ファイルのバックアップがあればそれもリストアします。
5. 制御ファイルのバックアップがないため2の方法でスクリプトを作成した場合は、NOMOUNTで
   インスタンスを起動し、2のCREATE CONTROLFILEコマンドを実行します。
   4.で制御ファイルのバックアップをリストアした場合は、MOUNTでインスタンスを起動します。
6. 表領域の削除が行われた時刻を指定して不完全リカバリを実行します。
     recover automatic database until time '2001-11-26:13:32:40' using backup controlfile
7. resetlogsでオープンします。

注意事項
 削除された表領域のエントリを持つ制御ファイルのバックアップがない場合は、必ず2.のステップを
 行ってください。リカバリで使用する制御ファイルにエントリがない表領域はリカバリされません。
 3.でログ・スイッチをしてカレントのログをアーカイブさせているのは、6.のリカバリで必要な
 ログがすべてアーカイブされているようにするためです。USING BACKUP CONTROLFILEを指定した
 リカバリではオンライン・ログは自動的には参照されないため、アーカイブにないログが必要に
 なるとエラーになります。オンライン・ログが残っていればその名前を手動で指定することでログを
 適用できます。
 データベース全体を不完全リカバリしますので、6.のUNTIL TIMEで指定した時刻以降の更新はすべて
 失われることに注意してください。削除した表領域以外を最新の状態のまま残したい場合は、上記の
 リカバリを本番環境とは別のコピーのデータベースで実施し、削除前の状態までリカバリした表領域
 からエクスポートなどでオブジェクトを抽出して、本番環境に作成した空の表領域にインポートする
 等の作業が必要です。表領域Point-In-Timeリカバリでは削除した表領域をリカバリすることは
 できません。