障害ケース一覧

 

 本番機での回復テスト実行の際に、以下の表にある障害ケースを擬似的に起こす。

 

Case

No.

障害ケース

1

SYSTEM表領域のデータファイルの消失

2

ロールバックセグメントを持たないSYSTEM表領域以外のデータファイルの消失

3

ロールバックセグメントを持つSYSTEM表領域以外のデータファイルの消失

4

未アーカイブオンラインREDOログファイルの消失

5

バックアップされた制御ファイルを使用した回復処理

6

REDOログ・ファイルの回復処理

 

 ただし上表の障害ケースは、一般的に(比較的現実にあるいは頻繁に)起こりうるケースのみ列挙している。

 特殊な状況での回復手順(例えばデータベースのRESETLOGSオプション付き起動をはさんでのリカバリー等)は対象にしていない。

 

 なお、この手順書の障害ケースがすべてを網羅しているわけではなく、また実際の障害発生時にはこれらの障害ケースが複合的に発生する可能性が高い。

 評価機上で定期的に、バックアップ&リカバリーのテストを実施することを強く推奨する。

 また、本手順書に従い回復処理を実行したとしても、すべての障害に対応できるとは限らない。ORACLEの障害は様々なパターンがあるので、やはり定期的にテストを実行し慣れておくことが必要である。

 

想定障害ケースとそのリカバリー手順について

 このレポートには、障害事例として挙げた数パターンと同様の(あるいは近い)状況を引き起こし、リカバリー手順を実際に行ってみた結果が記載されている。

 各ケースごとに、「説明」「障害状況」「解決方法」「評価」のセクションが設けられている。

 テスト環境で使用するインスタンス名は、inst1とする。

 

レポート内のORACLEリカバリーイメージ中の文字化けについて

原因は不明だが、通常通り一度のCONNECTによりコマンドを発行すると、ORACLEからのその戻りメッセージが以下のように文字化け(“?????”部分)を起こす。

 

SQL> recover database until cancel;

ORA-00279: ?? 59877344(04/04/2001 10:21:10???)???????? 1??????

ORA-00289: ????????????: /vol1/database/orcl/arch01/arch_1_15.log

ORA-00280: ?? 59877344(???? 1)????? 15???????

 

 

ログの指定: {<RET>=suggested | filename | AUTO | CANCEL}

cancel

ORA-01547: ??: RECOVER????????OPEN RESETLOGS???????????????

ORA-01194: ???? 1??????????????????????????

ORA-01110: ???????? 1 : /vol1/database/orcl/system/inst1_sys.dbf

 

 

ORA-01112: ??????????????????????

 

この文字化けを解消するための方法として、再度CONNECTしなおすと正常に日本語が表示されるようになるようである。

 

SQL> recover database until cancel; ← 同セッション内で再度CONNECTをしなおす。

ORA-00279: 変更 59877344(04/04/2001 10:21:10で生成)にはスレッド番号

1が必要です。

ORA-00289: 検討すべきログ・ファイル: /vol1/database/orcl/arch01/arch_1_15.log

ORA-00280: 変更 59877344(スレッド 1)は順序番号 15に存在します。

 

 

ログの指定: {<RET>=suggested | filename | AUTO | CANCEL}

cancel

ORA-01547: 警告: RECOVERは成功しましたがOPEN

RESETLOGSが次のエラーを受け取りました。

ORA-01194: ファイル 1は一貫した状態にするためにさらにリカバリが必要です。

ORA-01110: データ・ファイル 1 : /vol1/database/orcl/system/inst1_sys.dbf

 

 

ORA-01112: メディアのリカバリ処理が開始されていません。

 

Case 01

SYSTEM表領域のデータファイルの消失

説明

SYSTEM表領域のデータファイルのような重要なデータファイルが消失した場合は、回復処理で使用できるオプションが限られている。

 

障害状況

ディスクがクラッシュし、ディスク上のSYSTEM表領域のデータファイルが消失した。

 

解決方法

通常のデータファイルはオフライン状態でもデータベースは起動できるが、SYSTEM表領域に所属しているデータファイルは例外である。この場合、最新のオンラインあるいはオフラインバックアップからSYSTEMのデータファイルをリストアし、データベースの回復処理を実行するしか解決方法はない。

ディスクのクラッシュ等によってデータファイルがいくつか破損した場合、破損したすべてのデータファイルをオンラインあるいはオフラインバックアップからリストアする必要があることに注意すること。

データベースをオープンするには、データベースをマウントして、RECOVER DATABASEコマンドを実行する必要がある。

 

評価

評価実施日

 

評価実施機

test

事前準備:

1.     テストのために数回ログ・スイッチをしておく。

2.      SYSTEM表領域に属するデータファイルを削除する。
rm /vol1/database/orcl/system/inst1_sys.dbf

 

《 重要 》

回復処理の際に、障害個所を探し当てるために以下の手順を実行する。

以下の手順を踏まなければ、正確な障害個所を把握することはできない!

@      アラート・ファイルを確認する。
ORACLEデータベースに何か障害が発生した場合は、まずアラート・ファイルの内容を確認すること。
このファイルには障害の情報の他に、データベースの構成に影響を与えるようなタスク(ALTERコマンドによる変更等)も記録されている。
このテスト環境では、アラート・ファイルは以下の場所に保存されている。

/vol1/database/orcl/admin/bdump/alert_inst1.log

A      トレース・ファイルを確認する。
上記@と同じ場所に、トレース・ファイルも格納されている。各プロセス(DBWR、ARCH、LGWR、SMON等)ごとにファイルが生成されているので、最新の日付のものの内容を確認する。

B      動的パフォーマンス表を検索する。
- V$DATAFILEでファイルの位置、ファイル番号、状態を確認する。
  SQL>
select name, file#, status from v$datafile;

- V$RECOVER_FILEでリカバリーが必要なファイルを確認する。
  SQL>
select * from v$recover_file;

- V$RECOVERY_FILE_STATUSでリカバリーが必要なファイルを確認する。
  SQL>
select * from v$recovery_file_status;

C      OSプロンプトからoerrコマンド(ORACLEユーティリティー)を実行し、エラー番号より障害内容を確認する(このユーティリティーの使用方法は、後述「oerrコマンドによるエラー内容の確認」を参照のこと)。

 

 

      SYSTEM表領域に属するデータファイルに障害がある状態で、データベースをオープンしようとするとエラーが表示され起動できない。
SQL>
startup pfile=/vol1/database/orcl/admin/pfile/initinst1.ora
ORACLEインスタンスが起動しました。

Total System Global Area 1314236540 bytes
Fixed Size                   116860 bytes
Variable Size             125943808 bytes
Database Buffers         1187840000 bytes
Redo Buffers                 335872 bytes
データベースがマウントされました。
ORA-01157: ???????? 1???/?????????DBWR???????????????????
ORA-01110: ???????? 1 : /vol1/database/orcl/system/inst1_sys.dbf

      SYSTEM表領域はオンラインでは回復処理ができないため、一度shutdownしマウント状態までデータベースを起動しなおす。
SQL>
startup mount pfile=/vol1/database/orcl/admin/pfile/initinst1.ora
ORACLEインスタンスが起動しました。

