Oracleバックアップ/リカバリ講座(11) Page 2/4

OSコマンドを使用したリストア・リカバリの方法

株式会社アゲハ
森谷 聡
2007/2/8

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

 ここでは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.*
  2  from v$recover_file r,v$datafile d,v$tablespace t
  3  where r.file# = d.file#
  4  and d.ts# = t.ts#;

レコードが選択されませんでした。
SQL> select tablespace_name,name,error,recover,fuzzy,
  2  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 データベースのオープン


2/4

 Index
Oracleバックアップ/リカバリ講座(11)
OSコマンドを使用したリストア・リカバリの方法
  Page 1
・リストアおよびリカバリの概略
Page 2
・完全リカバリ ―― オフラインリカバリ
  Page 3
・完全リカバリ ―― オンラインリカバリ
  Page 4
・不完全リカバリ
・ノーアーカイブログ運用でのリカバリ


Oracleバックアップ/リカバリ講座

TechTargetジャパン

Database Expert フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH