Oracle11g DataGuard新機能 その4

投稿日: 2008年4月16日

<Oracle 11g検証 第4弾 新機能:Oracle11g DataGuard その4>
ペンネーム: オレンジみかん

先週に引き続き、「Oracle11g DataGuard新機能」について検証します。
今週は Data Guard Brokerでのスイッチオーバー/スイッチバック
の構築と動作検証をします。

1.検証目的
■検証ポイント
・LinuxとWindows 混在環境でのスイッチオーバー/スイッチバック検証
db_file_name_convert/log_file_name_convertの変換:
プライマリDBとスタンバイDBが入れ替わる時、Linux / とWindow の絶対
パス表記の違いがあっても指定するディレクトリが正常に入れ替わるか
どうか

今回は、前回構築したDataGuard構成を管理するData Guard Brokerを利用します。
2.検証準備
■構成図

                    Archive
 |~~~~~~~~~~~~~~~~~| log |~~~~~~~~~~~~~~~~~|
 |  プライマリDB   | ⇒  |   スタンバイDB  |
 |_________________|     |_________________|
 |Data Guard Broker|     |Data Guard Broker|
 ~~~~~~~~~|~~~~~~~~      ~~~~~~~~~|~~~~~~~~
          |_______________________|

下記は今回の検証環境の構成です。
■検証環境構成

---------------------------------------------------------------------
●プライマリDB                  ●スタンバイDB
Linux x86(32bit)             ⇔ Microsoft Windows x86(32bit)
OS:RedHat ES4 UPDATE5(32bit)x86 OS:Windows 2003 Enterprise Server SP2
                                (32bit)x86
Oracleバージョン:11.1.0.0.0     0racleバージョン:11.1.0.0.0
Oracle_sid:ora111               Oracle_sid:ora111w
HOST名:chigasaki                HOST名:ebisu
---------------------------------------------------------------------

Data Guard Brokerを構築する意図としてData Guard の構成の管理/
操作コマンドの自動化による操作の簡略出来る点と、ファスト・スタート・
フェイルオーバーを動作させたい点とからData Guard Brokerを構築します。

※解説
ファスト・スタート・フェイル・オーバー:
ファスト・スタート・フェイル・オーバーを設定することで、プライマリDBの
障害時にData Guard Brokerにより、事前に登録したスタンバイDBへ自動で
フェイルオーバーを実行できる機能
(Oracle10gR2より)

■Data Guard Broker構築
[前準備]
(1)Data Guard Brokerプロセスの起動
(1)-1.Data Guard Broker の構成情報ファイルの配置先を定義します。
デフォルトの場合以下の場所に定義されています。
Linux :$ORACLE_HOME/dbs
Windows:$ORACLE_HONEdatabase

今検証はデフォルトのままで行います。

(1)-2.Data Guard Brokerプロセスの起動
初期パラメータのdg_broker_startをTRUEに変更することにより
Data Guard Brokerプロセスを起動させます。

SQL>ALTER SYSTEM SET dg_broker_start='TRUE';

(2)Databaseモードの変更

(2)-1.Databaseモードの変更
※ファスト・スタート・フェイルオーバー後回復が出来るように
フラッシュバックデータベースをONに変更します。

SQL>ALTER DATABASE FLASHBACK ON;

※ファスト・スタート・フェイルオーバーを構築するために、
データベースモードを高可用性モードに変更します。

SQL>ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY;

(2)-2.Databaseモードの確認

SQL> SELECT FLASHBACK_ON,PROTECTION_MODE FROM V$DATABASE;

FLASHBACK_ON       PROTECTION_MODE
------------------ --------------------
YES                MAXIMUM AVAILABILITY

[Data Guard Brokerの構築]

(1)Data Guard 管理クライアントコンソールを用いて
Data Guard Brokerに接続

dgmgrl
DGMGRL>connect /

(2)Data Guard Broker プライマリDBの定義を作成

DGMGRL> CREATE CONFIGURATION 'DGSolution' AS PRIMARY DATABASE IS
              'ORA111' CONNECT IDENTIFIER IS ora111.world;

