Data Guard Broker のスイッチオーバーによる Grid Infrastucture の設定変化

# Data Guard Broker によるスイッチオーバー
　Data Guard Broker 環境でスイッチオーバーを実行するには DGMGRL ユーティリティから SWITCHOVER TO 文を実行します。下記の例ではプライマリ・データベース「O19A」からスタンバイ・データベース「O19S」にスイッチオーバーしています。

```SQL: スイッチオーバーの実行
DGMGRL> SWITCHOVER TO 'O19S'
現在スイッチオーバーを実行しています。お待ちください...
操作にはデータベース"O19S"への接続が必要です
接続中...
"O19S"に接続しました
SYSDBAとして接続しました。
新しいプライマリ・データベース"O19S"がオープン中です...
Oracle Clusterwareはデータベース"O19A"を再起動しています...
[W000 2025-04-21T20:53:27.122+09:00] Failed to attach to o19a.
<<途中省略>>
[W000 2025-04-21T20:53:43.148+09:00] Failed to attach to o19a.
"O19A"に接続しました
"O19A"に接続しました
スイッチオーバーに成功しました。新しいプライマリは"O19S"です
DGMGRL>
```

# Data Guard と Grid Infrastucture の関係
  データベースが Oracle Grid Infrastructure の管理下にある場合、Data Guard Broker も Oracle Grid Infrastructor を認識します。以下の例では VALIDATE DATABASE 文を実行しています。「クラスタウェアにより管理される」項目が YES になっています。

```SQL: VALIDATE DATABASE コマンドの実行
DGMGRL> VALIDATE DATABASE O19A

  データベース・ロール:  プライマリ・データベース

  スイッチオーバー可能:  はい

  クラスタウェアにより管理される:
    O19A:  YES
```


# 初期状態
Oracle Grid Infrastucture の登録状態を確認します。初期状態では以下のようになっています。

|srvctl オプション|説明|データベース O19A|データベース O19S|
|:---|:---|:---|:---|
|-db |一意データベース名|O19A|O19S|
|-role|ロール|PRIMARY|PHYSICAL_STANDBY|
|-startoption|起動オプション|open|mount|
|-policy|管理ポリシー|AUTOMATIC|AUTOMATIC|

  プライマリ・データベース「O19A」の Oracle Grid Infrastructure 設定を確認します。スタンバイ・データベース「O19S」では起動オプション（Start options）は mount になっています。

```Shell: プライマリ・データベース
$ srvctl config database -db o19a
Database unique name: O19A
Database name: O19A
Oracle home: /opt/oracle/product/19.0.0/dbhome_1
Oracle user: oracle
Spfile: +DATA/O19A/PARAMETERFILE/spfile.269.1102456437
Password file: +DATA/O19A/PASSWORD/orapwo19a
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Disk Groups: DATA,REDO1,REDO2
Services: srv01
OSDBA group:
OSOPER group:
Database instance: O19A
```

```Shell: スタンバイ・データベース
$ srvctl config database -db o19s
Database unique name: O19S
Database name: O19A
Oracle home: /opt/oracle/product/19.0.0/dbhome_1
Oracle user: oracle
Spfile:
Password file:
Domain:
Start options: mount
Stop options: immediate
Database role: PHYSICAL_STANDBY
Management policy: AUTOMATIC
Disk Groups: DATA,REDO1,REDO2
Services:
OSDBA group:
OSOPER group:
Database instance: O19S
```

# スイッチオーバー
　スイッチオーバーを行うと Oracle Grid Indrastructure に登録されたデータベース設定のうち起動オプション（Start options）オプションとロール（Database role）オプションが変更されます。

```Shell: 新プライマリ・データベース（O19S）
$ srvctl config database -db o19s
Database unique name: O19S
Database name: O19A
Oracle home: /opt/oracle/product/19.0.0/dbhome_1
Oracle user: oracle
Spfile:
Password file:
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Disk Groups: DATA,REDO1,REDO2
Services:
OSDBA group:
OSOPER group:
Database instance: O19S
```

