(続)Oracle データベース復旧手順書とフルバックアップスクリプト

前エントリ Oracle データベース復旧手順書とフルバックアップスクリプト の続きです。

以下のフローチャートの各ステップで実際にコマンドラインおよび SQL *Plus で入力する SQL 文について説明を行います。基本的にこのエントリにページ内リンクを使ってコマンドを実行していくだけでデータベースが復旧できるという超リカバリ術になります。

ora_recovery01.jpg

テスト環境構築を構築するスクリプトも用意しました。dbca で作成した雛形です。 → create_db_scripts.zip 

動作確認しながらバックアップ&リカバリの検証をしてみたい方は、Linux 上の oracle 10g/11g がインストールされている環境で、ダウンロードして圧縮ファイルを展開して testdb.sh を実行してください。テストデータベースが作成されます。既に何かしらの Oracle データベースが動作している環境ではどう影響するかわからないので、必ずクリーンな開発環境で実行してください。

- スポンサーリンク -

以下、テスト環境構築の実行例です。青字の通り入力することでデータベース構築が完了します。

[oraclei@localhost scripts]$ mkdir -p /db/u01/app/oracle/admin/testdb
[oraclei@localhost scripts]$ cd /db/u01/app/oracle/admin/testdb
[oraclei@localhost scripts]$ unzip create_db_scripts.zip
[oraclei@localhost scripts]$ cd scripts/
[oraclei@localhost scripts]$ sh testdb.sh
/db/u01/app/oracle/product/10.2.0/db/install/oratab: testdb:/db/u01/app/oracle/product/10.2.0/db:Yにこのエントリを追加してください

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Aug 25 11:05:42 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

specify a password for sys as parameter 1
Enter value for 1: oracle
specify a password for system as parameter 2
Enter value for 2: oracle
specify a password for sysman as parameter 3
Enter value for 3: oracle
specify a password for dbsnmp as parameter 4
Enter value for 4: oracle

参考までにスクリプトが実行されたときのログはこちらからダウンロードいただけます。

ここでは以下のようなテスト環境を想定して説明を進めます

[oracle環境]

os 上の dba ユーザは oracle
カスタムデータベースにてテストデータベースを構築
アーカイブログモードで運用
dba 権限での接続は sys/oracle

[oracle の環境変数]

export ORACLE_BASE=/db/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db
export ORACLE_SID=testdb
export ORA_NLS10=$ORACLE_HOME/nls/data
export NLS_LANG=AMERICAN_AMERICA.JA16EUC
export LD_LIBRARY_PATH=$ORACLE_HOME/lib32::$ORACLE_HOME/ctx/lib:$ORACLE_HOME/jdbc/lib:$JDK_HOME/lib
export LANG=ja_JP.eucJP

[データファイル構成]

/db/ora/testdb/control01.ctl
/db/ora/testdb/control02.ctl
/db/ora/testdb/control03.ctl
/db/ora/testdb/example01.dbf
/db/ora/testdb/redo01.log
/db/ora/testdb/redo02.log
/db/ora/testdb/redo03.log
/db/ora/testdb/sysaux01.dbf
/db/ora/testdb/system01.dbf
/db/ora/testdb/temp01.dbf
/db/ora/testdb/undotbs01.dbf
/db/ora/testdb/users01.dbf

[アーカイブログ構成]

/db/ora/arc1/1_3_695294868.dbf
/db/ora/arc1/1_4_695294868.dbf
/db/ora/arc1/1_5_695294868.dbf
・・・・
/db/ora/arc2/1_3_695294868.dbf
/db/ora/arc2/1_4_695294868.dbf
/db/ora/arc2/1_5_695294868.dbf
・・・・

[アラートログ]

/db/u01/app/oracle/admin/testdb/bdump/alert_testdb.log

[バックアップツールおよびバックアップファイル先]

/db/tools/backup/


step0. full_backup.sh にてバックアップを取得する