Total System Global Area 1314236540 bytes
Fixed Size                   116860 bytes
Variable Size             125943808 bytes
Database Buffers         1187840000 bytes
Redo Buffers                 335872 bytes
データベースがマウントされました。

      データベースをマウント状態にし、RECOVER DATABASEを実行する。
SQL>
recover database
ORA-00279: 変更 59857249(04/04/2001 09:18:49で生成)にはスレッド番号
1が必要です。
ORA-00289: 検討すべきログ・ファイル: /vol1/database/orcl/arch01/arch_1_10.log
ORA-00280: 変更 59857249(スレッド 1)は順序番号 10に存在します。


ログの指定: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 変更 59857294(04/04/2001 17:45:58で生成)にはスレッド番号
1が必要です。
ORA-00289: 検討すべきログ・ファイル: /vol1/database/orcl/arch01/arch_1_11.log
ORA-00280: 変更 59857294(スレッド 1)は順序番号 11に存在します。
ORA-00278: ログ・ファイル
/vol1/database/orcl/arch01/arch_1_10.logはこのリカバリでは必要なくなりました。


ORA-00279: 変更 59857295(04/04/2001 17:46:06で生成)にはスレッド番号
1が必要です。
ORA-00289: 検討すべきログ・ファイル: /vol1/database/orcl/arch01/arch_1_12.log
ORA-00280: 変更 59857295(スレッド 1)は順序番号 12に存在します。
ORA-00278: ログ・ファイル
/vol1/database/orcl/arch01/arch_1_11.logはこのリカバリでは必要なくなりました。


ORA-00279: 変更 59857296(04/04/2001 17:46:13で生成)にはスレッド番号
1が必要です。
ORA-00289: 検討すべきログ・ファイル: /vol1/database/orcl/arch01/arch_1_13.log
ORA-00280: 変更 59857296(スレッド 1)は順序番号 13に存在します。
ORA-00278: ログ・ファイル
/vol1/database/orcl/arch01/arch_1_12.logはこのリカバリでは必要なくなりました。


ログが適用されました。
メディア・リカバリが完了しました。

      データベースの回復処理が完了したら、オープン状態にする。
SQL>
alter database open;

データベースが変更されました。

備考

 

 

 

 

Case 02

ロールバックセグメントを持たないSYSTEM表領域以外のデータファイルの消失

説明

ロールバックセグメントが格納されていないような、SYSTEM表領域以外のデータファイルが消失した場合、たくさんのオプションの中から回復方法を選択できる。

ここでは以下の3つの方法を評価することにする。

1.    データベースの回復

2.    データファイルの回復

3.      表領域の回復

 

障害状況

ディスクがクラッシュし、ユーザーデータ表領域に格納されていたデータファイルの1つが消失した。

この表領域にはロールバックセグメントは1つも格納されていない。

 

解決方法

SYSTEM表領域以外のデータファイルが消失した場合、そのデータファイルを手動で回復するための方法は3つある。RECOVER DATABASEコマンドを使用する場合は、データベースをオープン状態ではなく、マウント状態にする必要がある。つまり、オフラインの回復処理を実行する必要がある。

RECOVER DATAFILEコマンドを使用する場合、該当するデータファイルはオフラインにしておく必要があるが、データベースはオープン状態かマウント状態のどちらでもかまわない。

RECOVER TABLESPACEコマンドを使用する場合は、該当する表領域をオフライン状態にし、データベースをオープン状態にする必要がある。

 

評価

評価実施日

2003/**/**

評価実施機

test

事前準備:

1.      擬似障害を発生させる。
擬似障害を起こすために、マニュアルでデータファイルを削除する。
rm /vol1/database/orcl/data01/inst1_data07.dbf

2.      データベースをshutdownする。
データファイルを削除した後で、データベースをshutdownしようとすると以下のようなエラーが発生し、shutdownできない。
SQL>
shutdown
ORA-01116: データベース・ファイル 12のオープンでエラーが発生しました。
ORA-01110: データ・ファイル 12 : /vol1/database/orcl/data01/inst1_data07.dbf
ORA-27041: ファイルをオープンできません。
IBM AIX RISC System/6000 Error: 2: No such file or directory
Additional information: 3

 

《 重要 》

回復処理の際に、障害個所を探し当てるために以下の手順を実行する。

以下の手順を踏まなければ、正確な障害個所を把握することはできない!

@      アラート・ファイルを確認する。
ORACLEデータベースに何か障害が発生した場合は、まずアラート・ファイルの内容を確認すること。
このファイルには障害の情報の他に、データベースの構成に影響を与えるようなタスク(ALTERコマンドによる変更等)も記録されている。
このテスト環境では、アラート・ファイルは以下の場所に保存されている。

/vol1/database/orcl/admin/bdump/alert_inst1.log

A      トレース・ファイルを確認する。
上記@と同じ場所に、トレース・ファイルも格納されている。各プロセス(DBWR、ARCH、LGWR、SMON等)ごとにファイルが生成されているので、最新の日付のものの内容を確認する。

B      動的パフォーマンス表を検索する。
- V$DATAFILEでファイルの位置、ファイル番号、状態を確認する。
  SQL>
select name, file#, status from v$datafile;

- V$RECOVER_FILEでリカバリーが必要なファイルを確認する。
  SQL>
select * from v$recover_file;

- V$RECOVERY_FILE_STATUSでリカバリーが必要なファイルを確認する。
  SQL>
select * from v$recovery_file_status;

C      OSプロンプトからoerrコマンド(ORACLEユーティリティー)を実行し、エラー番号より障害内容を確認する(このユーティリティーの使用方法は、後述「oerrコマンドによるエラー内容の確認」を参照のこと)。

 

方法1:データファイルの回復

      消失したデータファイルを、オフラインまたはオンライン・バックアップから復元する。

      データファイルの回復はオンラインでもオフラインも可能であるが、オンラインでの回復を実行する場合は該当するデータファイルをオフライン状態にしなければならない。
SQL>
shutdown abort
ORACLEインスタンスがシャットダウンされました。

      RECOVER DATAFILEを実行する(データベースはマウントかオープン状態)。
SQL>
startup mount pfile=/vol1/database/orcl/admin/pfile/initinst1.ora
ORACLEインスタンスが起動しました。

Total System Global Area 1314236540 bytes
Fixed Size                   116860 bytes
Variable Size             125943808 bytes
Database Buffers         1187840000 bytes
Redo Buffers                 335872 bytes
データベースがマウントされました。

      RECOVER DATAFILEを実行し、障害が起こったデータファイルのリカバリーを実行する。ログの指定は通常はAUTOで良い。
SQL>
recover datafile '/vol1/database/orcl/data01/inst1_data07.dbf'
ORA-00279: ?? 59857116(
04/02/2001 09:43:55???)???????? 1??????
ORA-00289: ????????????: /vol1/database/orcl/arch01/arch_1_8.log
ORA-00280: ?? 59857116(???? 1)????? 8???????

ログの指定: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: ?? 59857163(
04/02/2001 12:37:14???)???????? 1??????
ORA-00289: ????????????: /vol1/database/orcl/arch01/arch_1_9.log
ORA-00280: ?? 59857163(???? 1)????? 9???????
ORA-00278: ??????? /vol1/database/orcl/arch01/arch_1_8.log???????????????????


