RAC環境におけるREDO構成の概要と再構成手順

oracle-godzilla_R

RAC環境におけるREDO構成の概要と再構成手順

REDOの構成概要と再構成手順について説明します。

REDO構成の概要

データベースがシングルノードである場合、障害対応として考えておかなければならないREDO構成は冗長化のみでした。片方のディスクがI/O不能となっても、ミラーリングされている別のREDOが生きていればサービスを継続できるという構成です。

シングルノードの場合はこれだけでよかったのですが、RAC構成になると冗長化に加えてノード毎のREDO書き込み先を考慮する必要があります。

まずはREDOを構成する要素を説明します。

  • Group-ID
  • Thread
  • REDO配置領域
  • REDOファイル名

Group-IDとはREDOファイルをグルーピングした構成に割り当てるID番号です。
ThreadはどのノードからのREDO書き込みであるかを指定する番号です。
REDO配置領域とは、REDOファイルをどこのディスク、またはディスクグループに配置するかの指定です。
REDOファイル名はREDOファイルに割り当てるファイル名です。

RAC構成におけるノード毎のREDO書き込み先を決定する構成要素ですが、それは「Thread」です。
Threadの書き込み先を冗長化することでRAC構成における冗長化を実現できることになります。

redo_gaiyou

この図のRAC構成では、server01のREDO書き込みが「Thread 1」で、server02のREDO書き込みが「Thread 2」となります。

REDO配置領域としては、ASMディスクグループである「DG_REDO_1」と「DG_REDO_2」で冗長化されています。
server01が「Thread 1」で書き込む為に用意されているREDOはredo01.logからredo04.logですが、冗長化構成を実現サせるために更にグループによって分けられています。

「Group 1」には「redo01.log」と「redo02.log」が含まれ、「Group 2」には「redo03.log」と「redo04.log」が含まれています。Thread 1 によるREDOは「redo01.log」と「redo02.log」に同時に書き込まれていきます。

「Group 1」のREDOがログスイッチすると、その後のREDO書き込みは「Group 2」に切り替わります。

「Thread 2」も同様の構成です。



 

REDO再構成手順

以下のREDO構成を作ることにします。

  • REDO書き込み先DGは「DG_REDO_1」と「DG_REDO_2」で冗長化構成
  • Thread 1 用のREDOグループは「1,2,3」、Thread 2 用のREDOグループは「4,5,6」
  • Group 1 に割り当てるREDOファイルはredo01.log~redo06.log
  • Group 2 に割り当てるREDOファイルはredo07.log~redo12.log
  • REDOファイルのサイズは全て512Kb

構成変更前のREDO確認

REDOの構成を次のSQLで確認します。

SQL> select log.thread#,log.group#,log.bytes/1024/1024 as mbytes,
log.status,log.archived,logfile.group# from v$log log,v$logfile logfile 
where log.group# = logfile.group# order by log.thread#,log.group#;

   THREAD#     GROUP#     MBYTES STATUS           ARC     GROUP#
---------- ---------- ---------- ---------------- --- ----------
         1          1         50 CURRENT          NO           1
         1          2         50 INACTIVE         NO           2
         2          3         50 CURRENT          NO           3
         2          4         50 INACTIVE         NO           4

SQL>

Thread 1 が書き込むREDOグループが「1,2」があり、Thread 2 が書き込みREDOグループが「3,4」となっており、書き込み中で状態がアクティブになっているグループが「1,3」であることがわかります。

REDO再構成作業の流れ

REDOファイルがACTIVE状態のときは、削除することができません。
しかし強制的にログスイッチさせることで、ACTIVE状態のREDOを切り替えることができます。
この条件から、作業の流れは以下となります。

  1. REDOグループ「5,6」を新規作成
  2. 既存REDOでINACTIVE状態のREDOグループを削除
  3. 削除したREDOグループを作成
  4. 強制的にログスイッチさせ、ACTIVE状態であったREDOグループ「1,3」をINACTIVE状態にする
  5. INACTIVE状態となったREDOグループ「1,3」を削除
  6. REDOグループ「1,3」を新規作成

これで全てのREDOログが再作成&再配置できます。

REDOグループ「5,6」追加

REDOグループ「1,2,3,4」が既に使われているので、「5,6」を新規作成します。