(3)Data Guard Broker スタンバイDBの定義を作成

DGMGRL> ADD DATABASE 'ORA111W' AS CONNECT IDENTIFIER IS
                ora111w.world MAINTAINED AS PHYSICAL;

(4)Data Guard 構成の確認

DGMGRL> SHOW CONFIGURATION VERBOSE

実行結果)

 Configuration
    Name:                DGSolution
    Enabled:             NO ← Configurationの状態が"NO"になっている
    Protection Mode:     MaxAvailability
    Databases:
      ORA111  - Primary database
      ORA111W - Physical standby database

 Fast-Start Failover: DISABLED
 
 Current status for "DGSolution":
 DISABLED←”構成を有効化する必要がある"

(5)Data Guard Brokerのパラメータの設定
今回は以下のパラメータを設定します。
※ファスト・スタート・フェイルオーバーが実行できるように、
データベースを高可用性モードに変更できるように、Data Gaurd Broker
REDO転送モードをSYNCにしてLGWR同期転送モードにします。

DGMGRL> EDIT DATABASE 'ORA111' SET PROPERTY 'LogXptMode'='SYNC';
DGMGRL> EDIT DATABASE 'ORA111W' SET PROPERTY 'LogXptMode'='SYNC';

※検証のためにREDOログファイルのレースレベルを以下に様に設定します

DGMGRL> EDIT DATABASE 'ORA111' SET PROPERTY LogArchiveTrace='16383';
DGMGRL> EDIT DATABASE 'ORA111W' SET PROPERTY LogArchiveTrace='16383';

(6)Data Guard構成の有効化

DGMGRL> ENABLE CONFIGURATION;

実行結果)

Enabled.

(7)Data Guard 構成の確認
実行結果)

  Configuration
    Name:                DGSolution
    Enabled:             YES ←’YES’に変更されている
    Protection Mode:     MaxAvailability
    Databases:
      ORA111  - Primary database
      ORA111W - Physical standby database

  Fast-Start Failover: DISABLED

  Current status for "DGSolution":
  SUCCESS←”プライマリDB、スタンバイDBともにDataGuard構成OK"

※参考:データベースの状態を確認した時
DGMGRL>show database verbose ‘[Data Guard構成作成時に定義したDB名]’
実行例)

show database verbose 'ORA111W'

それでは、Data Guard Brokerを利用してWindows/Linux混在環境での
スイッチオーバー/スイッチバックの動作検証を行います。

2.検証:文字列変換の動作の検証
■検証概要
[検証内容]
当該環境構築時には絶対パスの違いを考慮し、以下のように変換定義を定義
しています。このパラメータを定義しない状態(null値)で正常に
スイッチオーバー/スイッチバックが実行出来るかを検証し、Windows/Linux
の混在環境の親和性について検証します。

[対象パラメータ]

ALTER SYSTEM SET db_file_name_convert='c:appora11106oradata
  ora111w','/app/ora11106/oradata/ora111' SCOPE=SPFILE;
ALTER SYSTEM SET log_file_name_convert='c:appora11106oradata
  ora111w','/app/ora11106/oradata/ora111' SCOPE=SPFILE;

[検証方法]
・プライマリDB、スタンバイDBの初期パラメータのdb_file_name_convertと
og_file_name_convertをコメントアウト
・Data Guard Broker のプロパティ値をnull値に変更
例)

DGMGRL> EDIT DATABASE 'ORA111' SET PROPERTY 'DbFileNameConvert'='';
DGMGRL> EDIT DATABASE 'ORA111' SET PROPERTY 'LogFileNameConvert'='';

[検証ケース]
(1)検証ケース:文字列変換を指定
・db_file_name_convert=’c:appora11106oradataora111w’,
‘/app/ora11106/oradata/ora111′
・log_file_name_convert=’c:appora11106oradataora111w’,
‘/app/ora11106/oradata/ora111’

(2)検証ケース:文字列変換を指定しない
・db_file_name_convert=”
・log_file_name_convert=”

[検証結果]
(1)検証ケース:文字列変換を指定

[コマンド]

DGGMRL>SWITCHOVER TO 'ORA111W'