ORA-00279: ?? 59857164(
04/02/2001 12:37:24???)???????? 1??????
ORA-00289: ????????????: /vol1/database/orcl/arch01/arch_1_10.log
ORA-00280: ?? 59857164(???? 1)????? 10???????
ORA-00278: ??????? /vol1/database/orcl/arch01/arch_1_9.log???????????????????


ORA-00279: ?? 59857165(
04/02/2001 12:37:32???)???????? 1??????
ORA-00289: ????????????: /vol1/database/orcl/arch01/arch_1_11.log
ORA-00280: ?? 59857165(???? 1)????? 11???????
ORA-00278: ??????? /vol1/database/orcl/arch01/arch_1_10.log???????????????????


ログが適用されました。
メディア・リカバリが完了しました。

      リカバリーが完了したら、データベースをオープンする。

      以下のSQL文を発行し、障害が起こったデータファイルのSTATUSを調べる。データファイルの状態がOFFLINEであれば、ONLINEにする。

SQL>
select name, file#, status from v$datafile;

<<検索結果>>
  :
/vol1/database/orcl/data01/inst1_data07.dbf 12 OFFLINE
  :
  :

      データファイルがOFFLINEの場合は、以下のコマンドを発行してONLINEにする。
SQL>
alter database datafile '/vol1/database/orcl/data01/inst1_data07.dbf' online;

データベースが変更されました。

方法2:データベースの回復

      消失したデータファイルを、オフラインまたはオンライン・バックアップから復元する。
ただ戻した状態では当然データベースは起動も停止もできない。この状態でshutdownを行おうとすると、以下のようなメッセージが表示される。

SQL>
shutdown
ORA-01122: データベース・ファイル 12の照合検査でエラーが発生しました。
ORA-01110: データ・ファイル 12 : /vol1/database/orcl/data01/inst1_data07.dbf
ORA-01208: データ・ファイルは古いバージョンです。現行バージョンにアクセスできません。

      ABORTオプション付きでデータベースを停止する。
SQL>
shutdown abort
ORACLEインスタンスがシャットダウンされました。

      RECOVER DATABASEを実行するために、MOUNTオプション付きでデータベースを起動する。
SQL>
startup mount pfile=/vol1/database/orcl/admin/pfile/initinst1.ora
ORACLEインスタンスが起動しました。

      データベースがマウントされたらRECOVER DATABASEを実行する。ログの指定は通常はAUTOで良い。
SQL>
recover database
ORA-00279: ?? 59857116(04/02/2001 09:43:55???)???????? 1??????
ORA-00289: ????????????: /vol1/database/orcl/arch01/arch_1_8.log
ORA-00280: ?? 59857116(???? 1)????? 8???????


ログの指定: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: ?? 59857164(
04/02/2001 18:29:44???)???????? 1??????
ORA-00289: ????????????: /vol1/database/orcl/arch01/arch_1_9.log
ORA-00280: ?? 59857164(???? 1)????? 9???????
ORA-00278: ??????? /vol1/database/orcl/arch01/arch_1_8.log???????????????????


ログが適用されました。
メディア・リカバリが完了しました。

      リカバリーが完了したら、データベースをオープンする。
SQL>
alter database open;

データベースが変更されました。

 

方法3:表領域の回復

 

 

備考

以下のSQL文を発行することにより、データファイルの絶対パス付きデータファイル名、ファイル番号、状態を確認することができる。

select name, file#, status from v$datafile;

 

 

Case 03

ロールバックセグメントを持つSYSTEM表領域以外のデータファイルの消失

説明

SYSTEM表領域以外のデータファイルが消失し、それにロールバックセグメントが格納されていた場合は、回復処理を行う際には注意を要する。特にオンライン回復処理を実行する場合は、このような状況から回復するための方法を良く理解しておく必要がある。

 

障害状況

媒体障害のため、ロールバックセグメント表領域に所属しているデータファイルがすべて消失した。

 

解決方法

消失したデータファイルがロールバックセグメントの表領域に所属している場合、回復処理は注意が必要である。オンライン回復処理を実行するために、消失したデータファイルを媒体回復処理時にすべてオフライン状態にした。つまり該当するデータファイルに所属しているロールバックセグメントを、すべて回復する必要がある。ただし、回復処理を実行している間、該当するロールバックセグメントを示しているアクティブなトランザクションに関連する行には、一切アクセスできない。

つまり、該当するロールバックセグメントが格納されているデータファイルを回復するまで、新しいアプリケーションを処理するために一時的なロールバックセグメントを作成する必要がある。

 

評価

評価実施日

2001/04/03

評価実施機

test

事前準備:

1.      擬似障害を発生させる。
擬似障害を起こすために、マニュアルでデータファイルを削除する。
rm /vol1/database/orcl/rbs01/ inst1_rbs01.dbf

2.      データベースをshutdownする。

 

《 重要 》

回復処理の際に、障害個所を探し当てるために以下の手順を実行する。

以下の手順を踏まなければ、正確な障害個所を把握することはできない!

@      アラート・ファイルを確認する。
ORACLEデータベースに何か障害が発生した場合は、まずアラート・ファイルの内容を確認すること。
このファイルには障害の情報の他に、データベースの構成に影響を与えるようなタスク(ALTERコマンドによる変更等)も記録されている。
このテスト環境では、アラート・ファイルは以下の場所に保存されている。

/vol1/database/orcl/admin/bdump/alert_inst1.log

A      トレース・ファイルを確認する。
上記@と同じ場所に、トレース・ファイルも格納されている。各プロセス(DBWR、ARCH、LGWR、SMON等)ごとにファイルが生成されているので、最新の日付のものの内容を確認する。

B      動的パフォーマンス表を検索する。
- V$DATAFILEでファイルの位置、ファイル番号、状態を確認する。
  SQL>
select name, file#, status from v$datafile;

- V$RECOVER_FILEでリカバリーが必要なファイルを確認する。
  SQL>
select * from v$recover_file;

- V$RECOVERY_FILE_STATUSでリカバリーが必要なファイルを確認する。
  SQL>
select * from v$recovery_file_status;

C      OSプロンプトからoerrコマンド(ORACLEユーティリティー)を実行し、エラー番号より障害内容を確認する(このユーティリティーの使用方法は、後述「oerrコマンドによるエラー内容の確認」を参照のこと)。

 

方法1:表領域の回復

      データベースをマウント状態で起動する。
SQL>
startup mount pfile=/vol1/database/orcl/admin/pfile/initinst1.ora
ORACLEインスタンスが起動しました。

Total System Global Area 1314236540 bytes
Fixed Size                   116860 bytes
Variable Size             125943808 bytes
Database Buffers         1187840000 bytes
Redo Buffers                 335872 bytes
データベースがマウントされました。

      RBSのデータファイルに障害がある状態で、データベースを起動しようとするとオープンの段階で以下のようなエラーが表示される。
SQL>
startup pfile=/vol1/database/orcl/admin/pfile/initinst1.ora
ORACLEインスタンスが起動しました。

Total System Global Area 1314236540 bytes
Fixed Size                   116860 bytes
Variable Size             125943808 bytes
Database Buffers         1187840000 bytes
Redo Buffers                 335872 bytes
データベースがマウントされました。
ORA-01157: ???????? 3???/?????????DBWR???????????????????
ORA-01110: ???????? 3 : /vol1/database/orcl/rbs01/inst1_rbs01.dbf