まずは復旧に必要なバックアップファイルを以下の手順にて作成します。スクリプトをお手持ちの環境にあわせて設定すればリカバリに必要なファイルが自動生成されます。

mkdir -p /db/tools/backup/log
cd /db/tools/backup
sh full_backup.sh


step1. startup mount は動作するか?

現時点でデータベース障害が発生しているが稼働状態にある場合は step7 へお進み下さい。
データベースが停止状態にある場合、以下の実行コマンド(青字の部分)を実行してデータベースがマウント状態まで持って行けるかを検証します。

[oracle@server ~]$ sqlplus sys/oracle as sysdba
SQL> startup mount;

ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218968 bytes
Variable Size              96470632 bytes
Database Buffers          180355072 bytes
Redo Buffers                7168000 bytes
Database mounted.

mount まで成功した場合は step6 へ
mount まで成功しない場合は step2 へ


step2. 全ての制御ファイルが破損か?

startup mount を実行した際に以下のエラーが表示されていると思います。

Total System Global Area  285212672 bytes
Fixed Size                  1218968 bytes
Variable Size             100664936 bytes
Database Buffers          176160768 bytes
Redo Buffers                7168000 bytes
ORA-00205: error in identifying control file, check alert log for more info

まずはバックアップした初期化パラメータファイル inittestdb.ora から制御ファイル一覧を抽出します。

[oraclei@localhost test]$ grep control_files inittestdb.ora 
*.control_files='/db/ora/testdb/control01.ctl','/db/ora/testdb/control02.ctl','/db/ora/testdb/control03.ctl'

次にアラートログを調べて制御ファイルのエラーを調査します。複数の制御ファイルが破損していればエラーも複数出力されているはずです。

[oracle@server ~]$ tail -n 100 /db/u01/app/oracle/admin/testdb/bdump/alert_testdb.log

ALTER DATABASE   MOUNT
Wed Aug 19 12:22:15 2009
ORA-00202: control file: '/db/ora/testdb/control01.ctl'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
Wed Aug 19 12:22:18 2009
ORA-205 signalled during: ALTER DATABASE   MOUNT...

一部の制御ファイルのみが破損している場合は step3 へ
全ての制御ファイルが破損している場合は step4 へ


step3. 破損した制御ファイルを正常な制御ファイルから復旧

一部の制御ファイルが破損下だけであれば、基本的に正常な制御ファイルをコピーして復旧するだけです。アラートログの調査から破損していない制御ファイルを割り出してコピー元ファイルとします。
以下の例では /db/ora/testdb/control01.ctl のみが破損した場合の例です。/db/ora/testdb/control02.ctl を用いて復旧をします。

[oracle@server ~]$ mv "/db/ora/testdb/control01.ctl" "/db/ora/testdb/control01.ctl.old"
[oracle@server ~]$ cp "/db/ora/testdb/control02.ctl" "/db/ora/testdb/control01.ctl"

処理完了後は step1 へ


step4. バックアップの制御ファイルが存在するか?

制御ファイルが全損した場合はバックアップ制御ファイルが無ければデータベースは普及できません。万が一バックアップ制御ファイルが無いシステムを運用している場合は、以下のコマンドにてすぐに取得すると良いでしょう。
いずれにしても制御ファイルが全損してバックアップが存在しないという事態は避けるべきです。

SQL> alter database backup controlfile to 'backup-controlfile.arc' reuse;

バックアップ制御ファイルが存在している場合は step5 へ
【作業終了です】バックアップ制御ファイルが存在しない場合はデータベース復旧不可能です。
※万が一バックアップ制御ファイルが無い場合は、まずはオラクル社の保守サポートに連絡するのが良いでしょう。保守を結んでいない場合は、専門の業者等にお願いして復旧して貰うのが良いでしょう。運が良ければ復旧できるかもしれません。


step5. 制御ファイルをバックアップから復旧

リカバリ時のロールフォワード処理にて、最新状態にするためにアーカイブREDOログとオンラインREDOログが必要になります。もしメディア障害等でアーカイブログが破損している場合は、バックアップから全てのアーカイブログをアーカイブログ出力ディレクトリへ集めます。

