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

図は、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;
|
とする。メンバー追加の際、サイズを指定する必要はない。

次に、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;
|

初めの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に表示される。

できれば瞬時に出てほしいのだが、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でのアラート表示と連動していないみたい。
復旧作業
先の外科手術と同じ
メンバファイルを複数削ってみる。†