[実行結果]
スイッチオーバー/スイッチバックを数回実行しても正常動作
但し、db_file_name_convertとlog_file_name_convertの定義によるものか
はこのケースでは不明確

[Alert.log--------------------------------------------------------] 
DGMGRL> switchover to 'ORA111W'
 現在スイッチオーバーを実行しています。お待ちください...
 新しいプライマリ・データベース"ORA111W"がオープン中です...
 操作上、インスタンス"ora111" (データベース"ORA111") を停止する必要
 があります
 インスタンス"ora111"の停止中...
 ORA-01109: データベースがオープンされていません。

 データベースがディスマウントされました。
 ORACLEインスタンスがシャットダウンされました。
 操作上、インスタンス"ora111" (データベース"ORA111") を起動する必要
 があります
 インスタンス"ora111"の起動中...
 データベースに接続できません
 ORA-12514: TNS: リスナーは接続記述子でリクエストされたサービスを現
 在認識していません

 失敗しました。
 You are no longer connected to ORACLE
 Please connect again.
 インスタンス"ora111"を起動できません
 インスタンス"ora111"を手動で起動する必要があります

 You are no longer connected to ORACLE
 Please connect again.
 スイッチオーバーに成功しました。新しいプライマリは"ORA111W"です
[-----------------------------------------------------------------]
/-------------------------------------------------------------------
  ※ORA-01109:スタンバイDBはマウントの状態で待機しているため、
    このメッセージが表示される
  ※ORA-12514:新プライマリDBからORA-12514が出るがこの時に、
    新スタンバイDBがシャットダウン中のためこのメッセージが表示される
--------------------------------------------------------------------/

(2)検証ケース:変換文字列指定無し
[コマンド]

DGGMRL>SWITCHOVER TO 'ORA111W'

[検証結果]
スイッチオーバー/スイッチバックを数回実行しても正常動作
⇒DataGuardで用いるDBファイルとLOGファイルの変換パラメータを使わない
でも正常動作出来ることから、LinuxとWindowsの違いである絶対パス表記
の違いは意識する必要がないことが分かりました。

[アラートログの内容]
以下はアラートログより読み取れるData Guard Brokerから発行される
コマンド・メッセージの流れです。変換文字列を定義しなくても障害が発生せ
ず順序良くコマンドが発行され、スイッチオーバーが実行出来ていることが
分かります。

 (プライマリDB)               |(スタンバイDB)
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    [Data Guard Brokerからスイッチオーバーコマンド発行]
                                |
 ※スイッチオーバーコマンド     |※管理リカバリモード停止
                                |
 ※アーカイブログファイル出力   |
                                |
 ※プロセスのシャットダウン     |
                                |※スイッチオーバーコマンド
 ※スタンバイDB REDOファイル作成|
                                |
 ※REDO転送定義のクリア         |
                                |(新プライマリDB)
                                |^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                |※アーカイバ スタート
 ※アーカイブログファイル出力   |
                                |※初期パラメータ(プライマリDB)
 ※プロセスのシャットダウン     |
                                |※データベース オープン
 ※インスタンスのシャットダウン |
                                |
         ↓↓↓↓↓↓           |
「手動にて新スタンバイDBを起動」|
SQL>startp mount                |
         ↓↓↓↓↓↓           |
                                |
 ※インスタンス起動(マウント) |
                                |
 ※初期パラメー設定             |
 (プライマリDB)               |
                                |
 ※プライマリDB⇒スタンバイDB   |
                                |
 (新スタンバイDB)             |
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|
 ※管理リカバリモード開始       |

3.検証まとめ
・Data Guard Brokerの管理において、Windows と Linux環境ではさほど
意識することなく運用が出来きました。

・Oracle10gではスイッチオーバー/スイッチバック動作に不安定な部分が
合ったが、構築・動作において11gでは安定性が向上したように感じ取ら
れます。(10gのBUGFIXの影響)

今週はここまで

次回はファスト・スタート・フェイルオーバー時の変更点について検証
します。

季節の変わり目でオフィスの室温設定が難しい 恵比寿にて