この状態はオープンはできず、マウントの状態である。

      データベースをオープンするために障害は発生したデータファイルをオフラインにする。
SQL>
alter database datafile '/vol1/database/orcl/rbs01/inst1_rbs01.dbf' offline;

データベースが変更されました。

      ロールバックセグメントが全滅の場合は、アプリケーションを処理するために一時的なロールバックセグメントを作成する必要がある。
SQL>
create rollback segment temp1 tablespace system;

      以下のSQL文を発行し、現在のロールバック・セグメントの状態を把握する。
SQL>
select segment_name, status from dba_rollback_segs;

SEGMENT_NAME                   STATUS
------------------------------ ----------------
SYSTEM                         ONLINE
RBS0                           OFFLINE
RBS1                           OFFLINE
RBS2                           OFFLINE
RBS3                           OFFLINE
RBS4                           OFFLINE
RBS5                           OFFLINE
RBS6                           OFFLINE
RB01                           OFFLINE
RBL1                           ONLINE

10行が選択されました。

      この状態であればデータベースをオープン状態にできるが、ロールバックセグメントは障害の状態のままであるので、この後リカバリーが必要である。
SQL>
alter database open;

      表領域に対してRECOVERを実行する。
SQL>
recover tablespace cl_rbs01
ORA-00279: 変更 59857116(04/02/2001 09:43:55で生成)にはスレッド番号
1が必要です。
ORA-00289: 検討すべきログ・ファイル: /vol1/database/orcl/arch01/arch_1_8.log
ORA-00280: 変更 59857116(スレッド 1)は順序番号 8に存在します。


ログの指定: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 変更 59857163(04/03/2001 11:36:13で生成)にはスレッド番号
1が必要です。
ORA-00289: 検討すべきログ・ファイル: /vol1/database/orcl/arch01/arch_1_9.log
ORA-00280: 変更 59857163(スレッド 1)は順序番号 9に存在します。
ORA-00278: ログ・ファイル
/vol1/database/orcl/arch01/arch_1_8.logはこのリカバリでは必要なくなりました。


ORA-00279: 変更 59857164(04/03/2001 11:36:22で生成)にはスレッド番号
1が必要です。
ORA-00289: 検討すべきログ・ファイル: /vol1/database/orcl/arch01/arch_1_10.log
ORA-00280: 変更 59857164(スレッド 1)は順序番号 10に存在します。
ORA-00278: ログ・ファイル
/vol1/database/orcl/arch01/arch_1_9.logはこのリカバリでは必要なくなりました。


ORA-00279: 変更 59857165(04/03/2001 11:36:25で生成)にはスレッド番号
1が必要です。
ORA-00289: 検討すべきログ・ファイル: /vol1/database/orcl/arch01/arch_1_11.log
ORA-00280: 変更 59857165(スレッド 1)は順序番号 11に存在します。
ORA-00278: ログ・ファイル
/vol1/database/orcl/arch01/arch_1_10.logはこのリカバリでは必要なくなりました。


ログが適用されました。
メディア・リカバリが完了しました。

方法2:データファイルの回復

      データベースをマウント状態で起動する。
SQL>
startup mount pfile=/vol1/database/orcl/admin/pfile/initinst1.ora
ORACLEインスタンスが起動しました。

Total System Global Area 1314236540 bytes
Fixed Size                   116860 bytes
Variable Size             125943808 bytes
Database Buffers         1187840000 bytes
Redo Buffers                 335872 bytes
データベースがマウントされました。



      以下のSQL文を発行し、データファイルの状況を把握する。
SQL>
select name, file#, status from v$datafile;
                      
                 (中略)
                      
/vol1/database/orcl/rbs01/inst1_rbs01.dbf   3   RECOVER

      データファイルの回復はオフラインでもオンラインでも可能(ただしオンラインの場合は、データファイルをオフラインにする必要がある)なので、データベースをオープンする場合は以下のコマンドを発行する。
SQL>
alter database open;

データベースが変更されました。

      データファイルに対して回復処理を実行する(オンラインでもオフラインでも可)。
SQL>
recover datafile '/vol1/database/orcl/rbs01/inst1_rbs01.dbf'
ORA-00279: 変更 59857116(04/02/2001 09:43:55で生成)にはスレッド番号
1が必要です。
ORA-00289: 検討すべきログ・ファイル: /vol1/database/orcl/arch01/arch_1_8.log
ORA-00280: 変更 59857116(スレッド 1)は順序番号 8に存在します。


ログの指定: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 変更 59857164(04/03/2001 15:58:48で生成)にはスレッド番号
1が必要です。
ORA-00289: 検討すべきログ・ファイル: /vol1/database/orcl/arch01/arch_1_9.log
ORA-00280: 変更 59857164(スレッド 1)は順序番号 9に存在します。
ORA-00278: ログ・ファイル
/vol1/database/orcl/arch01/arch_1_8.logはこのリカバリでは必要なくなりました。


ORA-00279: 変更 59857165(04/03/2001 15:58:56で生成)にはスレッド番号
1が必要です。
ORA-00289: 検討すべきログ・ファイル: /vol1/database/orcl/arch01/arch_1_10.log
ORA-00280: 変更 59857165(スレッド 1)は順序番号 10に存在します。
ORA-00278: ログ・ファイル
/vol1/database/orcl/arch01/arch_1_9.logはこのリカバリでは必要なくなりました。


ORA-00279: 変更 59857166(04/03/2001 15:59:00で生成)にはスレッド番号
1が必要です。
ORA-00289: 検討すべきログ・ファイル: /vol1/database/orcl/arch01/arch_1_11.log
ORA-00280: 変更 59857166(スレッド 1)は順序番号 11に存在します。
ORA-00278: ログ・ファイル
/vol1/database/orcl/arch01/arch_1_10.logはこのリカバリでは必要なくなりました。

ログが適用されました。
メディア・リカバリが完了しました。





      回復処理後のステータスを以下のSQL文を発行して、確認する。
SQL>
select name, file#, status from v$datafile;
                      
                 (中略)
                      
/vol1/database/orcl/rbs01/inst1_rbs01.dbf   3   OFFLINE

この段階ではまだデータファイルの状態はオフラインのままであるので、オンラインにする必要がある。

      以下のSQL文を発行して、データファイルをオンラインにする。
SQL>
alter database datafile '/vol1/database/orcl/rbs01/inst1_rbs01.dbf' online;

データベースが変更されました。

備考

ロールバックセグメントのデータファイル回復処理を実行する場合、重要な手順がある。ORACLE初期化ファイル(Zurichの場合は、”initinst1.ora”)を変更し、ROLLBACK_SEGMENTSパラメーターをコメント化する作業が必要である。

この作業を実施しないと、データベースオープン時に該当するロールバックセグメントを見つけることができないため、データベースをオープンすることができない。

 

 

Case 04

未アーカイブオンラインREDOログファイルの消失

説明

ARCHプロセスによってまだアーカイブされていないオンラインREDOログファイルは、未アーカイブオンラインREDOログファイルという。オンラインREDOログファイルを多重化していない場合は、これらのファイルが消失すると、データが消失する可能性がある。

 

障害状況