[oracle@server ~]$ cp "backup-アーカイブログ" "/db/ora/arc1/"

バックアップ制御ファイルを用いて復旧を行います。基本的にバックアップファイル元に全ての制御ファイルを戻してリカバリコマンドを実行して復旧します。復旧後は RESETLOGS オプションでデータベースをオープンしてログをリセットする必要があります。

[oracle@server ~]$ mv "/db/ora/testdb/control01.ctl" "/db/ora/testdb/control01.ctl.old"
[oracle@server ~]$ mv "/db/ora/testdb/control02.ctl" "/db/ora/testdb/control02.ctl.old"
[oracle@server ~]$ mv "/db/ora/testdb/control03.ctl" "/db/ora/testdb/control03.ctl.old"
[oracle@server ~]$ cp "backup-controlfile.arc" "/db/ora/testdb/control01.ctl"
[oracle@server ~]$ cp "backup-controlfile.arc" "/db/ora/testdb/control02.ctl"
[oracle@server ~]$ cp "backup-controlfile.arc" "/db/ora/testdb/control03.ctl"
[oracle@server ~]$ sqlplus sys/oracle as sysdba

SQL> startup mount 

ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218968 bytes
Variable Size             100664936 bytes
Database Buffers          176160768 bytes
Redo Buffers                7168000 bytes
Database mounted.

SQL> recover automatic database using backup controlfile;

ORA-00279: change 507358 generated at 08/19/2009 17:48:44 needed for thread 1
ORA-00289: suggestion : /db/ora/arc2/1_6_695315278.dbf
ORA-00280: change 507358 for thread 1 is in sequence #6
ORA-00278: log file '/db/ora/arc2/1_6_695315278.dbf' no longer needed for this
recovery
ORA-00308: cannot open archived log '/db/ora/arc2/1_6_695315278.dbf'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3


## 場合によってはアーカイブされていないオンラインREDOログをフルパスで指定する必要があります。
Specify log: {=suggested | filename | AUTO | CANCEL}
/db/ora/testdb/redo01.log
ORA-00328: archived log ends at change 507325, need later change 507358
ORA-00334: archived log: '/db/ora/testdb/redo01.log'


SQL> recover automatic database using backup controlfile;
ORA-00279: change 507358 generated at 08/19/2009 17:48:44 needed for thread 1
ORA-00289: suggestion : /db/ora/arc2/1_6_695315278.dbf
ORA-00280: change 507358 for thread 1 is in sequence #6
ORA-00278: log file '/db/ora/arc2/1_6_695315278.dbf' no longer needed for this
recovery
ORA-00308: cannot open archived log '/db/ora/arc2/1_6_695315278.dbf'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3


## 場合によってはアーカイブされていないオンラインREDOログをフルパスで指定する必要があります。
Specify log: {=suggested | filename | AUTO | CANCEL}
/db/ora/testdb/redo02.log
Log applied.
Media recovery complete.

SQL> alter database open resetlogs;

Database altered.

オンラインREDOログが破損している場合は step11 へ進んで下さい。
処理完了後は step1へ


step6. alter database open は動作するか?

データベースオープン時にデータファイル、オンラインREDOログ等のエラーが検出されます。表示されるエラー及びアラートログに出力されるエラーによって復旧手順が異なります。

[oracle@server ~]$ sqlplus sys/oracle as sysdba
SQL> shutdown abort;

Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup mount;

ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218968 bytes
Variable Size             109053544 bytes
Database Buffers          167772160 bytes
Redo Buffers                7168000 bytes
Database mounted.

SQL> alter database open;

Database altered.

エラーなく正常に open できる場合は step15へ
open はできるがエラーが表示される場合は step12へ
open が失敗し何らかのエラーが表示される場合は step7へ


step7. system領域のファイルが破損か?

