Data Guard:フィジカル・スタンバイ・データベースへのスイッチオーバー(11g)

1. プライマリ・データベース(PROD)でスイッチオーバー(To Standby)

検証環境:

Primary database : PROD
Standby database : PRODSTB

1.1 プライマリ・データベースがスタンバイ・ロールにスイッチオーバーできるかを確認

TO STANDBY/SESSIONS ACTIVEの場合は切り替え可能となる。

PROD(SYS)> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS
--------------------
SESSIONS ACTIVE
1.2 プライマリ・データベースでスイッチオーバー
PROD(SYS)> alter database commit to switchover to physical standby with  session shutdown;

Database altered.
1.3 元のプライマリ・データベース(PROD)を停止してマウントする
PROD(SYS)> shutdown immediate
ORA-01507: database not mounted

ORACLE instance shut down.
PROD(SYS)> startup mount;
ORACLE instance started.

Total System Global Area  368263168 bytes
Fixed Size                  1313456 bytes
Variable Size             306185552 bytes
Database Buffers           54525952 bytes
Redo Buffers                6238208 bytes
Database mounted.
PROD(SYS)> select name, db_unique_name, open_mode, database_role from v$database;

NAME      DB_UNIQUE_NAME                 OPEN_MODE  DATABASE_ROLE
--------- ------------------------------ ---------- ----------------
PROD      PROD                           MOUNTED    PHYSICAL STANDBY

PROD(SYS)>

2. プライマリロールへ切り替えるスタンバイ(PRODSTB)でスイッチオーバー(TO PRIMARY)

2.1 プライマリロールへ切り替えられるかを確認

TO PRIMARY/SESSIONS ACTIVEの場合は切り替え可能となる。

PRODSTB(SYS)> SELECT SWITCHOVER_STATUS FROM V$DATABASE; 

SWITCHOVER_STATUS
--------------------
SESSIONS ACTIVE
2.2 スタンバイ(PRODSTB)でプライマリロールへスイッチオーバー
PRODSTB(SYS)> alter database commit to switchover to primary with session shutdown;

Database altered.

PRODSTB(SYS)> select name, db_unique_name, open_mode, database_role from v$database;

NAME      DB_UNIQUE_NAME                 OPEN_MODE  DATABASE_ROLE
--------- ------------------------------ ---------- ----------------
PROD      PRODSTB                        MOUNTED    PRIMARY

PRODSTB(SYS)>
2.3 新プライマリ(PRODSTB)をオープンする
PRODSTB(SYS)> alter database open;

Database altered.

PRODSTB(SYS)> select name, db_unique_name, open_mode, database_role from v$database;

NAME      DB_UNIQUE_NAME                 OPEN_MODE  DATABASE_ROLE
--------- ------------------------------ ---------- ----------------
PROD      PRODSTB                        READ WRITE PRIMARY

PRODSTB(SYS)>

3. 新スタンバイ(PROD)のログ適用サービスを開始

PROD(SYS)> alter database recover managed standby database using current logfile disconnect from session;

Database altered.

PROD(SYS)>

新スタンバイ(PROD)でログ適用サービスの確認
PROD(SYS)> select sequence#,archived,applied from v$archived_log where sequence# > 85;

 SEQUENCE# ARC APPLIED
---------- --- ---------
        86 YES YES
        87 YES YES
        87 YES YES
        86 YES YES
        88 YES NO
        88 YES YES
        89 YES NO
        89 YES YES
        90 YES YES
        90 YES NO
        91 YES IN-MEMORY

11 rows selected.

PROD(SYS)>

4. スイッチバック

プライマリ(PRODSTB)でスタンバイロールへスイッチバック

PRODSTB(SYS)> set lines 120
PRODSTB(SYS)> select name, db_unique_name, open_mode, database_role, switchover_status from v$database;

NAME      DB_UNIQUE_NAME                 OPEN_MODE  DATABASE_ROLE    SWITCHOVER_STATUS
--------- ------------------------------ ---------- ---------------- --------------------
PROD      PRODSTB                        READ WRITE PRIMARY          SESSIONS ACTIVE

PRODSTB(SYS)> alter database commit to switchover to physical standby with  session shutdown;

Database altered.

PRODSTB(SYS)> shutdown immediate
ORA-01507: database not mounted

ORACLE instance shut down.
PRODSTB(SYS)> startup mount;
ORACLE instance started.

Total System Global Area  368263168 bytes
Fixed Size                  1313456 bytes
Variable Size             301991248 bytes
Database Buffers           58720256 bytes
Redo Buffers                6238208 bytes
Database mounted.
PRODSTB(SYS)> select name, db_unique_name, open_mode, database_role, switchover_status from v$database;

NAME      DB_UNIQUE_NAME                 OPEN_MODE  DATABASE_ROLE    SWITCHOVER_STATUS
--------- ------------------------------ ---------- ---------------- --------------------
PROD      PRODSTB                        MOUNTED    PHYSICAL STANDBY TO PRIMARY

PRODSTB(SYS)>

スタンバイ(PROD)でプライマリロールへスイッチバック
PROD(SYS)> set lines 120
PROD(SYS)> select name, db_unique_name, open_mode, database_role, switchover_status from v$database;

NAME      DB_UNIQUE_NAME                 OPEN_MODE  DATABASE_ROLE    SWITCHOVER_STATUS
--------- ------------------------------ ---------- ---------------- --------------------
PROD      PROD                           MOUNTED    PHYSICAL STANDBY TO PRIMARY

PROD(SYS)> alter database commit to switchover to primary with session shutdown;

Database altered.

PROD(SYS)> alter database open;

Database altered.

PROD(SYS)> select name, db_unique_name, open_mode, database_role, switchover_status from v$database;

NAME      DB_UNIQUE_NAME                 OPEN_MODE  DATABASE_ROLE    SWITCHOVER_STATUS
--------- ------------------------------ ---------- ---------------- --------------------
PROD      PROD                           READ WRITE PRIMARY          TO STANDBY

PROD(SYS)>

スタンバイ(PROD)でログ適用サービスを開始
PRODSTB(SYS)> alter database recover managed standby database using current logfile disconnect from session;

Database altered.

PRODSTB(SYS)> select name, db_unique_name, open_mode, database_role, switchover_status from v$database;

NAME      DB_UNIQUE_NAME                 OPEN_MODE  DATABASE_ROLE    SWITCHOVER_STATUS
--------- ------------------------------ ---------- ---------------- --------------------
PROD      PRODSTB                        MOUNTED    PHYSICAL STANDBY NOT ALLOWED

PRODSTB(SYS)> select thread#, low_sequence#, high_sequence# from v$archive_gap; --# ギャップがあるかどうかを確認

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