フィジカルData Guardの構成

本ページではフィジカルデータガード+保護モード:最大パフォーマンスの構築手順をまとめています。

構成

本構成ではプライマリ、スタンバイ共に一つのサーバ内で構成します。
項目 プライマリDB スタンバイDB
OS WindowsXp Professional x86
oracleのバージョン 10.2.0.4
ORACLE_HOME E:\oracle\product\10.2.0\db_1
データファイル等の領域 E:\oracle\oradata\ORCL102 E:\oracle\oradata\ORCL102S
アーカイブログ領域 E:\oracle\product\10.2.0\flash_recovery_area\ORCL102 E:\oracle\product\10.2.0\flash_recovery_area\ORCL102S
DB_NAME ORCL102 ORCL102
INSTANCE_NAME ORCL102 ORCL102S※
※同一サーバ内の同一のORACLE_HOMEから起動するデータベースは同じINSTANCE_NAMEやORACLE_SIDを使用できないためORCL102とORCL102Sに分ける


手順概要

No 手順
1 スタンバイDB用ディレクトリの作成
2 スタンバイDBのwindowsサービス作成
3 スタンバイ制御ファイルの作成
4 プライマリDB、LISTENERの停止
5 listener.ora,tnsnames.oraの修正
6 プライマリDBのデータファイルをスタンバイ用としてコピー
7 初期化パラメータファイルの修正
8 LISTENERの起動
9 スタンバイDBのmount
10 スタンバイREDOの作成
11 プライマリDBの起動
12 REDOのリアルタイム適用の開始
13 REDOのリアルタイム適用の終了
14 プライマリDB、スタンバイDBの停止

1 スタンバイDB用ディレクトリの作成

スタンバイDBが利用するフォルダを作成します。
C:\>mkdir E:\oracle\admin\ORCL102S\adump

C:\>mkdir E:\oracle\admin\ORCL102S\bdump

C:\>mkdir E:\oracle\admin\ORCL102S\cdump

C:\>mkdir E:\oracle\admin\ORCL102S\udump

C:\>mkdir E:\oracle\oradata\ORCL102S

C:\>mkdir E:\oracle\product\10.2.0\flash_recovery_area\ORCL102S

2 スタンバイDB用のwindowsサービス作成

oradimコマンドによりスタンバイDBのサービスを作成します。 -intpwdで指定するパスワード認証用のパスワードはプライマリDBのSYSユーザと同じパスワードを指定します。 パスワードの設定が一致しない場合プライマリDBがスタンバイDBへREDOログ等を転送することができずORA-01031がアラートログに記録されます。
C:\>oradim -new -sid ORCL102S -intpwd change_on_install -pfile 'E:\oracle\product\10.2.0\db_1\database\initORCL102S.ora' -startmode manual
インスタンスが作成されました。
→Windows のサービス画面に「OracleServiceORCL102S」サービスが追加される

3 スタンバイ制御ファイルの作成

プライマリDBから、スタンバイ制御ファイルを作成します。
SYS@ORCL102 > ALTER DATABASE CREATE STANDBY CONTROLFILE
  2  AS 'E:\ORACLE\ORADATA\ORCL102S\CONTROL01.CTL' REUSE;

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

4 プライマリDB、LISTENERの停止

リスナーを停止します。以下の例では「LISTENER」という名前のリスナーを停止しています。
C:\>lsnrctl stop LISTENER

LSNRCTL for 32-bit Windows: Version 10.2.0.4.0 - Production on 21-3月 -2011 22:05:08

Copyright (c) 1991, 2007, Oracle.  All rights reserved.

(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=WIN1)(PORT=1521)))に接続中
コマンドは正常に終了しました。
sqlplusよりプライマリDBであるORCL102をimmediateモードで停止します。
SYS@ORCL102 > shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。

5 listener.ora,tnsnames.oraの修正

E:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\listener.oraにスタンバイDBを静的認識させるよう斜線部分を追加します。
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = ORCL102)
      (ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
    )
    (SID_DESC =
      (SID_NAME = ORCL102S)
      (ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = WIN1)(PORT = 1521))
    )
  )
E:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\tnsnames.oraに斜線部分のスタンバイDBへの接続定義を追加します。
ORCL102 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = WIN1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ORCL102)
    )
  )

ORCL102S =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = WIN1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ORCL102S)
    )
  )

6 プライマリDBのデータファイル、REDOログをスタンバイ用としてコピー

プライマリDBのデータファイル、、REDOログをスタンバイDB用のデータファイル配置ディレクトリにコピーします。制御ファイルはスタンバイ制御ファイルを使用するのでコピーは不要です。
C:\>copy E:\oracle\oradata\ORCL102\USERS01.DBF E:\oracle\oradata\ORCL102S\USERS01.DBF
        1 個のファイルをコピーしました。

C:\>copy E:\oracle\oradata\ORCL102\SYSAUX01.DBF E:\oracle\oradata\ORCL102S\SYSAUX01.DBF
        1 個のファイルをコピーしました。

C:\>copy E:\oracle\oradata\ORCL102\SYSTEM01.DBF E:\oracle\oradata\ORCL102S\SYSTEM01.DBF
        1 個のファイルをコピーしました。

C:\>copy E:\oracle\oradata\ORCL102\TEMP01.DBF E:\oracle\oradata\ORCL102S\TEMP01.DBF
        1 個のファイルをコピーしました。

C:\>copy E:\oracle\oradata\ORCL102\UNDOTBS01.DBF E:\oracle\oradata\ORCL102S\UNDOTBS01.DBF
        1 個のファイルをコピーしました。

C:\>copy E:\oracle\oradata\ORCL102\REDO01.LOG E:\oracle\oradata\ORCL102S\REDO01.LOG
        1 個のファイルをコピーしました。

C:\>copy E:\oracle\oradata\ORCL102\REDO02.LOG E:\oracle\oradata\ORCL102S\REDO02.LOG
        1 個のファイルをコピーしました。

C:\>copy E:\oracle\oradata\ORCL102\REDO03.LOG E:\oracle\oradata\ORCL102S\REDO02.LOG
        1 個のファイルをコピーしました。

なお、バックアップ対象の一覧は以下のSQLにより確認できます。
SELECT NAME FROM V$DATAFILE
SELECT NAME FROM V$TEMPFILE
SELECT MEMBER FROM V$LOGFILE

7 初期化パラメータファイルの修正

・プライマリDBの初期化パラメータファイル(E:\oracle\product\10.2.0\db_1\database\initORCL102.ora)の修正、追記
斜線部分がData Guardに関連するパラメータとなります。
audit_file_dest='E:\oracle\admin\ORCL102\adump'
background_dump_dest='E:\oracle\admin\ORCL102\bdump'
core_dump_dest='E:\oracle\admin\ORCL102\cdump'
user_dump_dest='E:\oracle\admin\ORCL102\udump'
compatible='10.2.0.1.0'
control_files='E:\oracle\oradata\ORCL102\control01.ctl'
db_block_size=8192
db_domain=''
db_file_multiblock_read_count=16
job_queue_processes=10
nls_language='JAPANESE'
nls_territory='JAPAN'
open_cursors=300
sga_target=300M
pga_aggregate_target=32M
undo_management='AUTO'
undo_tablespace='UNDOTBS01'
processes=150
remote_login_passwordfile='EXCLUSIVE'
log_archive_format='ARC%S_%R.%T'

##for Data Guard
db_name='ORCL102'
INSTANCE_NAME=orcl102
DB_UNIQUE_NAME=orcl102
log_archive_dest_1='LOCATION=E:\oracle\product\10.2.0\flash_recovery_area\ORCL102'
log_archive_dest_2='SERVICE=ORCL102S LGWR ASYNC REOPEN=60'
log_archive_dest_state_1=enable
log_archive_dest_state_2=enable
・ スタンバイDB用の初期化パラメータファイル(E:\oracle\product\10.2.0\db_1\database\initORCL102S.ora)の作成
斜線部分がData Guardに関連するパラメータとなります。ポイントは以下の点です。