データベースがクラッシュしただけでなく媒体障害も発生し、オンラインREDOログファイルがすべて消失した。ただし、データファイルとカレントの制御ファイルはすべて無事だった。

 

解決方法

クラッシュ発生後、データファイルは無事だったが、クラッシュ回復処理を実行できないため(オンラインREDOログファイルがすべて消失しているので)、それらのファイルを使用することはできない。このような状況でデータベースを強制的にオープンすると、データベースの一貫性が崩れる可能性がある。

未アーカイブのREDOログファイルが消失した場合は、クラッシュ回復処理を実行できないため、そのような場合は媒体回復処理を実行する必要がある。この場合は、すべてのデータファイルをオンライン(またはオフライン)の全体バックアップからリストアした後、使用可能な最後のアーカイブログファイルが適用されるまでロールフォワード処理を実行する必要がある。これは不完全な回復処理であるため、表領域の回復処理もデータファイルの回復処理も実行できない。RECOVER DATABASEコマンドを使うしか方法はない。

 

評価

評価実施日

2003/**/**

評価実施機

test

事前準備:

1.      テスト準備としてABORTオプションを指定しデータベースをshutdownする。
SQL>
shutdown abort
ORACLEインスタンスがシャットダウンされました。

2.      すべてのオンラインREDOログファイルを削除する。
rm /vol1/database/orcl/redo01/inst1_redo01.dbf
rm /vol1/database/orcl/redo01/inst1_redo02.dbf

 

《 重要 》

回復処理の際に、障害個所を探し当てるために以下の手順を実行する。

以下の手順を踏まなければ、正確な障害個所を把握することはできない!

@      アラート・ファイルを確認する。
ORACLEデータベースに何か障害が発生した場合は、まずアラート・ファイルの内容を確認すること。
このファイルには障害の情報の他に、データベースの構成に影響を与えるようなタスク(ALTERコマンドによる変更等)も記録されている。
このテスト環境では、アラート・ファイルは以下の場所に保存されている。

/vol1/database/orcl/admin/bdump/alert_inst1.log

A      トレース・ファイルを確認する。
上記@と同じ場所に、トレース・ファイルも格納されている。各プロセス(DBWR、ARCH、LGWR、SMON等)ごとにファイルが生成されているので、最新の日付のものの内容を確認する。

B      動的パフォーマンス表を検索する。
- V$DATAFILEでファイルの位置、ファイル番号、状態を確認する。
  SQL>
select name, file#, status from v$datafile;

- V$RECOVER_FILEでリカバリーが必要なファイルを確認する。
  SQL>
select * from v$recover_file;

- V$RECOVERY_FILE_STATUSでリカバリーが必要なファイルを確認する。
  SQL>
select * from v$recovery_file_status;

C      OSプロンプトからoerrコマンド(ORACLEユーティリティー)を実行し、エラー番号より障害内容を確認する(このユーティリティーの使用方法は、後述「oerrコマンドによるエラー内容の確認」を参照のこと)。

 

未アーカイブREDOログファイルが消失した場合は、クラッシュ回復は実行できない

そのため、すべてのデータファイルをオンライン(またはオフライン)バックアップからリストアし、使用可能な最後のアーカイブログファイルが適用されるまでロールフォワード処理を実行する必要がある。

ただしこれは不完全回復のため、表領域の回復もデータファイルの回復も実行できず、データベースの回復(RECOVER DATABASE)を実行するしかない

      すべてのデータファイルをバックアップからリストアする。
SYSTEM表領域のデータファイルも忘れずにリストアすること!!

      データベースをマウント状態まで起動する。
SQL>
startup mount pfile=/vol1/database/orcl/admin/pfile/initinst1.ora
ORACLEインスタンスが起動しました。

Total System Global Area 1314236540 bytes
Fixed Size                   116860 bytes
Variable Size             125943808 bytes
Database Buffers         1187840000 bytes
Redo Buffers                 335872 bytes
データベースがマウントされました。

      データベース回復を実行する。
SQL>
recover database until cancel;
ORA-00279: ?? 59857249(
04/04/2001 09:18:49???)???????? 1??????
ORA-00289: ????????????: /vol1/database/orcl/arch01/arch_1_10.log
ORA-00280: ?? 59857249(???? 1)????? 10???????


ログの指定: {<RET>=suggested | filename | AUTO | CANCEL}
< enter >
ORA-00279: ?? 59877295(
04/04/2001 10:19:28???)???????? 1??????
ORA-00289: ????????????: /vol1/database/orcl/arch01/arch_1_11.log
ORA-00280: ?? 59877295(???? 1)????? 11???????
ORA-00278: ??????? /vol1/database/orcl/arch01/arch_1_10.log???????????????????


ログの指定: {<RET>=suggested | filename | AUTO | CANCEL}
< enter >
ORA-00279: ?? 59877341(
04/04/2001 10:20:46???)???????? 1??????
ORA-00289: ????????????: /vol1/database/orcl/arch01/arch_1_12.log
ORA-00280: ?? 59877341(???? 1)????? 12???????
ORA-00278: ??????? /vol1/database/orcl/arch01/arch_1_11.log???????????????????


ログの指定: {<RET>=suggested | filename | AUTO | CANCEL}
< enter >
ORA-00279: ?? 59877342(
04/04/2001 10:20:57???)???????? 1??????
ORA-00289: ????????????: /vol1/database/orcl/arch01/arch_1_13.log
ORA-00280: ?? 59877342(???? 1)????? 13???????
ORA-00278: ??????? /vol1/database/orcl/arch01/arch_1_12.log???????????????????


ログの指定: {<RET>=suggested | filename | AUTO | CANCEL}
< enter >
ORA-00279: ?? 59877343(
04/04/2001 10:21:04???)???????? 1??????
ORA-00289: ????????????: /vol1/database/orcl/arch01/arch_1_14.log
ORA-00280: ?? 59877343(???? 1)????? 14???????
ORA-00278: ??????? /vol1/database/orcl/arch01/arch_1_13.log???????????????????


ログの指定: {<RET>=suggested | filename | AUTO | CANCEL}
< enter >
ORA-00279: ?? 59877344(
04/04/2001 10:21:10???)???????? 1??????
ORA-00289: ????????????: /vol1/database/orcl/arch01/arch_1_15.log
ORA-00280: ?? 59877344(???? 1)????? 15???????
ORA-00278: ??????? /vol1/database/orcl/arch01/arch_1_14.log???????????????????


ログの指定: {<RET>=suggested | filename | AUTO | CANCEL}
< enter >
ORA-00279: 変更 59877344(04/04/2001 10:21:10で生成)にはスレッド番号
1が必要です。
ORA-00289: 検討すべきログ・ファイル: /vol1/database/orcl/arch01/arch_1_15.log
ORA-00280: 変更 59877344(スレッド 1)は順序番号 15に存在します。


ログの指定: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
メディア・リカバリが取り消されました。始されていません。

      不完全回復処理なのでRESETLOGSオプションを指定し、データベースをオープンする。
SQL>
alter database open resetlogs;

データベースが変更されました。

      消失したオンラインREDOログファイルは、データベースのオープン処理の一部として、自動的に再作成される。

 

備考

REDOログの破損状態を判別するため、以下のコマンドでV$LOGを問い合わせることができる。

SQL> select * from v$log;

 

 

