Oracleでメディアリカバリ、インスタンスリカバリ、制御ファイル多重化の事例

事例①クリティカル表領域以外のデータファイル破損

ARCHIVEログモードでデータベースを運用しています。ある時、emp表領域のデータファイルが破損してしまったため、RMANでリカバリをする必要がでました。急ぎです。
どのような手順でリカバリを実行すれば良いでしょうか。

(ポイント)

・emp表領域は、SYSTEM表領域やUNDO表領域などのクリティカル表領域ではないため、データベースをオープンしたままでリカバリができます。
・クリティカル表領域以外のデータファイルは、データベースがオープンするタイミングでオープンとなるので、インスタンスのマウントやノーマウントは意識する必要がありません。

(手順)

以下の手順でリカバリを実行します。

①emp表領域をオフラインにする
②破損したデータファイルのバックアップファイルをリストアする
③破損したデータファイルのバックアップファイルをリカバリする
④emp表領域をオンラインにする

事例②クリティカル表領域(SYSTEM)のデータファイル破損

ARCHIVEログモードでデータベースを運用しています。ある時、SYSTEM表領域のデータファイルが破損してしまったため、RMANでリカバリをする必要がでました。どのような手順でリカバリを実行すれば良いでしょうか。現在、データベースはオープンしたままです。

(ポイント)

・SYSTEM表領域はクリティカル表領域なので、データベースをオープンにしたままリカバリができません。そのため一度データベース停止する必要があります。
・クリティカル表領域のディスクリカバリは、インスタンス停止後、データベースをマウント状態にして実行します。

(手順)

以下の手順でリカバリを実行します。

①インスタンスを停止する
②STARTUP MOUNT;でデータベースをマウント状態にする
③破損したデータファイルのバックアップファイルをリストアする
④破損したデータファイルのバックアップファイルをリカバリする
⑤データベースをオープンにする

事例③電源OFFによるインスタンス障害

ARCHIVEログモードでデータベースを運用しています。ユーザーAがdep表にINSERTした後にコミットを実行し、さらにUPDATEを実行した後にサーバーの電源が落ちてしまい、インスタンス障害が発生しました。(UPDATEは未コミット)この時、どのような手順でリカバリを実行すれば良いでしょうか。

(ポイント)

インスタンス障害はSTARTUPコマンド実行で自動的にリカバリされます。
具体的にはインスタンス障害発生後、STARTUPコマンドを実行すると、REDOログファイルとデータファイルが読み込まれます。未コミット分も読み込まれるので、ロールフォワードの状態になります。そして、データベースオープン後にコミットされていない変更(REDOログファイルの一部)をロールバックして、一貫性のある状態にします。

(手順)

以下の手順でリカバリを実行します。

①STARTUPコマンドを実行する

事例④多重化した制御ファイルの一部が破損

SPFILESを利用して、インスタンスを起動しています。4つの制御ファイルを多重化して運用していますが、1つの制御ファイルが破損してしまいました。すぐに変更することは難しいので、とりあえずは残り3つの制御ファイルで運用を継続しようと思います。どのような手順で変更すれば良いでしょうか。

(ポイント)

・ディスク障害である
・制御ファイルはデータベースがマウント時に読み込まれる
・制御ファイルが1つでも破損しているとマウント状態に進めないので、その前の状態、つまりアンマウント時に対策を実施する必要がある
・初期化パラメータを変更するので、再読み込みさせるために変更後、インスタンスを再起動する必要がある

(手順)

①インスタンスを停止する(※インスタンスが起動されていた場合)
②STARTUP NOMOUNTを実行する
③ALTER SYSTEM SET CONTROL_FILES=’正常な制御ファイル名’, ’正常な制御ファイル名’, ’正常な制御ファイル名’ SCOPE = SPFILE;を実行する
④インスタンスを停止する
⑤データベースをオープンにする

事例⑤制御ファイルを多重化したい(※障害ではない)

SPFILESを利用して、データベースを起動しています。現在、制御ファイルは多重化せずに運用していますが、ディスク障害に備えて多重化しようとしています。どのような手順で変更すれば良いでしょうか。

(ポイント)

・新しい制御ファイルの初期化パラメータ追加はインスタンスを停止せずとも実行できます。
(手順)
①ALTER SYSTEM SET CONTROL_FILES=’既存の制御ファイル’,’新しい制御ファイル’ SCOPE = SPFILE;を実行する
②データベースをクローズし、インスタンスを停止する
③OSコマンドを使って、既存の制御ファイルを新しい制御ファイル名でコピーする
④STARTUP;を実行する

(手順)

①でデータベースが起動中に初期化パラメータ値を変更していますが、もちろん、インスタンスを停止した状態でパラメータ値を変更できますが、その場合は手順が増えてしまいます。
以下のような手順です。
①データベースをクローズし、インスタンスを停止する
②OSコマンドを使って、既存の制御ファイルを新しい制御ファイル名でコピーする
③startup nomout;を実行する
④ALTER SYSTEM SET CONTROL_FILES=’既存の制御ファイル’,’新しい制御ファイル’ SCOPE = SPFILE;を実行する
⑤インスタンスを停止する
⑥STARTUP;を実行する

以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です