- 同一ORACLE_HOMEを共有する構成のためINSTANCE_NAMEとDB_UNIQUE_NAMEはプライマリとは同じ名前を使うことができない
- プライマリとスタンバイでデータファイルのパスが異なるためXX_file_name_convertパラメータにてデータファイルとREDOログのパスを変更させている
audit_file_dest='E:\oracle\admin\ORCL102S\adump'
background_dump_dest='E:\oracle\admin\ORCL102S\bdump'
core_dump_dest='E:\oracle\admin\ORCL102S\cdump'
user_dump_dest='E:\oracle\admin\ORCL102S\udump'
compatible='10.2.0.1.0'
control_files='E:\oracle\oradata\ORCL102S\CONTROL01S.CTL'
db_block_size=8192
db_domain=''
db_file_multiblock_read_count=16
job_queue_processes=10
nls_language='JAPANESE'
nls_territory='JAPAN'
open_cursors=300
sga_target=300M
pga_aggregate_target=32M
undo_management='AUTO'
undo_tablespace='UNDOTBS01'
processes=150
remote_login_passwordfile='EXCLUSIVE'
log_archive_format='ARC%S_%R.%T'

##for Data Guard
db_name=ORCL102
INSTANCE_NAME=ORC102S
DB_UNIQUE_NAME=ORC102S
log_archive_dest_1='LOCATION=E:\oracle\product\10.2.0\flash_recovery_area\ORCL102S'
standby_archive_dest='E:\oracle\product\10.2.0\flash_recovery_area\ORCL102S'
log_archive_dest_state_1=enable
db_file_name_convert =('E:\oracle\oradata\ORCL102\',
                       'E:\oracle\oradata\ORCL102S\')
log_file_name_convert=('E:\oracle\oradata\ORCL102\',
                       'E:\oracle\oradata\ORCL102S\')

8 LISTENERの起動

listenerを起動させます。
C:\>lsnrctl start LISTENER

LSNRCTL for 32-bit Windows: Version 10.2.0.4.0 - Production on 21-3月 -2011 22:57:45

Copyright (c) 1991, 2007, Oracle.  All rights reserved.

tnslsnrを起動しています。お待ちください...

TNSLSNR for 32-bit Windows: Version 10.2.0.4.0 - Production
システム・パラメータ・ファイルはE:\oracle\product\10.2.0\db_1\network\admin\listener.oraです。
ログ・メッセージをE:\oracle\product\10.2.0\db_1\network\log\listener.logに書き込みました。
リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=WIN1)(PORT=1521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=WIN1)(PORT=1521)))に接続中
リスナーのステータス
------------------------
別名                      LISTENER
バージョン                TNSLSNR for 32-bit Windows: Version 10.2.0.4.0 - Production
開始日                    21-3月 -2011 22:57:46
稼働時間                  0 日 0 時間 0 分 3 秒
トレース・レベル          off
セキュリティ              ON: Local OS Authentication
SNMP                      OFF
パラメータ・ファイル      E:\oracle\product\10.2.0\db_1\network\admin\listener.ora
ログ・ファイル            E:\oracle\product\10.2.0\db_1\network\log\listener.log
リスニング・エンドポイントのサマリー...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=WIN1)(PORT=1521)))
サービスのサマリー...
サービス"ORCL102"には、1件のインスタンスがあります。
  インスタンス"ORCL102"、状態UNKNOWNには、このサービスに対する1件のハンドラがあります...
サービス"ORCL102S"には、1件のインスタンスがあります。
  インスタンス"ORCL102S"、状態UNKNOWNには、このサービスに対する1件のハンドラがあります...
コマンドは正常に終了しました。

9 スタンバイDBのmount

スタンバイDBを以下の手順でstandby モードでmountします。
C:\>set ORACLE_SID=ORCL102S

C:\>sqlplus

SQL*Plus: Release 10.2.0.4.0 - Production on 月 3月 21 22:59:50 2011

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

ユーザー名を入力してください: / as sysdba
アイドル・インスタンスに接続しました。

SYS@ORCL102S > STARTUP NOMOUNT;
ORACLEインスタンスが起動しました。