alter database open でシステム領域のデータファイルが見つからないエラーが表示されていかを確認します。

ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218968 bytes
Variable Size              96470632 bytes
Database Buffers          180355072 bytes
Redo Buffers                7168000 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/db/ora/testdb/system01.dbf'

上記エラーの場合は step8へ
他のエラーの場合は step9へ


step8. system領域の全てのデータファイルを復旧する

リカバリ時のロールフォワード処理にて、最新状態にするためにアーカイブREDOログとオンラインREDOログが必要になります。もしメディア障害等でアーカイブログが破損している場合は、バックアップから全てのアーカイブログをアーカイブログ出力ディレクトリへ集めます。

[oracle@server ~]$ cp "backup-アーカイブログ" "/db/ora/arc1/"

バックアップのシステム領域データファイルからデータファイルを復旧します。その後 recover tablespace system を発行してデータベースの復旧を行うことができます。
またロールフォワード処理にて最新のオンラインREDOログが必要になる場合もあります。step5 を参考にして下さい。

[oracle@server ~]$ sqlplus sys/oracle as sysdba
SQL> shutdown abort

ORACLE instance shut down.

SQL> startup mount

ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218968 bytes
Variable Size              96470632 bytes
Database Buffers          180355072 bytes
Redo Buffers                7168000 bytes
Database mounted.

SQL> exit

[oracle@server ~]$ tar xvfz /db/tools/backup/system01.dbf.tar.gz
[oracle@server ~]$ /db/tools/backup/db/ora/testdb/system01.dbf /db/ora/testdb/system01.dbf
[oracle@server ~]$ sqlplus sys/oracle as sysdba
SQL> recover tablespace system;

ORA-00279: change 507327 generated at 08/19/2009 17:48:44 needed for thread 1
ORA-00289: suggestion : /db/ora/arc2/1_6_695315278.dbf
ORA-00280: change 507327 for thread 1 is in sequence #6


Specify log: {=suggested | filename | AUTO | CANCEL}

Log applied.
Media recovery complete.


SQL> alter database open;

Database altered.

処理完了後は step6へ


step9. その他領域(UNDO表領域、ユーザ表領域含む)のファイルが破損か?

alter database open でデータ領域のデータファイルが見つからないエラーが表示されていかを確認します。

ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218968 bytes
Variable Size              96470632 bytes
Database Buffers          180355072 bytes
Redo Buffers                7168000 bytes
Database mounted.
ORA-01157: cannot identify data file 1 - file not found
ORA-01110: data file 1: '/db/ora/testdb/users01.dbf'

上記エラーの場合は step10へ
他のエラーの場合は step11へ


step10. 破損したデータファイルを復旧する

データベースをまずは起動することを目的とするならば、破損下データファイルをオフライン状態にすることで、ひとまずデータベースオープンが可能となりますが、サービス再開には至りません。
※ちなみに UNDO 表領域の場合はオフライン化してもデータベースをオープン状態にすることはできません。
従ってこの復旧術ではオフライン化→データ復旧→データベース復旧→オンライン化を一気に行います。まずは破損したファイル一覧ををアラートログより取得します。

[oracle@server ~]$ tail -n 200 /db/u01/app/oracle/admin/testdb/bdump/alert_testdb.log

ORA-01110: data file 2: '/db/ora/testdb/undotbs01.dbf'
ORA-01110: data file 3: '/db/ora/testdb/sysaux01.dbf'
ORA-01110: data file 4: '/db/ora/testdb/users01.dbf'
ORA-01110: data file 5: '/db/ora/testdb/example01.dbf'

次に破損したデータファイルを一時的にオフラインにします。以下では上記に表示された4つのデータファイルが破損された場合の例です。

[oracle@server ~]$ sqlplus sys/oracle as sysdba
SQL> alter database datafile '/db/ora/testdb/undotbs01.dbf' offline;

Database altered.

SQL> alter database datafile '/db/ora/testdb/sysaux01.dbf' offline;

Database altered.

SQL> alter database datafile '/db/ora/testdb/users01.dbf' offline;

Database altered.

SQL> alter database datafile '/db/ora/testdb/example01.dbf' offline;

Database altered.

SQL> exit

オフライン状態にあるデータファイルをバックアップファイルから復旧します。

[oracle@server ~]$ tar xvfz /db/tools/backup/example01.dbf.tar.gz
[oracle@server ~]$ tar xvfz /db/tools/backup/sysaux01.dbf.tar.gz
[oracle@server ~]$ tar xvfz /db/tools/backup/undotbs01.dbf.tar.gz
[oracle@server ~]$ tar xvfz /db/tools/backup/users01.dbf.tar.gz
[oracle@server ~]$ tar xvfz /db/tools/backup/temp01.dbf.tar.gz
[oracle@server ~]$ cp /db/tools/backup/db/ora/testdb/example01.dbf /db/ora/testdb/
[oracle@server ~]$ cp /db/tools/backup/db/ora/testdb/sysaux01.dbf /db/ora/testdb/
[oracle@server ~]$ cp /db/tools/backup/db/ora/testdb/undotbs01.dbf /db/ora/testdb/
[oracle@server ~]$ cp /db/tools/backup/db/ora/testdb/users01.dbf /db/ora/testdb/
[oracle@server ~]$ cp /db/tools/backup/db/ora/testdb/temp01.dbf /db/ora/testdb/

リカバリ時のロールフォワード処理にて、最新状態にするためにアーカイブREDOログとオンラインREDOログが必要になります。もしメディア障害等でアーカイブログが破損している場合は、バックアップから全てのアーカイブログをアーカイブログ出力ディレクトリへ集めます。

[oracle@server ~]$ cp "backup-アーカイブログ" "/db/ora/arc1/"

ファイルを復旧したらいったんデータベースを停止して再度マウント状態にします。リカバリコマンドを実行して復旧します。復旧後はオフライン状態のデータファイルをオンライン化します。

SQL> shutdown abort;

Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup mount;

ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218968 bytes
Variable Size             109053544 bytes
Database Buffers          167772160 bytes
Redo Buffers                7168000 bytes
Database mounted.

SQL> recover automatic database;

Media recovery complete.

[oracle@server ~]$ sqlplus sys/oracle as sysdba
SQL> alter database datafile '/db/ora/testdb/undotbs01.dbf' online;

Database altered.

SQL> alter database datafile '/db/ora/testdb/sysaux01.dbf' online;

Database altered.

SQL> alter database datafile '/db/ora/testdb/users01.dbf' online;

Database altered.

SQL> alter database datafile '/db/ora/testdb/example01.dbf' online;

Database altered.

SQL> set line 1000
SQL> column NAME format a50
SQL> select name, status from v$datafile;

NAME                                               STATUS
-------------------------------------------------- -------
/db/ora/testdb/system01.dbf                        SYSTEM
/db/ora/testdb/undotbs01.dbf                       RECOVER
/db/ora/testdb/sysaux01.dbf                        RECOVER
/db/ora/testdb/users01.dbf                         RECOVER
/db/ora/testdb/example01.dbf                       RECOVER

データファイルを復旧してオンライン化したら再度リカバリコマンドを実行することでデータベースの復旧が完了します。

SQL> recover automatic database;
Media recovery complete.

SQL> alter database open;

Database altered.

SQL> select name, status from v$datafile;

NAME                                               STATUS
-------------------------------------------------- -------
/db/ora/testdb/system01.dbf                        SYSTEM
/db/ora/testdb/undotbs01.dbf                       ONLINE
/db/ora/testdb/sysaux01.dbf                        ONLINE
/db/ora/testdb/users01.dbf                         ONLINE
/db/ora/testdb/example01.dbf                       ONLINE

処理完了後は step6 へ


step11. Currentグループのredoログが破損か?

