実機検証:DataGuard スイッチオーバー(Switchovers)

1 検証目的

Data Guardスイッチオーバー練習

2 システム要件

Oracleバージョン:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi

Primary DB:rh-ora10g-s01(vmware環境):
OS:RH Linux AS3

Standby DB:rh-ora10g-s02(vmware環境):
OS:RH Linux AS3

3 ロール推移後にData Guard構成が正しく動作できるかどうかを事前に確認する。

3.1 現行Primary DBでStandbyロール設定を確認

Standby Redo Log構成

SQL> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;

    GROUP#    THREAD#  SEQUENCE# ARCHIVED  STATUS
---------- ---------- ---------- --------- ------------------------------
         4          0          0 YES       UNASSIGNED
         5          0          0 YES       UNASSIGNED
         6          0          0 YES       UNASSIGNED
SQL>

スタンバイに推移するためのFAL_SERVER,FAL_CLIENT
SQL> show parameter fal_

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
fal_client                           string                            feng-p
fal_server                           string                            feng-s
SQL>

スイッチオーバー後、feng-pがスタンバイロールで動作するため、FAL_CLIENTになる。

STANDBY_FILE_MANAGEMENT

SQL> show parameter standby_file_management

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
standby_file_management              string                            AUTO
SQL>

3.2 現行Standby DBでPrimaryロール設定を確認

Primaryロールに推移するため、ログ転送サービス設定の確認

SQL> show parameter log_archive_dest_

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
log_archive_dest_1                   string                            location=/u03/oradata/feng/arc
                                                                       h valid_for=(all_logfiles,all_
                                                                       roles)
log_archive_dest_10                  string
log_archive_dest_2                   string                            service=feng-p optional lgwr s
                                                                       ync affirm valid_for=(online_l
                                                                       ogfiles,primary_role)
log_archive_dest_3                   string
log_archive_dest_4                   string
log_archive_dest_5                   string
log_archive_dest_6                   string

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
log_archive_dest_7                   string
log_archive_dest_8                   string
log_archive_dest_9                   string
log_archive_dest_state_1             string                            enable
log_archive_dest_state_10            string                            enable
log_archive_dest_state_2             string                            enable
log_archive_dest_state_3             string                            enable
log_archive_dest_state_4             string                            enable
log_archive_dest_state_5             string                            enable
log_archive_dest_state_6             string                            enable
log_archive_dest_state_7             string                            enable

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
log_archive_dest_state_8             string                            enable
log_archive_dest_state_9             string                            enable

4 スイッチオーバーを実行できるかどうかを確認

SESSIONS ACTIVEの状態になっているので、アクティブなユーザーセッションがあると分かった。

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
------------------------------------------------------------
SESSIONS ACTIVE

SQL>

JOB QUEUEに関連するプロセスが存在しているので、一時に停止させる。
SQL> SELECT SID, PROCESS, PROGRAM FROM V$SESSION WHERE TYPE = 'USER' AND SID <> (SELECT DISTINCT SID FROM V$MYSTAT);

       SID PROCESS                              PROGRAM
---------- ------------------------------------ ------------------------------------------------------------
       128 1804                                 oracle@rh-ora10g-s01 (J000)

SQL> show parameter JOB_QUEUE_PROCESSES

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
job_queue_processes                  integer                           10
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

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

SQL>SELECT SID, PROCESS, PROGRAM FROM V$SESSION WHERE TYPE = 'USER' AND SID <> (SELECT DISTINCT SID FROM V$MYSTAT);

レコードが選択されませんでした。

SQL>

TO STANDBYなので、スタンバイに推移できる状態になった。
SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
------------------------------------------------------------
TO STANDBY

SQL>

5 プライマリ・データベースでスイッチオーバー

SQL> alter database commit to switchover to physical standby;

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

SQL>

6 元のプライマリ・インスタンスを停止して再起動する

SQL> shutdown immediate
ORA-01507: データベースがマウントされていません。

ORACLEインスタンスがシャットダウンされました。
SQL>
SQL> startup mount;
ORACLEインスタンスが起動しました。

Total System Global Area  209715200 bytes
Fixed Size                  2019640 bytes
Variable Size              88084168 bytes
Database Buffers          117440512 bytes
Redo Buffers                2170880 bytes
データベースがマウントされました。
SQL>

スイッチオーバー状態を確認
SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
------------------------------------------------------------
TO PRIMARY

SQL>

7 元スタンバイDBからプライマリロールへ推移

スイッチオーバー状態を確認

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
------------------------------------------------------------
TO PRIMARY

SQL>

スイッチオーバー
SQL> alter database commit to switchover to primary;

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

SQL>

Primaryロールに推移後、新Primary DBのスイッチオーバー状態を確認
SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
------------------------------------------------------------
TO STANDBY

SQL>

新Primary DBをオープン
SQL> alter database open;

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

SQL>

新Primary DBの保護モード確認
SQL> select protection_mode,protection_level from v$database;

PROTECTION_MODE                                              PROTECTION_LEVEL
------------------------------------------------------------ ------------------------------------------------------------
MAXIMUM AVAILABILITY                                         MAXIMUM AVAILABILITY

SQL>

8 新Standby DB(元Primary DB)でログ適用サービスを開始

SQL> alter database recover managed standby database disconnect from session;

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

SQL>

9 新Data Guard構成を確認

新Primary DBでログスイッチを実行

SQL> select sequence#, first_time, next_time from v$archived_log order by sequence#;

 SEQUENCE# FIRST_TI NEXT_TIM
---------- -------- --------
         6 08-08-12 08-08-13
         7 08-08-13 08-08-13
         8 08-08-13 08-08-13
         9 08-08-13 08-08-13
        10 08-08-13 08-08-13
        11 08-08-13 08-08-13
        12 08-08-13 08-08-13
        13 08-08-13 08-11-04
        14 08-11-04 08-11-04
        15 08-11-04 08-11-04
        16 08-11-04 08-11-04

 SEQUENCE# FIRST_TI NEXT_TIM
---------- -------- --------
        17 08-11-04 08-11-20
        18 08-11-20 08-11-21
        19 08-11-21 08-11-21
        20 08-11-21 08-11-21
        20 08-11-21 08-11-21

16行が選択されました。

SQL> alter system switch logfile;

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

SQL>  select sequence#, first_time, next_time from v$archived_log order by sequence#;

 SEQUENCE# FIRST_TI NEXT_TIM
---------- -------- --------
         6 08-08-12 08-08-13
         7 08-08-13 08-08-13
         8 08-08-13 08-08-13
         9 08-08-13 08-08-13
        10 08-08-13 08-08-13
        11 08-08-13 08-08-13
        12 08-08-13 08-08-13
        13 08-08-13 08-11-04
        14 08-11-04 08-11-04
        15 08-11-04 08-11-04
        16 08-11-04 08-11-04

 SEQUENCE# FIRST_TI NEXT_TIM
---------- -------- --------
        17 08-11-04 08-11-20
        18 08-11-20 08-11-21
        19 08-11-21 08-11-21
        20 08-11-21 08-11-21
        20 08-11-21 08-11-21
        21 08-11-21 08-11-21
        21 08-11-21 08-11-21

18行が選択されました。

SQL>

新Standby DB(元Primary DB)でログ転送されたかを確認
SQL> select sequence#, first_time, next_time from v$archived_log order by sequence#;

 SEQUENCE# FIRST_TI NEXT_TIM
---------- -------- --------
         7 08-08-13 08-08-13
         7 08-08-13 08-08-13
         8 08-08-13 08-08-13
         8 08-08-13 08-08-13
         9 08-08-13 08-08-13
         9 08-08-13 08-08-13
        10 08-08-13 08-08-13
        10 08-08-13 08-08-13
        11 08-08-13 08-08-13
        11 08-08-13 08-08-13
        12 08-08-13 08-08-13

 SEQUENCE# FIRST_TI NEXT_TIM
---------- -------- --------
        12 08-08-13 08-08-13
        13 08-08-13 08-11-04
        13 08-08-13 08-11-04
        14 08-11-04 08-11-04
        14 08-11-04 08-11-04
        15 08-11-04 08-11-04
        15 08-11-04 08-11-04
        16 08-11-04 08-11-04
        16 08-11-04 08-11-04
        17 08-11-04 08-11-20
        17 08-11-04 08-11-20

 SEQUENCE# FIRST_TI NEXT_TIM
---------- -------- --------
        18 08-11-20 08-11-21
        18 08-11-20 08-11-21
        19 08-11-21 08-11-21
        19 08-11-21 08-11-21
        20 08-11-21 08-11-21
        21 08-11-21 08-11-21

28行が選択されました。

SQL>

SEQUENCE# 21のログを転送された。

2008.11.21 1:35 by moc.todikiw.bup-elcaro|nosaJ#moc.todikiw.bup-elcaro|nosaJ
個人的な検証メモなので無断転載などをしないで下さい。

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License