(オンライン)REDOログファイルは、バックアップ直後からデータベースの追加,更新情報がどんどん追記される。
なので、このファイルがないとデータベースの完全復旧は難しい。故に他のディスクにも分散せて障害に備えるのが必要なのかと。

2013y06m16d_184640301.png
図は、3グループ(縦)、2メンバ(横)構成で構成されている。片方のディスクが失われても冗長を保つ。
ここで、もう一つHDDを追加して、3メンバ構成にするには、

  1
  2
  3
  4
SQL> ALTER DATABASE ADD LOGFILE MEMBER;
       'C:\ORADATA\AERS\REDO01.LOG' TO GROUP 1,
       'C:\ORADATA\AERS\REDO02.LOG' TO GROUP 2,
       'C:\ORADATA\AERS\REDO03.LOG' TO GROUP 3;

とする。メンバー追加の際、サイズを指定する必要はない。
2013y06m16d_184030902.png
次に、GROUPを追加してみる。グループの追加は下記SQLにて行える。

  1
SQL> ALTER DATABASE ADD LOGFILE GROUP 4 ( 'D:\ORADATA\AERS\redo04.log') SIZE 150M;

ただこれでは、GROUP 4は、1つの構成員(member)しかもたないので、ほかと同様にするためにあと2つメンバを増やす

  1
  2
SQL> ALTER DATABASE ADD LOGFILE MEMBER 'E:\ORADATA\AERS\REDO04.LOG' TO GROUP 4;
SQL> ALTER DATABASE ADD LOGFILE MEMBER 'C:\ORADATA\AERS\REDO04.LOG' TO GROUP 4;

2013y06m16d_192745550.png
初めのGROUP 4の追加の段階でサイズを決めたので、他のメンバの追加の際にはサイズ指定は不要となる。
*GROUP内でサイズは同じになるが、GROUP間でサイズは異なっても構わないみたい。それを採用するかは別として
現在のREDOログファイルの状況は下記SQLにて取得可能

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
SQL> SELECT
   LOG.GROUP#,
   LOG.STATUS AS GROUP_STATUS,
   LOG.ARCHIVED AS ARCHIVED,
   LOGFILE.STATUS AS MEMBER_STATUS,
   LOGFILE.MEMBER AS MEMBER_FILE
FROM
   V$LOG LOG,   V$LOGFILE LOGFILE
WHERE
   LOG.GROUP#=LOGFILE.GROUP#
ORDER BY
   LOG.GROUP#,  LOGFILE.MEMBER;
 
GROUP# GROUP_STATUS ARCHIVED  MEMBER_STATUS MEMBER_FILE
------ ------------ --------- ------------- ------------------------------
     1 INACTIVE     YES       INVALID       C:\ORADATA\AERS\REDO01.LOG
     1 INACTIVE     YES                     D:\ORADATA\AERS\REDO01.LOG
     1 INACTIVE     YES                     E:\ORADATA\AERS\REDO01.LOG
     2 INACTIVE     YES                     C:\ORADATA\AERS\REDO02.LOG
     2 INACTIVE     YES                     D:\ORADATA\AERS\REDO02.LOG
     2 INACTIVE     YES                     E:\ORADATA\AERS\REDO02.LOG
     3 CURRENT      NO                      C:\ORADATA\AERS\REDO03.LOG
     3 CURRENT      NO                      D:\ORADATA\AERS\REDO03.LOG
     3 CURRENT      NO                      E:\ORADATA\AERS\REDO03.LOG
     4 UNUSED       YES       INVALID       C:\ORADATA\AERS\REDO04.LOG
     4 UNUSED       YES                     D:\ORADATA\AERS\REDO04.LOG
     4 UNUSED       YES       INVALID       E:\ORADATA\AERS\REDO04.LOG
SQL>

*MEMBER_STATUSにINVALIDがあるが、ALTER SYSTEM SWITCH LOGFILEとログスイッチをすれば解消されるので不問
ここまでリストア以前の話なのであるが、ここから障害時対処について。

メンバファイルを一つ無効にする

障害作成
GROUP_STATUSがINACTIVEで、アーカイブREDOログファイルの作成がYESと作成済みになっているものに対して

  1
  2
C:\TEMP> echo 1 > null.LOG
C:\TEMP> ocopy null.LOG D:\ORADATA\AERS\REDO02.LOG