Total System Global Area| 314572800|bytes
Fixed Size              |   1296460|bytes
Variable Size           |  96470964|bytes
Database Buffers        | 209715200|bytes
Redo Buffers            |   7090176|bytes
SYS@ORCL102S > ALTER DATABASE MOUNT STANDBY DATABASE;

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

10 スタンバイREDOの作成

起動したスタンバイDB側でスタンバイREDOを作成します。 ポイントは以下の点です。

・ロググループにプライマリDBのREDOログで使われている番号は使えません。 既存のロググループ番号はv$logで確認できます。
・スタンバイREDOのサイズは プライマリDBのREDOログと同じサイズにします。

SYS@ORCL102S > ALTER DATABASE ADD STANDBY LOGFILE GROUP 11
  2  ('E:\ORACLE\ORADATA\ORCL102S\STANDBYREDO11.LOG') SIZE 512M;

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

SYS@ORCL102S > ALTER DATABASE ADD STANDBY LOGFILE GROUP 12
  2  ('E:\ORACLE\ORADATA\ORCL102S\STANDBYREDO12.LOG') SIZE 512M;

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

SYS@ORCL102S > ALTER DATABASE ADD STANDBY LOGFILE GROUP 13
  2  ('E:\ORACLE\ORADATA\ORCL102S\STANDBYREDO13.LOG') SIZE 512M;

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

11 プライマリDBの起動

プライマリDBを起動します。
C:\>set ORACLE_SID=ORCL102
C:\>sqlplus

SQL*Plus: Release 10.2.0.4.0 - Production on 月 3月 21 23:33:55 2011

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

ユーザー名を入力してください:  / as sysdba
アイドル・インスタンスに接続しました。

SYS@ORCL102 > startup
ORACLEインスタンスが起動しました。

Total System Global Area| 314572800|bytes
Fixed Size              |   1296460|bytes
Variable Size           |  96470964|bytes
Database Buffers        | 209715200|bytes
Redo Buffers            |   7090176|bytes
データベースがマウントされました。
データベースがオープンされました。
設定に誤りがなければこの状態でプライマリ側でアーカイブログを出力させるとスタンバイ側のstandby_archive_destパラメータで指定した ディレクトリにアーカイブログが自動転送されます。アーカイブログは以下のコマンドにより出力させることが可能です。
SYS@ORCL102 > alter system archive log current;

システムが変更されました。
アーカイブログがスタンバイ側に転送されるとスタンバイ側のv$archived_logに転送されたログが追加されます。 この時点ではアーカイブログは転送されただけの状態のためAPPLIED列はNO(未適用)となります。
SYS@ORCL102S > select sequence#,name,applied from v$archived_log;

 SEQUENCE#|NAME                                                                          |APPLIE
----------|------------------------------------------------------------------------------|------
        13|E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL102S\ARC00013_0744146573.001 |NO
        14|E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL102S\ARC00014_0744146573.001 |NO
        15|E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL102S\ARC00015_0744146573.001 |NO
        16|E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL102S\ARC00016_0744146573.001 |NO

12 REDOのリアルタイム適用の開始

スタンバイ側で以下のコマンドを実行することでリアルタイム適用が開始され、しばらくするとAPPLIEDがYESに変わります。
SYS@ORCL102S > ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

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

SYS@ORCL102S >  select sequence#,name,applied from v$archived_log;

 SEQUENCE#|NAME                                                                          |APPLIED
----------|------------------------------------------------------------------------------|-------
        13|E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL102S\ARC00013_0744146573.001 |YES
        14|E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL102S\ARC00014_0744146573.001 |YES
        15|E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL102S\ARC00015_0744146573.001 |YES
        16|E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL102S\ARC00016_0744146573.001 |YES

13 REDOのリアルタイム適用の終了

以下のコマンドでリアルタイム適用を即時停止することができます。
SYS@ORCL102S > ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

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

14 プライマリDB、スタンバイDBの停止

データガード環境での起動・停止は以下の順番で行います。

・起動
スタンバイDBの起動→プライマリDBの起動

・停止
プライマリDBの停止→スタンバイDBの停止

★ORACLE案件承ります