```Shell: 新スタンバイ・データベース（O19A）
$ srvctl config database -db o19a
Database unique name: O19A
Database name: O19A
Oracle home: /opt/oracle/product/19.0.0/dbhome_1
Oracle user: oracle
Spfile: +DATA/O19A/PARAMETERFILE/spfile.269.1102456437
Password file: +DATA/O19A/PASSWORD/orapwo19a
Domain:
Start options: mount
Stop options: immediate
Database role: PHYSICAL_STANDBY
Management policy: AUTOMATIC
Disk Groups: DATA,REDO1,REDO2
Services: srv01
OSDBA group:
OSOPER group:
Database instance: O19A
```

# スタンバイ・インスタンスをオープン
  スタンバイ・データベース・インスタンスを OPEN READ ONLY ステータスに移行します。Data Guard Broker 環境では ALTER DATABASE MANAGED STANDBY DATABASE 文を実行しなくてもスタンバイ・データベース・インスタンスを OPEN READ ONLY WITH APPLY モード（Active Data Guard）に移行できます。

```SQL: インスタンスを OPEN READ ONLY モードへ変更
SQL> ALTER DATABASE OPEN READ ONLY;

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

SQL> SELECT i.STATUS, d.OPEN_MODE FROM V$INSTANCE i, V$DATABASE d;

STATUS       OPEN_MODE
------------ --------------------
OPEN         READ ONLY WITH APPLY
```

# スイッチオーバーふたたび
　スタンバイ・データベースを OPEN READ ONLY に変更した状態で再びスイッチオーバーを行います。プライマリ・データベースは O19A、スタンバイ・データベースが O19S に戻ります。処理が完了したら Grid Infrastructure の設定を確認します。

```SQL: スイッチオーバーを実行
DGMGRL> SWITCHOVER TO 'O19A'
現在スイッチオーバーを実行しています。お待ちください...
新しいプライマリ・データベース"O19A"がオープン中です...
Oracle Clusterwareはデータベース"O19S"を再起動しています...
[W000 2025-04-21T20:58:56.016+09:00] Failed to attach to o19s.
<<途中省略>>
[W000 2025-04-21T20:59:11.049+09:00] Failed to attach to o19s.
"O19S"に接続しました
"O19S"に接続しました
スイッチオーバーに成功しました。新しいプライマリは"O19A"です

DGMGRL> SHOW CONFIGURATION

構成 - dg1_config

  保護モード: MaxPerformance
  メンバー:
  O19A - プライマリ・データベース
    O19S - フィジカル・スタンバイ・データベース

ファスト・スタート・フェイルオーバー:  Disabled

構成ステータス:
SUCCESS   (ステータスは19秒前に更新されました)
```

```Shell: 新プライマリ・データベース（O19A）の属性確認
$ srvctl config database -db o19a
Database unique name: O19A
Database name: O19A
Oracle home: /opt/oracle/product/19.0.0/dbhome_1
Oracle user: oracle
Spfile: +DATA/O19A/PARAMETERFILE/spfile.269.1102456437
Password file: +DATA/O19A/PASSWORD/orapwo19a
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Disk Groups: DATA,REDO1,REDO2
Services: srv01
OSDBA group:
OSOPER group:
Database instance: O19A
```

```Shell: 新スタンバイ・データベース（O19S）の属性確認
$ srvctl config database -db o19s
Database unique name: O19S
Database name: O19A
Oracle home: /opt/oracle/product/19.0.0/dbhome_1
Oracle user: oracle
Spfile:
Password file:
Domain:
Start options: read only  ← 変わっている
Stop options: immediate
Database role: PHYSICAL_STANDBY
Management policy: AUTOMATIC
Disk Groups: DATA,REDO1,REDO2
Services:
OSDBA group:
OSOPER group:
Database instance: O19S
```

　OPEN READ ONLY モードのスタンバイ・データベースからスイッチオーバーすると、新スタンバイ・データベースも OPEN READ ONLY モードになるように Grid Infrastructure の属性が変化することがわかります。

Author: Noriyoshi Shinoda / Date: April 22, 2025