Oracle Active Data Guardのロール切り替え

1. プライマリデータベースからスタンバイデータベースへの切り替え

Oracle Data Guardの構成では、プライマリデータベースは一つのみですが、スタンバイデータベースは複数存在できます。そのため、ロールの切り替え操作はまずプライマリからスタンバイへ行います。

1.1 プライマリロールの切り替え状態の確認

プライマリデータベースで現在のロールと切り替えの準備状態を確認します。

SQL> select name, database_role, switchover_status from v$database;

NAME                      DATABASE_ROLE    SWITCHOVER_STATUS
------------------------- ---------------- --------------------
PRIMARY_DB                PRIMARY          TO STANDBY

1.2 プライマリからスタンバイへの正常な切り替えコマンド

プライマリデータベースを物理スタンバイデータベースに切り替えます。

SQL> alter database commit to switchover to physical standby;

Database altered.

1.3 切り替え後の操作

データベースをシャットダウンし、マウント状態で再起動します。その後、ロールの状態を確認します。

SQL> shutdown abort
ORACLE instance shut down.

SQL> startup mount;
ORACLE instance started.

# ロール切り替え後の状態を確認
SQL> select name, database_role, switchover_status from v$database;

NAME                      DATABASE_ROLE    SWITCHOVER_STATUS
------------------------- ---------------- --------------------
PRIMARY_DB                PHYSICAL STANDBY RECOVERY NEEDED

# 保護モードとレベルを確認
SQL> select name, database_role, protection_mode, protection_level from v$database;

NAME                      DATABASE_ROLE    PROTECTION_MODE      PROTECTION_LEVEL
------------------------- ---------------- -------------------- --------------------
PRIMARY_DB                PHYSICAL STANDBY MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY

1.4 異常時の切り替えコマンド

「TO STANDBY」の状態でセッションがアクティブな場合、以下のコマンドで強制的に切り替えを実行できます。その後、上記の切り替え後の手順を続けます。

SQL> alter database commit to switchover to physical standby with session shutdown;

2. スタンバイデータベースからプライマリデータベースへの切り替え

2.1 スタンバイロールの切り替え状態の確認

スタンバイデータベースで現在のロールと切り替えの準備状態を確認します。

SQL> select name, database_role, switchover_status from v$database;

NAME      DATABASE_ROLE    SWITCHOVER_STATUS
--------- ---------------- --------------------
STANDBY_DB      PHYSICAL STANDBY TO PRIMARY

2.2 スタンバイからプライマリへの切り替えコマンド

スタンバイデータベースをプライマリデータベースに切り替えます。

SQL> alter database commit to switchover to primary;

Database altered.

2.3 切り替え後の操作

ロールの状態を確認し、インスタンスの状態をチェックします。その後、データベースをOPENモードで起動します。

# ロール切り替え後の状態を確認
SQL> select name, database_role, switchover_status from v$database;

NAME      DATABASE_ROLE    SWITCHOVER_STATUS
--------- ---------------- --------------------
STANDBY_DB      PRIMARY          NOT ALLOWED

# 保護モードとレベルを確認
SQL> select name, database_role, protection_mode, protection_level from v$database;

NAME      DATABASE_ROLE    PROTECTION_MODE      PROTECTION_LEVEL
--------- ---------------- -------------------- --------------------
STANDBY_DB      PRIMARY          MAXIMUM PERFORMANCE  UNPROTECTED

# スタンバイからプライマリに切り替えた後のインスタンス状態
SQL> select instance_name, status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
stddb            MOUNTED

# データベースをOPENモードで起動
SQL> alter database open;

Database altered.

# 切り替え後の保護モードとレベルを再度確認
SQL> select database_role, protection_mode, protection_level from v$database;

DATABASE_ROLE    PROTECTION_MODE      PROTECTION_LEVEL
---------------- -------------------- --------------------
PRIMARY          MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE

3. 新しいスタンバイデータベースのログ適用サービスの起動

元のプライマリデータベースは現在スタンバイとして動作しています。データベースのオープンモードを確認します。

SQL> select name, open_mode from v$database;

NAME                      OPEN_MODE
------------------------- --------------------
PRIMARY_DB                MOUNTED

データベースをOPENモードで起動します。

SQL> alter database open;

Database altered.

データベースのログ適用サービスを起動します。

SQL> alter database recover managed standby database using current logfile disconnect;
Database altered.

# データベースのオープンモードを確認
SQL> select name, open_mode from v$database;

NAME                      OPEN_MODE
------------------------- --------------------
PRIMARY_DB                READ ONLY WITH APPLY

これで、プライマリとスタンバイのロール切り替えが完了しました。

タグ: Oracle Active Data Guard Data Guard ロール切り替え 高可用性

5月25日 14:21 投稿