Case 05

バックアップされた制御ファイルを使用した回復処理

説明

バックアップされた制御ファイルを使用した回復処理は、慎重を要する。回復処理は可能であればカレントの制御ファイルを使用して行うようにする。その次に最善の方法は、新しい制御ファイルを作成する方法である。RESETLOGSオプションを指定してデータベースを起動する必要があるため、バックアップされた制御ファイルを使用する方法は最後の手段である。

 

障害状況

制御ファイルが多重化されておらず、かつその制御ファイルが消失してしまった。そのためバックアップされた制御ファイルをコピーし、データベースを起動しようとした。

 

解決方法

方法としては2つある。

データファイルとオンラインREDOログファイルはすべて無事なので、CREATE CONTROLFILEコマンドを使用して新しい制御ファイルを作成すれば、回復処理を必要に応じて実行でき、データベースを起動できる。

また、バックアップされた制御ファイルを使用することもできる。ただし、バックアップされた制御ファイルを使用する場合は、媒体回復処理を実行する必要がある。また、USING BACKUP CONTROLFILEオプションも指定しなければならない。回復処理が完了したら、RESETLOGSオプションを指定してデータベースを起動し、データベースの完全なバックアップを行う必要がある。

 

評価

評価実施日

2003/**/**

評価実施機

test

《 重要 》

回復処理の際に、障害個所を探し当てるために以下の手順を実行する。

以下の手順を踏まなければ、正確な障害個所を把握することはできない!

@      アラート・ファイルを確認する。
ORACLEデータベースに何か障害が発生した場合は、まずアラート・ファイルの内容を確認すること。
このファイルには障害の情報の他に、データベースの構成に影響を与えるようなタスク(ALTERコマンドによる変更等)も記録されている。
このテスト環境では、アラート・ファイルは以下の場所に保存されている。

/vol1/database/orcl/admin/bdump/alert_inst1.log

A      トレース・ファイルを確認する。
上記@と同じ場所に、トレース・ファイルも格納されている。各プロセス(DBWR、ARCH、LGWR、SMON等)ごとにファイルが生成されているので、最新の日付のものの内容を確認する。

B      動的パフォーマンス表を検索する。
- V$DATAFILEでファイルの位置、ファイル番号、状態を確認する。
  SQL>
select name, file#, status from v$datafile;

- V$RECOVER_FILEでリカバリーが必要なファイルを確認する。
  SQL>
select * from v$recover_file;

- V$RECOVERY_FILE_STATUSでリカバリーが必要なファイルを確認する。
  SQL>
select * from v$recovery_file_status;

C      OSプロンプトからoerrコマンド(ORACLEユーティリティー)を実行し、エラー番号より障害内容を確認する(このユーティリティーの使用方法は、後述「oerrコマンドによるエラー内容の確認」を参照のこと)。

 

 

 

 

 

      REDOログ・ファイルを何回か切り替えてみる。
SQL>
alter system switch logfile;

システムが変更されました。


      ABORTオプション付きでデータベースをshutdownする。
SQL>
shutdown abort
ORACLEインスタンスがシャットダウンされました。

      テストのためにバックアップから(古い)制御ファイルをリストアする。

      データベースをオープンしようとすると以下のように、古い制御ファイルが使用されているというエラーが表示される。
SQL>
startup mount pfile=/vol1/database/orcl/admin/pfile/initinst1.ora
ORACLEインスタンスが起動しました。

Total System Global Area 1314236540 bytes
Fixed Size                   116860 bytes
Variable Size             125943808 bytes
Database Buffers         1187840000 bytes
Redo Buffers                 335872 bytes
データベースがマウントされました。
SQL>
alter database open;
alter database open
*
1行でエラーが発生しました。
ORA-01122: データベース・ファイル 1の照合検査でエラーが発生しました。
ORA-01110: データ・ファイル 1 : /vol1/database/orcl/system/inst1_sys.dbf
ORA-01207: ファイルが制御ファイルより新しくなっています(制御ファイルが古い)。

      制御ファイルのポジションが正しくないため、通常のRECOVER DATABASEを実行しても以下のようにエラーとなる。
SQL>
recover database
ORA-00283: エラーによってリカバリ・セッションは取り消されました。
ORA-01122: データベース・ファイル 1の照合検査でエラーが発生しました。
ORA-01110: データ・ファイル 1 : /vol1/database/orcl/system/inst1_sys.dbf
ORA-01207: ファイルが制御ファイルより新しくなっています(制御ファイルが古い)。

      バックアップからリストアした制御ファイルを使用して回復処理を実行する場合は、以下のように”USING BACKUP CONTROLFILE”オプションの指定が必要である。
SQL>
recover database using backup controlfile;
ORA-00279: 変更 59857249(04/04/2001 09:18:30で生成)にはスレッド番号
1が必要です。
ORA-00289: 検討すべきログ・ファイル: /vol1/database/orcl/arch01/arch_1_10.log
ORA-00280: 変更 59857249(スレッド 1)は順序番号 10に存在します。


ログの指定: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 変更 59857293(04/04/2001 13:47:32で生成)にはスレッド番号
1が必要です。
ORA-00289: 検討すべきログ・ファイル: /vol1/database/orcl/arch01/arch_1_11.log
ORA-00280: 変更 59857293(スレッド 1)は順序番号 11に存在します。
ORA-00278: ログ・ファイル
/vol1/database/orcl/arch01/arch_1_10.logはこのリカバリでは必要なくなりました。


ORA-00279: 変更 59857294(04/04/2001 13:47:43で生成)にはスレッド番号
1が必要です。
ORA-00289: 検討すべきログ・ファイル: /vol1/database/orcl/arch01/arch_1_12.log
ORA-00280: 変更 59857294(スレッド 1)は順序番号 12に存在します。
ORA-00278: ログ・ファイル
/vol1/database/orcl/arch01/arch_1_11.logはこのリカバリでは必要なくなりました。


ORA-00279: 変更 59857295(04/04/2001 13:47:51で生成)にはスレッド番号
1が必要です。
ORA-00289: 検討すべきログ・ファイル: /vol1/database/orcl/arch01/arch_1_13.log
ORA-00280: 変更 59857295(スレッド 1)は順序番号 13に存在します。
ORA-00278: ログ・ファイル
/vol1/database/orcl/arch01/arch_1_12.logはこのリカバリでは必要なくなりました。


ORA-00279: 変更 59857296(04/04/2001 13:47:58で生成)にはスレッド番号
1が必要です。
ORA-00289: 検討すべきログ・ファイル: /vol1/database/orcl/arch01/arch_1_14.log
ORA-00280: 変更 59857296(スレッド 1)は順序番号 14に存在します。
ORA-00278: ログ・ファイル
/vol1/database/orcl/arch01/arch_1_13.logはこのリカバリでは必要なくなりました。


ORA-00279: 変更 59857297(04/04/2001 13:48:01で生成)にはスレッド番号
1が必要です。
ORA-00289: 検討すべきログ・ファイル: /vol1/database/orcl/arch01/arch_1_15.log
ORA-00280: 変更 59857297(スレッド 1)は順序番号 15に存在します。
ORA-00278: ログ・ファイル
/vol1/database/orcl/arch01/arch_1_14.logはこのリカバリでは必要なくなりました。