としてREDO02.LOG(メンバーの一つ)を破壊させます。っても、その後もなんもなく正常に使えている.....
エラーの作り方が間違っているかも。っがデータを登録・更新とかしていると後に下記のようなアラートがOEMに表示される。
2013y06m18d_200955141.png
できれば瞬時に出てほしいのだが、REDOログの担当になって初めてエラーを出すような感じかな。
障害確認
この段階でREDOログファイルの状態を調べてみると

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
GROUP# GROUP_STATUS ARCHIVED  MEMBER_STATUS MEMBER_FILE
------ ------------ --------- ------------- ------------------------------
     1 INACTIVE     YES                     C:\ORADATA\AERS\REDO01.LOG
     1 INACTIVE     YES                     D:\ORADATA\AERS\REDO01.LOG
     1 INACTIVE     YES                     E:\ORADATA\AERS\REDO01.LOG
     2 INACTIVE     YES                     C:\ORADATA\AERS\REDO02.LOG
     2 INACTIVE     YES       INVALID       D:\ORADATA\AERS\REDO02.LOG
     2 INACTIVE     YES                     E:\ORADATA\AERS\REDO02.LOG
     3 INACTIVE     YES                     C:\ORADATA\AERS\REDO03.LOG
     3 INACTIVE     YES                     D:\ORADATA\AERS\REDO03.LOG
     3 INACTIVE     YES                     E:\ORADATA\AERS\REDO03.LOG
     4 CURRENT      NO                      C:\ORADATA\AERS\REDO04.LOG
     4 CURRENT      NO                      D:\ORADATA\AERS\REDO04.LOG
     4 CURRENT      NO                      E:\ORADATA\AERS\REDO04.LOG

と一応該当のフィルがINVALIDと認識される。まぁー当然なのでしょう。
っが、GROUP_STATUSがCURRENTになると、このINVALIDが消えてしまう事があった....なぜか不明

復旧作業
外科手術、いやこの場合歯医者なのでしょうか、悪い患部を除去して、穴を埋める。そんな感じ。

  1
  2
  3
  4
  5
  6
SQL> alter database drop logfile member 'D:\ORADATA\AERS\REDO02.LOG';               *REDOログから外す
 
*OS上でも削除
 
SQL> alter database add  logfile member 'D:\ORADATA\AERS\REDO02.LOG' to group 2;    *サイズ指定は無用。自動で作られる
SQL> alter system switch logfile;                                                   *REDOログを数回回してみる

未調査:この状態で、アーカイブREDOログファイルに問題が及ばないのであれば、構わないのであろうか?

メンバファイルを一つ無効にする 削除編

「Force Recycle Bin」なるものを見つけたのだが、稼働中のREDOログファイルは削除できなかった。
なので、仕方なくオラクルを止めて、REDOファイルを削除してみた。
障害作成

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
SQL> shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL>
SQL> host                                                 *sqlplusからOSコマンド実行環境へ
C:\Users\Administrator>del E:\oradata\AERS\REDO04.LOG     *ファイルを削除
C:\Users\Administrator>exit                               *exitでOSコマンド環境を抜ける
 
SQL>

障害確認

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
SQL> startup
ORACLEインスタンスが起動しました。
 
Total System Global Area 2.9931E+10 bytes
Fixed Size                  2269752 bytes
Variable Size            2.9259E+10 bytes
Database Buffers          603979776 bytes
Redo Buffers               64823296 bytes
データベースがマウントされました。
データベースがオープンされました。
SQL>

あれぇ?普通に起動してしまった。。っが、REDOログファイルの状態を調べてみると

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
GROUP# GROUP_STATUS ARCHIVED  MEMBER_STATUS MEMBER_FILE
------ ------------ --------- ------------- ------------------------------
     1 INACTIVE     YES                     C:\ORADATA\AERS\REDO01.LOG
     1 INACTIVE     YES                     D:\ORADATA\AERS\REDO01.LOG
     1 INACTIVE     YES                     E:\ORADATA\AERS\REDO01.LOG
     2 CURRENT      NO                      C:\ORADATA\AERS\REDO02.LOG
     2 CURRENT      NO                      D:\ORADATA\AERS\REDO02.LOG
     2 CURRENT      NO                      E:\ORADATA\AERS\REDO02.LOG
     3 INACTIVE     YES                     C:\ORADATA\AERS\REDO03.LOG
     3 INACTIVE     YES                     D:\ORADATA\AERS\REDO03.LOG
     3 INACTIVE     YES                     E:\ORADATA\AERS\REDO03.LOG
     4 INACTIVE     YES                     C:\ORADATA\AERS\REDO04.LOG
     4 INACTIVE     YES                     D:\ORADATA\AERS\REDO04.LOG
     4 INACTIVE     YES       INVALID       E:\ORADATA\AERS\REDO04.LOG

とエラーは表示される。でもOEMでのアラート表示と連動していないみたい。
復旧作業
先の外科手術と同じ

メンバファイルを複数削ってみる。


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2013-06-19 (水) 20:39:50 (2365d)