Oracle11g DataGuard新機能 その3

投稿日: 2008年4月09日

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

先週に引き続き、「Oracle11g DataGuard新機能」について検証します。
今週は Oracle社がサポートするDataGuard構成での構築検証をします。

1.検証の目的
構築検証では以下の内容をポイントに検証します
■検証ポイント
・ マルチプラットフォームでの構築の注意点
・ マルチプラットフォームでプライマリDBとスタンバイDBとの整合性

2.LinuxとWindowsが混在した組合せでOracle11g DataGuardの構築
今回の検証では、Oracle社がサポートする構成として
Linux x86(32bit)⇔ Windows x86(32bit)のDataGuard構成を取り上げます。

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

[Oracle社がサポートする構成]
Linux x86(32bit)             ⇔ Microsoft Windows x86(32bit)
(プライマリDB)                  (スタンバイDB)
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

それでは構築してみましょう。

構築は以下の手順で行います。
これはプライマリDBの停止時間を最小にするRMANを用いたスタンバイDBの構築
方法です。

■構築ステップ
[プライマリDB]
(1)プライマリDBの初期化パラメータ設定
(2)データベースのモード変更
(3)Listener,Tnsnamesの設定
(4)RMANを使用したバックアップ
(5)スタンバイDB用の制御ファイル作成
(6)パックアップピースをスタンバイDBへコピー

[スタンバイDB]
(7)スタンバイDBの初期化パラメータ設定
(8)データベースのモード変更
(9)Listener,Tnsnamesの設定
(10)RMANのバックアップピースからスタンバイDBを作成
(11)REDO認証の設定
(12)REDO転送の有効化
(13)アーカイブログの情報をスタンバイDBに適用

※Oracle11gで新しく追加された手順は、REDO認証による構成が必要になったと
ころです。

[ポイント1]
⇒(11)REDO認証の設定
※Oracle11gよりREDO転送時の認証構成が必要になりました。
・SSLプロトコル(Oracle Internet Directory,SSL用に設定した
Oracle Net接続、Oracleウォレットなど)
・リモート・パスワード・ファイル

のいずれかが必要です。

今回はリモート・パスワード・ファイルを使ってREDO転送の認証をします。

[ポイント2]
※LinuxとWindowsの混在環境で考慮すべきこと
db_file_name_convert/log_file_name_convertの設定:
プライマリDBとスタンバイDBが入れ替わる時、Linux / とWindow の絶対パス
表記の違いがあっても正常に指定するディレクトリが入れ替わるかどうか

影響するパラメータは以下の通りです。

環境例)
・Linuxのデータファイル・REDOログファイルの配置先:

 データファイル        /app/ora11106/oradata/ora111
 REDOLOGファイル       /app/ora11106/oradata/ora111
・Windowsのデータファイル・REDOログファイルの配置先:
 データファイル        C:appora11106oradataora111w
 REDOLOGファイル       C:appora11106oradataora111w

設定例)
log_archive_config=’dg_config=(ora111,ora111w)’
db_file_name_convert=(‘C:appora11106oradataora111w’,’/app/ora11106
/oradata/ora111′)
log_file_name_convert=(‘C:appora11106oradataora111w’,’/app/ora11106
/oradata/ora111′)

[参考]
・log_archive_config:
リモートの宛先へのREDOログの送信と、リモートのREDOログの受信を使用可
能または使用禁止にし、DataGuard構成に含まれる各データベースに対する
一意のデータベース名(DB_UNIQUE_NAME)を指定
・db_file_name_convert:
プライマリDB上の新規データファイル名を、スタンバイDB上のファイル名に
変換
・log_file_name_convert:
プライマリDB上の新規のログファイル名をスタンバイDB上のログファイル名
に変換

それではLinuxとWindowsの構成で構築します
■Linux x86(32bit)⇔Microsoft Windows x86(32bit)のDataGuard構築
[プライマリDB]
(1)プライマリDBの初期化パラメータ設定

(2)データベースのモードの変更
データベースを強制ロギングモード、アーカイブログモードに変更します。

SQL>ALTER DATABASE FORCE LOGGING;
SQL>ALTER DATABASE ARCHIVELOG;

(3)Listener,Tnsnamesの設定

