Email: service@parnassusdata.com 7 x 24 online support!

    You are here

    • You are here:
    • Home > Blogs > PDSERVICE's blog > Oracle オンラインREDOログファイルのリカバリ--多重化した一部の障害の場合 (for UNIX)

Oracle オンラインREDOログファイルのリカバリ--多重化した一部の障害の場合 (for UNIX)

Oracle オンラインREDOログファイルのリカバリ--多重化した一部の障害の場合 (for UNIX)

ORACLEデータベース によくあるエラ の解決策

プロのOracle Databaseの復旧サービスを提供
携帯番号: +86 13764045638 メール:service@parnassusdata.com

 
 
[概要]
 オンラインREDOログファイルのリカバリ--多重化した一部の障害の場合

[内容]
 本KROWNでは、多重化されたオンラインREDOログファイルの一部のファイルが
 障害を受けた場合のリカバリ方法を紹介します。

[対象リリース]
 Oracle7 Server/Oracle7 Workgroup Server  7.x
 Oracle8 Enterprise Edition/Oracle8 Standard Edition 8.0.x
 Oracle8i Enterprise Edition/Oracle8i Standard Edition 8.1.x
 Oracle9i Database Release1 (9.0.1.x)
 Oracle9i Database Release2 (9.2.x)

[対象プラットフォーム]
 Unixプラットフォーム

[エラー内容]
 多重化されたオンラインREDOログの一部のファイルが破損した場合には、
 アラートログファイル、又は v$logfile から確認出来ます。
 アラートには、ORA-312/ORA-313/ORA-321 又はその他付随する
 OSエラーが書き込まれます。

 --------------
 Errors in file /home/admin/ora920/bdump/ora920_lgwr_21920.trc:
 ORA-00313: open failed for members of log group 1 of thread 1
 ORA-00312: online log 1 thread 1: '/home/oradata/ora920/redo01_2.log'
 ORA-27037: unable to obtain file status
 SVR4 Error: 2: No such file or directory
 Additional information: 3

 Errors in file /home/admin/ora920/bdump/ora920_lgwr_21920.trc:
 ORA-00321: log 1 of thread 1, cannot update log file header
 ORA-00312: online log 1 thread 1: '/home/oradata/ora920/redo01_2.log'

 ORA-00313: open failed for members of log group 1 of thread 1
 --------------

 v$logfile から確認した場合には、破損したログの STATUS は 
 "INVALID" となっています。

 SQL> select * from v$logfile;

     GROUP# STATUS  TYPE    MEMBER
 ---------- ------- ------- --------------------------------------------------
          3         ONLINE  /home/oradata/ora920/redo03_2.log
          2         ONLINE  /home/oradata/ora920/redo02_2.log
          1 INVALID ONLINE  /home/oradata/ora920/redo01_2.log  <--
          1         ONLINE  /homeoradata/ora920/redo01_1.log
          2         ONLINE  /home/oradata/ora920/redo02_1.log
          3         ONLINE  /home/oradata/ora920/redo03_1.log

[リカバリ方法]

 手順例として、以下のような環境であると仮定します。

 $ORACLE_HOME: ora920
  破損したオンラインREDOログファイル: redo01_2.log
 破損したオンラインREDOログファイルが属するグループ: group#1 

1. v$logfile から破損したログファイルを特定します。
   破損したログファイルのステータスは、"INVALID" となっています。

 SQL> select * from v$logfile;

     GROUP# STATUS  TYPE    MEMBER
 ---------- ------- ------- --------------------------------------------------
          3         ONLINE  /home/oradata/ora920/redo03_2.log
          2         ONLINE  /home/oradata/ora920/redo02_2.log
          1 INVALID ONLINE  /home/oradata/ora920/redo01_2.log <--** 破損したファイル
          1         ONLINE  /homeoradata/ora920/redo01_1.log
          2         ONLINE  /home/oradata/ora920/redo02_1.log
          3         ONLINE  /home/oradata/ora920/redo03_1.log

 --> 上記結果から、問題のREDOログファイルは、group#1 のメンバー、redo01_2.log で
     あることがわかります。

2. 破損したファイルが属するロググループ(ここでは group#1) のステータスが 
  CURRENT ではないことを確認します。
  (グループの STATUS が CURRENT では、そのグループに属するメンバーの DROP を
  出来ないためです。)

   SQL> select group#, status from v$log;

        GROUP# STATUS 
    ---------- ----------------
             1 ACTIVE <--** group#1は "CURRENT" ではないことを確認
             2 CURRENT
             3 INACTIVE

  <問題のログメンバーが属するグループが CURRENT であった場合>
  問題のメンバーが属するグループが CURRENT の場合には、ログスイッチを発生させます。  
   SQL> alter system switch logfile;


3. 問題のログメンバー、redo01_2.log を DROP します。

   SQL> alter database drop logfile member
     2  '/home/oradata/ora920/redo01_2.log';

4. グループに新しいメンバーを追加します。既にOS上に存在しているログファイルを
  削除せず、再利用する場合には、reuse 句をつけて add します。

   SQL> alter database add logfile member
     2  '/home/oradata/ora920/redo01_2.log' reuse to group 1;
                                            ^^^^^
   ※ 一旦OS側でログファイルの削除を行っている場合、又は新しい名前でログファイルを
     add するには、reuse 句は必要ありません。

#注意#
 カレントグループに属するロググループの DROP は出来ません。カレントロググループに
 属するメンバーを DROP しようとした場合、以下のようなエラーとなります。
 ----------
 ORA-01609: ログ1はスレッド1の現在のログです - メンバーは削除できません
 ORA-00312: オンライン・ログ1 スレッド1:
 '/home/oradata/ora920/redo01_2.log'
 ORA-00312: オンライン・ログ1 スレッド1:
 '/home/oradata/ora920/redo01_1.log'
 ----------

 元の状態に戻ったか確認します。
    
 SQL> select * from v$logfile;

      GROUP# STATUS  TYPE    MEMBER
  ---------- ------- ------- -------------------------------------
           1      ONLINE  /home/oradata/ora920/redo01_2.log
           3         ONLINE  /home/oradata/ora920/redo03_2.log
           2         ONLINE  /home/oradata/ora920/redo02_2.log
           1         ONLINE  /home/oradata/ora920/redo01_1.log
           2         ONLINE  /home/oradata/ora920/redo02_1.log
           3         ONLINE  /home/oradata/ora920/redo03_1.log

以上で作業は完了です。

[参照情報]

「Oracle9i ユーザー管理バックアップおよびリカバリ・ガイド リリース1(9.0.1)」
「Oracle9i ユーザー管理バックアップおよびリカバリ・ガイド リリース2(9.2)」
 第6章: ユーザー管理のメディア・リカバリのシナリオ

「Oracle8i バックアップおよびリカバリ・ガイド リリース8.1」
 第6章: メディア・リカバリのシナリオ