alter database open でオンラインREDOログ関連のファイルが見つからないエラーが表示されていかを確認します。表示されている場合はどのオンラインREDOログが破損しているかを確認します。
またバックアップファイルがそろっている前提で最も重傷な障害はカレントREDOログの破損です。その場合は残念ながら不完全復旧になります。

ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218968 bytes
Variable Size              96470632 bytes
Database Buffers          180355072 bytes
Redo Buffers                7168000 bytes
Database mounted.
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/db/ora/testdb/redo03.log'

どのオンラインREDOログが破損しているかを確認します。

SQL> column MEMBER format a50
SQL> select a.*, b.member from v$log a, v$logfile b where a.group#=b.group#;

   GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME MEMBER
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------- --------------------------------------------------
         1          1          2   52428800          1 NO  ACTIVE                  545905 20-AUG-09  /db/ora/testdb/redo01.log
         2          1          1   52428800          1 YES INACTIVE                507703 19-AUG-09  /db/ora/testdb/redo02.log
         3          1          3   52428800          1 NO  CURRENT                 575696 20-AUG-09  /db/ora/testdb/redo03.log

STATUS が CURRENT のログが破損の場合は step12へ
STATUS が ACTIVE で ARCHIVED が NO のログが破損の場合は step13へ
STATUS が ACTIVE で ARCHIVED が YES のログが破損の場合は step14へ
STATUS が INACTIVE 以外のログが破損の場合は step14へ


step12. データベースの全てのファイルをバックアップから不完全復旧

またバックアップファイルがそろっている前提で最も重傷な障害です。カレントREDOログが破損しているため、データベースをバックアップとアーカイブREDOログを用いて不完全復旧することになります。

リカバリ時のロールフォワード処理にて、最新状態にするためにアーカイブREDOログとオンラインREDOログが必要になります。もしメディア障害等でアーカイブログが破損している場合は、バックアップから全てのアーカイブログをアーカイブログ出力ディレクトリへ集めます。

[oracle@server ~]$ cp "backup-アーカイブログ" "/db/ora/arc1/"

次に全てのデータファイルをバックアップから復旧します。(注)制御ファイルとオンラインREDOログはそのままの状態にしておきます。

[oracle@server ~]$ tar xvfz /db/tools/backup/system01.dbf.tar.gz
[oracle@server ~]$ tar xvfz /db/tools/backup/example01.dbf.tar.gz
[oracle@server ~]$ tar xvfz /db/tools/backup/sysaux01.dbf.tar.gz
[oracle@server ~]$ tar xvfz /db/tools/backup/undotbs01.dbf.tar.gz
[oracle@server ~]$ tar xvfz /db/tools/backup/users01.dbf.tar.gz
[oracle@server ~]$ tar xvfz /db/tools/backup/temp01.dbf.tar.gz
[oracle@server ~]$ cp /db/tools/backup/db/ora/testdb/system01.dbf /db/ora/testdb/
[oracle@server ~]$ cp /db/tools/backup/db/ora/testdb/example01.dbf /db/ora/testdb/
[oracle@server ~]$ cp /db/tools/backup/db/ora/testdb/sysaux01.dbf /db/ora/testdb/
[oracle@server ~]$ cp /db/tools/backup/db/ora/testdb/undotbs01.dbf /db/ora/testdb/
[oracle@server ~]$ cp /db/tools/backup/db/ora/testdb/users01.dbf /db/ora/testdb/
[oracle@server ~]$ cp /db/tools/backup/db/ora/testdb/temp01.dbf /db/ora/testdb/

データベースをマウント状態にして各データファイルの状態がオンラインであることを確認した後にリカバリコマンドを実行して復旧します。復旧後は RESETLOGS オプションでデータベースをオープンしてログをリセットする必要があります。