ORA-00308: アーカイブ・ログ
/vol1/database/orcl/arch01/arch_1_15.logをオープンできません。
ORA-27037: ファイル・ステータスを取得できません。
IBM AIX RISC System/6000 Error: 2: No such file or directory
Additional information: 3

      データベースを通常通り起動しようとするとエラーになる。これはバックアップから制御ファイルをリストアしたため、ログ順序番号等の情報が古くなり、データファイルが持つ情報と一致しないからである。
そのためこの場合、データベースをオープンするにはRESETLOGSオプションを指定しなければ起動しない。
SQL>
alter database open;
alter database open
*
1行でエラーが発生しました。
ORA-01589:
DBをオープンするにはRESETLOGS/NORESETLOGSを使用しなければなりません。

SQL>
alter database open resetlogs;

データベースが変更されました。

 

備考

新しくCREATE CONTROLFILEコマンドにより制御ファイルを再作成する場合は、”/vol1/database/orcl/admin/udump”ディレクトリーの中に”ora_22152_inst1.trc”というようなファイルを参照のこと。

すべてのファイルがCREATE CONTROLFILE用のものではないが、コールド・バックアップ時に”alter database backup controlfile to trace”を実行しているので再作成用のスクリプトが存在する。

 

 

Case 06

REDOログ・ファイルの回復処理

説明

以下に示す手順でログ・ファイルを再作成する。

      REDOログを作成する位置を検索

      消失したファイルが格納されているログ・グループを削除

      ログ・グループを再作成

      データベースをオープン

      データベースをより早くオープンしたい場合は、CLEAR LOGFILEを使用

 

障害状況

REDOログ・ファイル・グループを構成しているデータ・ファイルの1つが消失した。

 

解決方法

データベースは、REDOログ・ファイルが再作成されるまでオープンできない。

データベースには少なくとも2つのログ・グループが常に存在しなければならず、グループが2つしかない場合はログ・グループは削除することができない。

REDOログの再作成は、以下の手順を実行すると素早く行える。

 

評価

評価実施日

 

評価実施機

test

《 重要 》

回復処理の際に、障害個所を探し当てるために以下の手順を実行する。

以下の手順を踏まなければ、正確な障害個所を把握することはできない!

@      アラート・ファイルを確認する。
ORACLEデータベースに何か障害が発生した場合は、まずアラート・ファイルの内容を確認すること。
このファイルには障害の情報の他に、データベースの構成に影響を与えるようなタスク(ALTERコマンドによる変更等)も記録されている。
このテスト環境では、アラート・ファイルは以下の場所に保存されている。

/vol1/database/orcl/admin/bdump/alert_inst1.log

A      トレース・ファイルを確認する。
上記@と同じ場所に、トレース・ファイルも格納されている。各プロセス(DBWR、ARCH、LGWR、SMON等)ごとにファイルが生成されているので、最新の日付のものの内容を確認する。

B      動的パフォーマンス表を検索する。
- V$DATAFILEでファイルの位置、ファイル番号、状態を確認する。
  SQL>
select name, file#, status from v$datafile;

- V$RECOVER_FILEでリカバリーが必要なファイルを確認する。
  SQL>
select * from v$recover_file;

- V$RECOVERY_FILE_STATUSでリカバリーが必要なファイルを確認する。
  SQL>
select * from v$recovery_file_status;

C      OSプロンプトからoerrコマンド(ORACLEユーティリティー)を実行し、エラー番号より障害内容を確認する(このユーティリティーの使用方法は、後述「oerrコマンドによるエラー内容の確認」を参照のこと)。

 

テスト時には、”/vol1/database/orcl/redo01/inst1_redo01.dbf”を削除しておく。

 

 

 

 

 

 

1.      REDOログ・ファイルが消失した状態でデータベースをオープンしようとすると、以下のようなエラーが表示される。表示されたデータ・ファイルに障害が発生している。
SQL>
alter database open;
alter database open
*
1行でエラーが発生しました。
ORA-00313: ログ・グループ 1(スレッド 1)のメンバーをオープンできません。
ORA-00312: オンライン・ログ 1 スレッド 1: '
/vol1/database/orcl/redo01/inst1_redo01.dbf'

2.      ファイルが過去に格納されていた場所を検索する。
SQL>
select * from v$logfile;
    GROUP# STATUS
---------- -------
MEMBER
--------------------------------------------------------------------------------
         2
/vol1/database/orcl/redo02/inst1_redo02.dbf
         1
/vol1/database/orcl/redo01/inst1_redo01.dbf

3.      少なくとも2つのログ・グループがなければならないので、もし2つしかグループがない場合には、一時的に別のグループを作成しておく。
SQL>
alter database add logfile group 3 ‘/vol1/database/orcl/redo01/inst1_redo03.dbf’ size 10m;

データベースが変更されました。

4.      コマンドを入力し、障害があったログ・グループを削除する。ただし、障害がおきたREDOログ・ファイルが現在使用されているもの(ARC:NO STATUS:CURRENT)の場合、以下のようにエラーが表示され削除はできない。
障害があったファイルが現行ログ・ファイルでない場合は、下記6以降を参照のこと。
SQL>
alter database drop logfile group 1;
alter database drop logfile group 1
*
1行でエラーが発生しました。
ORA-01623: ログ 1は現行ログ(スレッド 1)なので削除できません。
ORA-00312: オンライン・ログ 1 スレッド 1: '
/vol1/database/orcl/redo01/inst1_redo01.dbf'

5.      上記のグループの削除が現行ログのために出来なかった場合は、以下のコマンドにより強制的に消去する。
このコマンドを発行すると、ログ・ファイルの削除(DROP LOGFILE)と追加(ADD LOGFILE)が行われる。
SQL>
alter database clear unarchived logfile group 1;

データベースが変更されました。

オプションUNARCHIVEDを指定するのは、対象のファイルが現行ログ・ファイルの場合である。
もし対象のファイルが“現行ログ・ファイルでない場合”は、UNARCHIVEDオプションは不要である。
SQL>
alter database clear logfile group 1;

UNARCHIVEDオプション指定のCLEAR LOGFILEを実行した場合は、すぐにバックアップを作成すること。



6.      コマンドを入力し、消失したログ・ファイルを再作成する。
SQL>
alter database add logfile group 1 '/vol1/database/orcl/redo01/inst1_redo01.dbf' size 10m;

データベースが変更されました。

7.      コマンドを入力し、一時的に追加したログ・グループを削除する。
SQL>
alter database drop logfile group 3;

データベースが変更されました。

8.      追加したログ・ファイルをOSから物理的に削除する。
rm /vol1/database/orcl/redo01/inst1_redo03.dbf

9.      コマンドを入力し、データベースをオープンする。
SQL>
alter database open;

 

上記のログ・ファイルの再作成の手順は、以下の2つの手順で簡単に行うことも可能である。

以下のコマンドであれば、ログ・グループが2つ(最小グループ数)しかない場合でも、一時的なグループの追加なしにログ・ファイルの再作成が可能である。

 

1.      バックアップから消失したファイルをリストア(コピー)する。

2.      SQL> alter database clear logfile '/vol1/database/orcl/redo01/inst1_redo01.dbf';

データベースが変更されました。

3.      データベースをオープンする。
SQL>
alter database open;

