Oracle Database Physical Data Guard スイッチオーバー手順（12cR1）

# はじめに

以下の続き

Oracle Database Physical Data Guard 作成手順（12cR1）
https://qiita.com/mon_tu/items/ca5d6b341835d262e3ff



首都オーディンにあるデータベース（odin）の災対環境として、イゼルローン要塞上にフィジカルスタンバイデータベース（iserlohn）が構成されている。
オーディンからイゼルローンへのスイッチオーバー、またスイッチバックを行う。




|項目  |プライマリ|スタンバイ|
|---   |---      |---|
|DB_NAME         |odin  |odin  |
|DB_UNIQUE_NAME  |odin  |iserlohn  |
|hostname | ol121p | ol121s |
|service_names | odin.us.oracle.com | iserlohn.us.oracle.com


# スイッチオーバーの実行


## プライマリ（オーディン）で事前検証

構成の確認

```
SQL> select * from v$dataguard_config;

DB_UNIQUE_NAME                 PARENT_DBUN                    DEST_ROLE         CURRENT_SCN     CON_ID
------------------------------ ------------------------------ ----------------- ----------- ----------
odin                           NONE                           PRIMARY DATABASE      4598308          0
iserlohn                       odin                           PHYSICAL STANDBY      4598430          0

```

スイッチオーバーの文にはVERIFYオプションがあり、スイッチオーバーに必要な多くの条件のチェックが実行される.
「Database altered.」が出力されれば問題なし。

```
SQL> ALTER DATABASE SWITCHOVER TO iserlohn VERIFY;
Database altered.
```

例えば、MRPを停止した状態で実行するとORA-16470が発生する。アラートログにも出力される。



```
SQL> ALTER DATABASE SWITCHOVER TO iserlohn VERIFY;
ALTER DATABASE SWITCHOVER TO iserlohn VERIFY
*
ERROR at line 1:
ORA-16470: Redo Apply is not running on switchover target
```

## スイッチオーバー


プライマリ・データベースでスイッチオーバーを開始する。

```
SQL> ALTER DATABASE SWITCHOVER TO iserlohn;

Database altered.
```

アラートログ。
プライマリ側は最後にabortでインスタンス停止される。

```プライマリのアラートログ
ALTER DATABASE SWITCHOVER TO iserlohn
Mon Sep 24 12:17:13 2018
Starting switchover [Process ID: 26118]

<中略>
Switchover: Primary controlfile converted to standby controlfile succesfully.
Switchover: Complete - Database shutdown required
Sending request(convert to primary database) to switchover target ISERLOHN
Switchover complete. Database shutdown required
USER (ospid: 26118): terminating the instance
Mon Sep 24 12:17:25 2018
Instance terminated by USER, pid = 26118
Completed: ALTER DATABASE SWITCHOVER TO iserlohn
Shutting down instance (abort)
License high water mark = 6
Mon Sep 24 12:17:25 2018
Instance shutdown complete
```


## 新プライマリ（イゼルローン要塞）データベースのオープン

新プライマリ側はマウント状態なのでデータベースをOPENする。


```
SQL> select * from v$dataguard_config;

DB_UNIQUE_NAME                 PARENT_DBUN                    DEST_ROLE         CURRENT_SCN     CON_ID
------------------------------ ------------------------------ ----------------- ----------- ----------
iserlohn                       NONE                           PRIMARY DATABASE            0          0
odin                           iserlohn                       UNKNOWN                     0          0
SQL> select DBID,NAME,LOG_MODE,OPEN_MODE,DATABASE_ROLE,FORCE_LOGGING,CURRENT_SCN from v$database;

      DBID NAME      LOG_MODE     OPEN_MODE            DATABASE_ROLE    FORCE_LOGGING                           CURRENT_SCN
---------- --------- ------------ -------------------- ---------------- --------------------------------------- -----------
 884158366 ODIN      ARCHIVELOG   MOUNTED              PRIMARY          YES                                               0

SQL> alter database open;

Database altered.

SQL> select DBID,NAME,LOG_MODE,OPEN_MODE,DATABASE_ROLE,FORCE_LOGGING,CURRENT_SCN from v$database;

      DBID NAME      LOG_MODE     OPEN_MODE            DATABASE_ROLE    FORCE_LOGGING                           CURRENT_SCN
---------- --------- ------------ -------------------- ---------------- --------------------------------------- -----------
 884158366 ODIN      ARCHIVELOG   READ WRITE           PRIMARY          YES                                         4700295

SQL>

```

## 新スタンバイ（オーディン）のデータベースのマウントとREDO適用の開始

新スタンバイ側はデータベースが停止しているので、再度接続し、MOUNT→MRPの起動を実施する。

```
SQL>  STARTUP MOUNT;
ORACLE instance started.

Total System Global Area  729808896 bytes
Fixed Size                  2928680 bytes
Variable Size             520097752 bytes
Database Buffers          201326592 bytes
Redo Buffers                5455872 bytes
Database mounted.
SQL>
SQL> alter database recover managed standby database disconnect;

Database altered.
```

それぞれのロールを確認する。

```
SQL> select * from v$dataguard_config;

DB_UNIQUE_NAME                 PARENT_DBUN                    DEST_ROLE         CURRENT_SCN     CON_ID
------------------------------ ------------------------------ ----------------- ----------- ----------
iserlohn                       NONE                           PRIMARY DATABASE      4702359          0
odin                           iserlohn                       PHYSICAL STANDBY      4701868          0
```

# スイッチバックの実行（元のロールに戻す）

逆をするだけなのでさらっと。

## プライマリ（イゼルローン要塞）で事前検証

```
SQL> ALTER DATABASE SWITCHOVER TO odin VERIFY;

Database altered.
```

## スイッチオーバー

```
SQL> ALTER DATABASE SWITCHOVER TO odin ;

Database altered.
```

## 新プライマリ（オーディン）データベースのオープン

```
SQL> ALTER DATABASE OPEN;

Database altered.
```


## 新スタンバイ（イゼルローン要塞）のデータベースのマウントとREDO適用の開始

```
SQL> STARTUP MOUNT
ORACLE instance started.

Total System Global Area  729808896 bytes
Fixed Size                  2928680 bytes
Variable Size             566235096 bytes
Database Buffers          155189248 bytes
Redo Buffers                5455872 bytes
Database mounted.
SQL> alter database recover managed standby database disconnect;

Database altered.
```

ロールの確認。

```
SQL> select * from v$dataguard_config;

DB_UNIQUE_NAME                 PARENT_DBUN                    DEST_ROLE
------------------------------ ------------------------------ -----------------
CURRENT_SCN     CON_ID
----------- ----------
odin                           NONE                           PRIMARY DATABASE
    4804578          0

iserlohn                       odin                           PHYSICAL STANDBY
    4803587          0
```

# 参考
## 参考マニュアル

Oracle® Data Guard概要および管理 12c リリース1 (12.1)　B71304-07
9.2.1 フィジカル・スタンバイ・データベースへのスイッチオーバーの実行
https://docs.oracle.com/cd/E57425_01/121/SBYDB/role_management.htm