(続)Oracle データベース復旧手順書とフルバックアップスクリプト
前エントリ Oracle データベース復旧手順書とフルバックアップスクリプト の続きです。
以下のフローチャートの各ステップで実際にコマンドラインおよび SQL *Plus で入力する SQL 文について説明を行います。基本的にこのエントリにページ内リンクを使ってコマンドを実行していくだけでデータベースが復旧できるという超リカバリ術になります。
テスト環境構築を構築するスクリプトも用意しました。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環境]
カスタムデータベースにてテストデータベースを構築
アーカイブログモードで運用
dba 権限での接続は sys/oracle
[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/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_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
・・・・
[アラートログ]
[バックアップツールおよびバックアップファイル先]
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"
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.
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
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. 破損した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.
step15. 完全復旧状態です
■ 【作業終了です】おめでとうございます。完全復旧完了です。step0 フルバックアップを取得して終了して下さい。
※一通りテスト環境で確認しながら作り上げたリカバリ手順書ですが、環境や障害によっては上記手順で復旧できないケースもあるかと思います。その辺はあしからずご了承下さいませ。
コメントやシェアをお願いします!