(lisnter.ora)-------------------------------------------------------
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = ora111)
      (ORACLE_HOME = /app/ora11106/product/11.1.0/db_1)
      (GLOBAL_DBNAME = ora111.WORLD)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = chigasaki)(PORT = 1910))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )


(tnsnames.ora)------------------------------------------------------
ORA111.WORLD =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = chigasaki)(PORT = 1910))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ora111.world)
    )
  )

ORA111W.WORLD =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ebisu)(PORT = 1910))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ora111.world)
    )
  )

(4)RMANでのバックアップ
※プライマリDBをRMANでバックアップ

rman target / nocatalog

RMAN>run {
RMAN>configure backup optimization on;
RMAN>configure controlfile autobackup format for device type disk to
'/temp/rmancontrol_%F';
RMAN>backup as compressed backupset database format
'/temp/rman%d_%s_%p';
RMAN>crosscheck backup;}

(5)スタンバイDB用の制御ファイルの作成
今回の検証では以下のコマンドでスタンバイDBの制御ファイルを作成しました
RMAN>copy current controlfile for standby to ‘/tmp/rmansby_control01.
ctl’;
(6)パックアップピースをスタンバイDBへコピー
プライマリの配置先と同じ位置のディレクトリへバックアップピースを配置す

例)
(プライマリDB)        ⇒       (スタンバイDB)
/tmp/rmansby_control01          c:tmprmansby_control01.ctl
/tmp/rmanORA111_11_1            c:tmprmanORA111_11_1

[スタンバイDB]
(7)スタンバイDBの初期化パラメータの設定
(8)データベースモードの変更
プライマリDBと同様に、データベースを強制ロギングモード、アーカイブログ
モードに変更します。

SQL>ALTER DATABASE FORCE LOGGING;
SQL>ALTER DATABASE ARCHIVELOG;

(9)Listener,Tnsnamesの設定

(lisnter.ora)--------------------------------------------------------
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = ora111w)
      (ORACLE_HOME = C:appora11106product11.1.0db_1)
      (GLOBAL_DBNAME = ora111.WORLD)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ebisu)(PORT = 1910))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )


(tnsnames.ora)-------------------------------------------------------
ORA111.WORLD =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = chigasaki)(PORT = 1910))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ora111.world)
    )
  )

ORA111W.WORLD =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ebisu)(PORT = 1910))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ora111.world)
    )
  )

(10)RMANのバックアップピースからスタンバイDBを作成

