連載
» 2007年02月08日 00時00分 公開

OSコマンドを使用したリストア・リカバリの方法Oracleバックアップ/リカバリ講座(11)(2/4 ページ)

[森谷聡,株式会社アゲハ]

完全リカバリ ―― オフラインリカバリ

 ここではSYSTEM表領域に障害が発生した場合を例に挙げ、リカバリの手順を説明します。

 SYSTEM表領域はインスタンスが稼働するために必須の領域であり、オフラインにすることはできません。このため、SYSTEM表領域に障害が発生した場合には、いったんインスタンスを停止する必要があります。

1.障害個所の確認

 先にも説明したように障害が発生した場合には、アラートログ、動的パーフォマンス・ビュー(v$recover_file、v$datafile_header)を確認し、どのデータファイルに障害が発生したのかを確認します。

 リスト1は、SYSTEM表領域に障害が発生した場合のアラートログへの出力例です。

oracle@single> view /opt/app/oracle/admin/v102/bdump/alert_v102.log
  ……
Sun Jan 28 02:57:34 2007
Errors in file /opt/app/oracle/admin/v102/bdump/v102_ckpt_13596.trc:
ORA-01243: system tablespace file suffered media failure
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/opt/app/oracle/oradata/system01.dbf'
ORA-01251: Unknown File Header Version read for file number 1
CKPT: terminating instance due to error 1243
  ……
リスト1 アラートログファイルからの障害個所の確認

 SYSTEM表領域に障害が発生している場合には、インスタンスを停止してからデータベースをmountモードで起動し直す必要があります。まだインスタンスが起動している場合には、インスタンスを強制停止します。

2.データファイルのリストア

 上述した「1.障害個所の確認」のように、SYSTEM表領域のデータファイル(および、ほかに障害が確認されたデータファイル)にて障害が発生していることが確認できた場合、対象のデータファイルをバックアップからリストアします(リスト2)。

oracle@single> cp -p /work/ONLINE_BACKUP/system01.dbf /opt/app/oracle/
oradata/
リスト2 データファイルのリストア

3.データファイルのリカバリ

 アーカイブREDOログファイル、オンラインREDOログファイルを使用して、リストアしたデータファイルを障害発生直前の状態までリカバリします。

 リカバリのコマンドは、「ALTER DATABASE RECOVER」文ではなく、SQL*Plusの「RECOVER DATABASE」文を使用する方が一般的です。

 また、アーカイブREDOログファイルを自動的にすべて反映させる場合には、SET句で「AUTORECOVERY ON」を設定することで可能になります(リスト3)。

SQL> startup mount
ORACLEインスタンスが起動しました。
 
Total System Global Area  109051904 bytes
Fixed Size                  1217980 bytes
Variable Size              83888708 bytes
Database Buffers           20971520 bytes
Redo Buffers                2973696 bytes
データベースがマウントされました。
SQL>
SQL> set autorecovery on
SQL> recover database
  ……
ORA-00279: 変更3811478(01/28/2007 03:08:40で生成)にはスレッド1が必要です
ORA-00289: 検討すべきログ・ファイル:
/opt/app/oracle/archive/1_17_611947833.dbf
ORA-00280: 変更3811478(スレッド1)は順序番号17に存在します。
ORA-00278:
ログ・ファイル'/opt/app/oracle/archive/1_16_611947833.dbf'はこのリカバリでは必要なくなりました
 
ログが適用されました。
メディア・リカバリが完了しました。
リスト3 データファイルのリカバリ

【TOPIC】

アーカイブREDOログファイルの場所指定

アーカイブREDOログファイルを、初期化パラメータ「LOG_ARCHIVE_DEST」など、本来のディレクトリ下でなく、別のディレクトリに保存している場合や、障害により一時的に別のディレクトリ下にある場合、以下のいずれかの方法でリカバリに使用するアーカイブREDOログファイルの場所を設定します。

  • SQL*PlusのSET文によるLOGSOURCEを設定する

  • RECOVER AUTOMATIC FROM ‘<参照ディレクトリ>’ tablespace <表領域名>で設定する

  • ALTER SYSTEM文によってlog_archive_destを変更する

ただし、ALTER SYSTEM文によって初期化パラメータ「LOG_ARCHIVE_DEST」を変更した場合、アーカイブREDOログファイルの出力先も変更されるため、SET文のLOGSOURCEを設定する方法やRECOVER AUTOMATIC FROM文でアーカイブREDOログファイルの出力先を設定する方法が推奨されます。


4.リカバリ完了後の確認

 動的パフォーマンス・ビューのv$recover_fileにレコードがなく、v$datafile_headerのERROR列がNULLであることを確認し、表領域が正常にリカバリできたことを確認します。(リスト4)。

SQL> select t.name tablespace_name, d.name file_name, r.* from v$recover_file r,v$datafile d,v$tablespace t
  2  where r.file# = d.file#
  3  and d.ts# = t.ts#;
 
レコードが選択されませんでした。
SQL> select tablespace_name,name,error,recover,fuzzy,checkpoint_change#,checkpoint_time from v$datafile_header;
 
TABLESPACE_NAME                NAME                                     ERROR                REC FUZ CHECKPOINT_CHANGE# CHECKPOINT_TIME
------------------------------ ---------------------------------------- -------------------- --- --- ------------------ -------------------
SYSTEM                         /opt/app/oracle/oradata/system01.dbf                          NO  NO             3811488 2007/01/28 03:08:47
UNDOTBS1                       /opt/app/oracle/oradata/undotbs01.dbf                         NO  NO             3811488 2007/01/28 03:08:47
SYSAUX                         /opt/app/oracle/oradata/sysaux01.dbf                          NO  NO             3811488 2007/01/28 03:08:47
USERS                          /opt/app/oracle/oradata/users01.dbf                           NO  NO             3811488 2007/01/28 03:08:47
USERS02                        /opt/app/oracle/oradata/users02.dbf                           NO  NO             3811488 2007/01/28 03:08:47
USERS03                        /opt/app/oracle/oradata/users03.dbf                           NO  NO             3811488 2007/01/28 03:08:47
 
6行が選択されました。
リスト4 リカバリ完了後の確認

5.データベースのオープン

 リカバリが正常に完了したので、運用を再開するためにデータベースをオープンします。これでオフラインリカバリの手順は終了です(リスト5)。

SQL> alter database open;
 
データベースが変更されました。
リスト5 データベースのオープン

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。