SQL> alter database add logfile thread 2 group 6 
('+DG_REDO_1/DB01/redo09.log','+DG_REDO_2/DB01/redo10.log') size 512000K;

データベースが変更されました。

SQL> alter database add logfile thread 2 group 7 
('+DG_REDO_1/DB01/redo11.log','+DG_REDO_2/DB01/redo12.log') size 512000K;

データベースが変更されました。

SQL>

グループ「5,6」が追加されていることを確認します。

SQL> select log.thread#,log.group#,log.bytes/1024/1024 as mbytes,
log.status,log.archived,logfile.group# from v$log log,v$logfile logfile 
where log.group# = logfile.group# order by log.thread#,log.group#;

   THREAD#     GROUP#     MBYTES STATUS           ARC     GROUP#
---------- ---------- ---------- ---------------- --- ----------
         1          1         50 CURRENT          NO           1
         1          2         50 INACTIVE         NO           2
         2          3         50 CURRENT          NO           3
         2          4         50 INACTIVE         NO           4
         2          5        500 UNUSED           YES         11
         2          5        500 UNUSED           YES         11
         2          6        500 UNUSED           YES         11
         2          6        500 UNUSED           YES         11

SQL>

INACTIVE状態であるREDOグループ「2,4」を削除

SQL> alter database drop logfile group 2;

データベースが変更されました。

SQL> alter database drop logfile group 4;

データベースが変更されました。

SQL>

REDOグループ「2,4」を作成

SQL> alter database add logfile thread 1 group 2 
('+DG_REDO_1/DB01/redo03.log','+DG_REDO_2/DB01/redo04.log') size 512M;

データベースが変更されました。

SQL> alter database add logfile thread 1 group 4 
('+DG_REDO_1/DB01/redo07.log','+DG_REDO_2/DB01/redo08.log') size 512M;

データベースが変更されました。

SQL>

補足

REDOログ削除する際に、残りが1つしか残らない場合はエラーになります。その時は仮のREDOファイルを作成して対応して下さい。

SQL> alter database drop logfile group 4;
alter database drop logfile group 4
*
行1でエラーが発生しました。:
ORA-01567:
ログ4を削除すると、インスタンスdb012(スレッド2)内の残りログ・ファイルが1つ以下になります
ORA-00312: オンライン・ログ4 スレッド2: '+DATA/db01/onlinelog/group_4.266.829070529'

SQL>

 

強制ログスイッチ

SQL> alter system switch logfile;

システムが変更されました。

SQL>

ACTIVEだったREDOグループがINACTIVEになることを確認します。
(※チェックポイント処理によりINACTIVEになるまでに時間がかかる場合があります。)

SQL> select log.thread#,log.group#,log.bytes/1024/1024 as mbytes,
log.status,log.archived,logfile.group# from v$log log,v$logfile logfile 
where log.group# = logfile.group# order by log.thread#,log.group#;

   THREAD#     GROUP#     MBYTES STATUS           ARC     GROUP#
---------- ---------- ---------- ---------------- --- ----------
         1          1         50 INACTIVE         NO           1
         1          2         50 CURRENT          NO           2
         2          3         50 INACTIVE         NO           3
         2          4         50 CURRENT          NO           4
         2          5        500 INACTIVE         YES         11
         2          5        500 INACTIVE         YES         11
         2          6        500 INACTIVE         YES         11
         2          6        500 INACTIVE         YES         11

SQL>

INACTIVE状態であるREDOグループ「1,3」を削除

SQL> alter database drop logfile group 1;

データベースが変更されました。

SQL> alter database drop logfile group 3;

データベースが変更されました。

SQL>

REDOグループ「1,3」を作成

SQL> alter database add logfile thread 1 group 1 
('+DG_REDO_1/DB01/redo01.log','+DG_REDO_2/DB01/redo02.log') size 512M;

データベースが変更されました。

SQL> alter database add logfile thread 1 group 3 
('+DG_REDO_1/DB01/redo05.log','+DG_REDO_2/DB01/redo06.log') size 512M;

データベースが変更されました。

SQL>

 

これでREDO再構成は完了です。
REDOグループ、REDOファイル数、は必要に応じて変更して下さい。

 



 

 


サブコンテンツ

このページの先頭へ