rman target sys/*****@ORA111.WORLD nocatalog  AUXILIARY ora111w
RMAN>duplicate target database for standby nofilenamecheck;

(11)REDO認証の構成
Oracle11gよりDataGuard構成のREDO転送の時に認証構成を確立する必要があり
ます。SSLプロトコルまたは、リモート・ログイン・パスワードファイルのい
ずれかを使用することが出来ます。今回はSSLでの認証を使わないで、リモート
・パスワード・ファイルを利用します。リモート・ログイン・パスワード・
ファイルを使用するにはDataGuard構成の各メンバーを構成する必要がありま
す。

1)パスワード・ログイン・ファイルの位置(設定前)
※プライマリDB(Linux)
$ORACLE_HOME/dbs/orapw[インスタンス名].ora

※スタンバイDB(Windows)
$ORACLE_HOMEdatabasePWD[インスタンス名].ora

※注意点:
リモート・パスワード・ファイルはLinuxとWindowsで命名規則が違うので注意

例)
プライマリDB(Linux)           |  スタンバイDB(Windows)
$ORACLE_HOME/dbs/orapwora111.ora|
↓                              |
↓(RENAME)                    |
↓                              |
$ORACLE_HOME/dbs/PWDora111w.ora |
                  ⇒(コピー)⇒|⇒$ORACLE_HOMEdatabasePWDora111w.ora 
                                   (リモート・パスワード・ファイルは
                                    起動時に読み込みを行うためスタン
                                    バイDBの再起動が必要)

[参考]===============================================================
<リモート・パスワード・ファイルの設定が正しくない場合>
※プライマリDB(Linux)アラートログの内容

------------------------------------------------------------
Check that the primary and standby are using a password file
and remote_login_passwordfile is set to SHARED or EXCLUSIVE,
and that the SYS password is same in the password files.
      returning error ORA-16191
------------------------------------------------------------
このエラーの場合、以下の対処方法があります。
対処1)プライマリDBのリモート・パスワード・ファイルのコピーをスタンバ
        イDB用にRENAMEして配置しスタンバイDBを再起動する。
対処2)プライマリDBのSYSパスワードに違いがある可能性があるため、スタ
        ンバイDBとプライマリDBのSYSユーザのパスワードを同じ状態にして再度作
        り直す

=====================================================================

(12)REDO転送の有効化
初期パラメータを変更してREDO転送を有効化する
(プライマリDB)
log_archive_dest_state_2 を’defer’から’enable’に変更

SQL>alter system set log_archive_dest_state_2='enbable';

(13)アーカイブログの情報をスタンバイDBに適用
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SE
SSION;

■動作確認

(プライマリDB)               |(スタンバイDB)
※既存のREDO適用状態を確認する |
SQL>  SELECT SEQUENCE#,        |
      FIRST_TIME, NEXT_TIME    |
      FROM V$ARCHIVED_LOG      |
      ORDER BY SEQUENCE#;      |
                               |
 SEQUENCE# FIRST_TIM NEXT_TIME |
---------- --------- --------- |
         4 20-MAR-08 08-NOV-08 |
         5 08-NOV-08 08-NOV-08 |
         6 08-NOV-08 08-NOV-08 |
                               |
※既存のREDO適用状態を確認する |
SQL>  SELECT SEQUENCE#,        |
      FIRST_TIME, NEXT_TIME    |
      FROM V$ARCHIVED_LOG      |
      ORDER BY SEQUENCE#;      | SEQUENCE# FIRST_TIM NEXT_TIME
                               |---------- --------- ---------
                               |         4 20-MAR-08 08-NOV-08
                               |         5 08-NOV-08 08-NOV-08
                               |         6 08-NOV-08 08-NOV-08
                             ↓↓↓

(プライマリDB)               |(スタンバイDB)
※強制的ログスイッチを実行     |
SQL>ALTER SYSTEM SWITCH        |
    LOGFILE;                   |
⇒プライマリDBでアーカイブログ |
  ファイルが出力される         |
  例:SEQUENCE 7               |
                               |
SQL>SELECT SEQUENCE#,          |
    FIRST_TIME, NEXT_TIME FROM |
    V$ARCHIVED_LOG ORDER BY    |
    SEQUENCE#;                 |
                               |
 SEQUENCE# FIRST_TIM NEXT_TIME |
---------- --------- --------- |
         4 20-MAR-08 08-NOV-08 |
         5 08-NOV-08 08-NOV-08 |
         6 08-NOV-08 08-NOV-08 |
         7 08-NOV-08 08-NOV-08 |
        ~~                     |※既存のREDO適用状態を確認する
                               |SQL>SELECT SEQUENCE#, FIRST_TIME,
                               |    NEXT_TIME FROM V$ARCHIVED_LOG 
                               |    ORDER BY SEQUENCE#;
                               |
                               |SEQUENCE# FIRST_TIM NEXT_TIME
                               |---------- --------- ---------
                               |         4 20-MAR-08 08-NOV-08
                               |         5 08-NOV-08 08-NOV-08
                               |         6 08-NOV-08 08-NOV-08
                               |         7 08-NOV-08 08-NOV-08
                               |        ~~↑
                               |アーカイブファイルが転送されている

以上のようにLinux x86(32bit)⇔Microsoft Windows x86(32bit) REDOログの
転送が正常に行えるていることが確認出来ました。

3.今回の検証結果
[Oracle11gよりREDO認証構成の設定が必要]
リモート・パスワード・ファイルを利用する時にはプライマリDBのリモー
ト・パスワード・ファイルのコピーをスタンバイDBに配置する必要がある。
リモート・パスワード・ファイルはWindowsとLinuxでは命名規則が違うので
注意が必要。

次回は、Data Guard Borker構成時の変更点を検証します。
あわせてLinuxとWindowsの混在 DataGuard環境でのスイッチオーバー検証を
行います。

今回はここまで!!
季節はずれの豪雨 恵比寿にて