[oracle@server ~]$ sqlplus sys/oracle as sysdba
SQL> startup mount
SQL> column NAME format a50
SQL> column AUX_NAME format a50
SQL> select * from v$datafile;

     FILE# CREATION_CHANGE# CREATION_T        TS#     RFILE# STATUS  ENABLED    CHECKPOINT_CHANGE# CHECKPOINT UNRECOVERABLE_CHANGE# UNRECOVERA LAST_CHANGE# LAST_TIME  OFFLINE_CHANGE# ONLINE_CHANGE# ONLINE_TIM      BYTES BLOCKS CREATE_BYTES BLOCK_SIZE NAME                          PLUGGED_IN BLOCK1_OFFSET AUX_NAME                                            FIRST_NONLOGGED_SCN FIRST_NONL
---------- ---------------- ---------- ---------- ---------- ------- ---------- ------------------ ---------- --------------------- ---------- ------------ ---------- --------------- -------------- ---------- ---------- ---------- ------------ ---------- -------------------------------------------------- ---------- ------------- -------------------------------------------------- ------------------- ----------
         1                9 30-JUN-05           0          1 SYSTEM  READ WRITE             577808 20-AUG-09                      0             577808 20-AUG-09            507702         507703 19-AUG-09   503316480      61440            0       8192 /db/ora/testdb/system01.dbf    0           8192 NONE                                                                 0
         2           444079 30-JUN-05           1          2 ONLINE  READ WRITE             577808 20-AUG-09                      0             577808 20-AUG-09            507702         507703 19-AUG-09    36700160       4480            0       8192 /db/ora/testdb/undotbs01.dbf   0           8192 NONE                                                                 0
         3             6609 30-JUN-05           2          3 ONLINE  READ WRITE             577808 20-AUG-09                      0             577808 20-AUG-09            507702         507703 19-AUG-09   262144000      32000            0       8192 /db/ora/testdb/sysaux01.dbf    0           8192 NONE                                                                 0
         4            10566 30-JUN-05           4          4 ONLINE  READ WRITE             577808 20-AUG-09                      0             577808 20-AUG-09            507702         507703 19-AUG-09     5242880        640            0       8192 /db/ora/testdb/users01.dbf     0           8192 NONE                                                                 0
         5           468006 19-AUG-09           6          5 ONLINE  READ WRITE             577808 20-AUG-09                      0             577808 20-AUG-09            507702         507703 19-AUG-09   104857600      12800    104857600       8192 /db/ora/testdb/example01.dbf   0           8192 NONE                                                                 0

SQL> recover automatic database;

Media recovery complete.

SQL> alter database open resetlogs;

Database altered.

【作業終了です】アーカイブREDOログを適用した状態で復旧されます。破損したREDOログ分の処理がロールフォワードされていません。不完全復旧状態になりますが step0 フルバックアップを取得して終了して下さい。


step13. Checkpointの実行

フローチャート通りの手順であれば、この手順を通ることはありませんが、万が一データベースオープン状態にある場合は checkpoint コマンドを発行することで復旧レベルを一段階簡易化することが可能です。
現在データベースが停止状態でマウント状態までしか実行できない場合は step12へ

SQL> alter system checkpoint local;

System altered.

SQL> alter system archive log current;

System altered.

処理完了後は step14へ


step14. 破損したredoログを削除して再作成

すでにアーカイブ済みのオンラインREDOログであるため、破損した INACTIVE なREDOログの GROUP# を指定してREDOロググループを削除&再作成することで復旧することができます。
ここでは INACTIVE な状態の /db/ora/testdb/redo02.log が破損した場合の例です。REDOログサイズも便宜上 50Mbyte に設定しています。

SQL> alter database drop logfile group グループ番号;

Database altered.


SQL> alter database add logfile group グループ番号 ('/db/ora/testdb/redo02.log') size 50M;

Database altered.

処理完了後は step6へ


step15. 完全復旧状態です

【作業終了です】おめでとうございます。完全復旧完了です。step0 フルバックアップを取得して終了して下さい。


※一通りテスト環境で確認しながら作り上げたリカバリ手順書ですが、環境や障害によっては上記手順で復旧できないケースもあるかと思います。その辺はあしからずご了承下さいませ。

- スポンサーリンク -

関連する記事&スポンサーリンク