データベースが変更されました。

 

備考

 

 

 

 

RECOVER構文について

データベースを回復するには、以下のコマンドのいずれかを発行する。

データベースの状態(オンライン or オフライン)により、発行できるRECOVERコマンドは異なる。

 

      recover [automatic] database
このコマンドは、クローズ・データベース(マウントの状態)の回復にのみ使用できる。

      recover [automatic] tablespace <number> | <name>
このコマンドは、オープン・データベース(オープンの状態)の回復にのみ使用できる。

      recover [automatic] datafile <number> | <name>
このコマンドは、オープン・データベースの回復およびクローズ・データベースの回復の両方に使用する事ができる。

 

automatic : アーカイブ・ログ・ファイルとREDOログ・ファイルを自動的に適用する。

 

データベースをユーザーに開放した状態(オープン状態)で回復させたい場合は、方法としては表領域の回復処理データ・ファイルの回復処理のどちらか1つを選択しなければならない。

ただしデータ・ファイルの回復処理をオンラインで実行するには、該当する障害ファイルの状態を一度オフラインにし、その後RECOVER DATAFILEを実行する必要がある。

また、RECOVER DATAFILE後はデータ・ファイルはオフライン状態なので、オンラインに「戻さなければならない。

SQL> alter database datafile ‘/vol1/database/orcl/data01/inst1_data01.dbf’ offline;

SQL> recover datafile ‘/vol1/database/orcl/data01/inst1_data01.dbf’

SQL> alter database datafile ‘/vol1/database/orcl/data01/inst1_data01.dbf’ online;

 

 

アーカイブを異なる位置へ復元した場合

アーカイブ・ログをLOG_ARCHIVE_DESTディレクトリーに復元しない場合、回復する前または回復中に、以下のいずれかの方法でOracleに知らせる必要がある。

      RECOVERプロンプトで、位置と名前を指定する。
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

      ALTER SYSTEM ARCHIVEコマンドを使用する。
SVRMGR> alter system archive log start to <new location>;

     RECOVER FROM <LOCATION>コマンドを使用する。
SVRMGR> recover from ‘<new location>’ database;

 

別の位置へ復元した場合

1.      制御ファイルが別の位置に復元された場合、パラメータ・ファイルを更新する。

2.       データ・ファイルまたがREDOログが別の位置または別名で復元された場合、以下に示すステップを実行する。
- インスタンスをマウントする。
- ALTER DATABASEコマンドを使用して、制御ファイル内のエントリーを新しい
  ファイル位置で更新する。
SVRMGR> alter database rename file
     2> ‘/disk1/data/user_01.dbf’
     3> to ‘/disk2/data/user_01.dbf’;

 

注意

ALTER DATABASE RENAMEコマンドを発行する時には、その前に各ファイルが新しい位置にあることを確認すること。

 


回復が必要なデータ・ファイルの確認

      回復が必要なデータ・ファイルおよび回復開始時点を検索するには、以下に示すV$RECOVER_FILEビューを表示する。
SVRMGR> select * from v$recover_file;

     アーカイブ・ログ・ファイルを確認するには、すべてのアーカイブが記録されたV$ARCHIVED_LOGを表示するか、回復中に必要なアーカイブが記録されたV$RECOVERY_LOGを表示する。
SVRMGR> select * from v$recovery_log;

 

回復状態に関する情報の表示

サーバー・プロセスとユーザーが行うメディア回復のステータス情報は、以下の2つのデータ・ディクショナリーに格納されている。

リカバリーはこれらのディクショナリーを参照しながら行うこと。

      V$RECOVERY_STATUS
データベースの回復情報がすべて含まれる。
- 回復の開始時間
- 必要なログ順序番号
- 前回適用されたログの状態
- 回復にユーザー入力が必要な理由

      V$RECOVERY_FILE_STATUS
回復の必要がある各データ・ファイルの情報が含まれる。
- 回復が必要なファイル
- 回復の状態

 

oerrコマンドによるエラー内容の確認

OSプロンプトから入力できるORACLEのユーティリティーが存在する。

このユーティリティーを使用すれば、ORACLEから返されたエラー・コードをもとにそのエラーの内容と対応方法を知ることができる。

使用方法は以下の通り。

 

ORACLEのエラー・コードは、3文字のプレフィックスにより分類されている。

例えばもしORACLEからORA-7300というエラー・コードを受け取ったならば、それは分類がoraでエラー番号は”7300”ということになる。

もしこのエラーの詳細を調べたいのであれば、以下のようにOSのプロンプトから入力する。

 

$ oerr ora 7300

 

その他

      データ・ファイルをオフラインにするには、以下のコマンドを発行する。
データ・ファイルに障害がある場合は、IMMEDIATEオプション無しではオフラインにならないので、注意すること。
SQL> alter database datafile ‘/disk3/data/df2.dbf’ offline immediate;

     表領域をオフラインにするには、以下のコマンドを発行する。
データ・ファイルに障害がある場合は、IMMEDIATEオプション無しではオフラインにならないので、注意すること。
SQL> alter tablespace CL_DAT01 offline immediate;

 


2001/08/14追記

Oracleインスタンス異常終了時

Oracleインスタンスが起動すると、UNIXの共有メモリーやセマフォがOracleにより取得される。

Oracleインスタンスが異常終了してしまった場合あるいはshutdown abortで強制的にシャットダウンした場合に、これらを解放しないままでいることがある。

インスタンスの異常終了あるいは強制終了時には、現在のセマフォおよび共有メモリーの状況を確認し、解放されていないものが存在する場合は、以下の例に従い解放すること。

 

      メッセージ待ち行列、共有メモリー、セマフォすべての状況を確認する場合。
% ipcs

      それぞれを別個に確認する場合。
% ipcs –q               ・・・ メッセージ待ち行列の表示
% ipcs –m               ・・・ 共有メモリーの表示
% ipcs –s               ・・・ セマフォの表示

inst1インスタンスの状況は、以下のようになっている。

root@/(test): ipcs

/dev/mem からの IPC 状況: Tue Aug 14 13:01:33 JST 2001

T     ID     KEY        MODE       OWNER    GROUP

メッセージ待ち行列:

q         0 0x6105d185 --rw-rw----     root   system

q         1 0x5305d185 --rw-rw-rw-     root   system

q         2 0x4305d194 --rw-rw-rw-     root   system

q         3 0x4105d194 --rw-rw-rw-     root   system

q         4 0x4107001c -Rrw-rw----     root   printq

共用メモリ:

m         0 0x00006000 --rw-rw-rw-     root   system

m   3145729 0xf94382c4 --rw-r-----  oracle oinstall

m         2 0x0d052af9 --rw-rw-rw-     root   system

セマフォ:

s    393216 0x00006000 --ra-ra-ra-     root   system

s         1 0x6205281b --ra-r--r--     root   system

s         2 0x01052a91 --ra-------     root   system

 

上記例の所有者:oracleが掴んでいる共有メモリーを解放するには、以下のコマンドを実行する。

% ipcrm –m 3145729

 

但し1つのサーバーに複数のインスタンスが稼動している場合は、一旦すべてのインスタンスを停止させた後で共有メモリーやセマフォの解放を行うこと。



©2002-2005
このサイトは”マツエモン”が運営しています。
著作権および使用上の注意について