

# Oracle Data ata Guard のスイッチオーバー操作の実行
<a name="oracle-replication-switchover"></a>

*スイッチオーバー*では、プライマリデータベースとスタンバイデータベースとの間でロールが入れ替わります。スイッチオーバー中、元のプライマリデータベースはスタンバイロールに移行し、元のスタンバイデータベースはプライマリロールに移行します。

Oracle Data Guard 環境では、プライマリデータベースは 1 つ以上のスタンバイデータベースをサポートします。プライマリデータベースからスタンバイデータベースへ、マネージド型のスイッチオーバーベースのロール移行を実行できます。*スイッチオーバー*では、プライマリデータベースとスタンバイデータベースとの間でロールが入れ替わります。スイッチオーバー中、元のプライマリデータベースはスタンバイロールに移行し、元のスタンバイデータベースはプライマリロールに移行します。

**Topics**
+ [Oracle Data Guard のスイッチオーバー機能の概要](#oracle-replication-switchover.overview)
+ [Oracle Data Guard のスイッチオーバーの要件](oracle-switchover.preparing.md)
+ [Oracle Data Guard のスイッチオーバーの開始](oracle-switchover.initiating.md)
+ [Oracle Data Guard のスイッチオーバーのモニタリング](oracle-switchover.monitoring.md)

## Oracle Data Guard のスイッチオーバー機能の概要
<a name="oracle-replication-switchover.overview"></a>

Amazon RDS は、Oracle データベースレプリカの完全マネージド型のスイッチオーバーベースのロール移行をサポートしています。マウントされているか、読み取り専用で開いているスタンバイデータベースへのスイッチオーバーのみを開始できます。

レプリカは、個別の AWS リージョンに配置するか、単一のリージョン内における複数の異なるアベイラビリティーゾーン (AZ) に配置できます。すべての AWS リージョンがサポートされています。

![\[スタンバイインスタンスを切り替えると、このインスタンスがプライマリ DB インスタンスになります。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/read-replica-switchover.png)


スイッチオーバーは、リードレプリカの昇格とは異なります。スイッチオーバーでは、ソース DB インスタンスとレプリカ DB インスタンスの役割が入れ替わります。昇格では、リードレプリカはソース DB インスタンスになりますが、ソース DB インスタンスはレプリカになりません。詳細については、「[リードレプリカをスタンドアロン DB インスタンスに昇格させる](USER_ReadRepl.Promote.md)」を参照してください。

**Topics**
+ [Oracle Data ata Guard スイッチオーバーの利点](#oracle-replication-switchover.overview.benefits)
+ [サポートされている Oracle Database のバージョン](#oracle-replication-switchover.overview.engine-support)
+ [Oracle Data Guard のスイッチオーバーの費用](#oracle-replication-switchover.overview.cost)
+ [Oracle Data Guard のスイッチオーバーの仕組み](#oracle-replication-switchover.overview.how-it-works)

### Oracle Data ata Guard スイッチオーバーの利点
<a name="oracle-replication-switchover.overview.benefits"></a>

RDS for Oracle のリードレプリカと同様に、マネージド型スイッチオーバーは Oracle Data Guard に依存しています。このオペレーションは、データ損失がゼロになるように設計されています。Amazon RDS は、スイッチオーバーの次の要素を自動化します。
+ 新しいスタンバイデータベースを元のスタンバイデータベースと同じ状態 (マウントされているか、読み取り専用)、プライマリデータベースと指定されたスタンバイデータベースのロールを逆にする
+ データの整合性を確保する
+ 移行後もレプリケーション構成を維持する
+ 新しいスタンバイデータベースのロールが元のプライマリロールに戻ることができることで、逆転の繰り返しをサポートする

### サポートされている Oracle Database のバージョン
<a name="oracle-replication-switchover.overview.engine-support"></a>

Oracle Data Guard スイッチオーバーは、Oracle Database 19c 以降のリリースでサポートされています。

### Oracle Data Guard のスイッチオーバーの費用
<a name="oracle-replication-switchover.overview.cost"></a>

Oracle Data Guard のスイッチオーバー機能には追加コストはかかりません。Oracle Database Enterprise Edition には、マウントモードのスタンバイデータベースのサポートが含まれています。スタンバイデータベースを読み取り専用モードで開くには、Oracle Active Data Guard オプションが必要です。

### Oracle Data Guard のスイッチオーバーの仕組み
<a name="oracle-replication-switchover.overview.how-it-works"></a>

Oracle Data Guard のスイッチオーバーはフルマネージド型操作です。スタンバイデータベースのスイッチオーバーを開始するには、CLI コマンド `switchover-read-replica` を実行します。すると、Amazon RDS はレプリケーション構成のプライマリロールとスタンバイロールを変更します。

*オリジナルのスタンバイ*と*オリジナルのプライマリ*がスイッチオーバー前のロールです。*新しいスタンバイ*と*新しいプライマリ*がスイッチオーバー後のロールです。*バイスタンダーのレプリカ*は、Oracle Data Guard 環境ではスタンバイデータベースとして機能しますが、ロールの切り替えは行わないレプリカデータベースです。

**Topics**
+ [Oracle Data Guard のスイッチオーバーのステージ](#oracle-replication-switchover.overview.how-it-works.during-switchover)
+ [Oracle Data Guard のスイッチオーバー操作後](#oracle-replication-switchover.overview.how-it-works.after-switchover)

#### Oracle Data Guard のスイッチオーバーのステージ
<a name="oracle-replication-switchover.overview.how-it-works.during-switchover"></a>

スイッチオーバーを実行するには、Amazon RDS が次のステップを実行する必要があります。

1. 元のプライマリデータベースの新しいトランザクションをブロックします。スイッチオーバー中、Amazon RDS は Oracle Data Guard 設定のすべてのデータベースのレプリケーションを中断します。スイッチオーバー中、元のプライマリデータベースは書き込み要求を処理できません。

1. 未適用のトランザクションを元のスタンバイデータベースに送り、適用します。

1. 新しいスタンバイデータベースを読み取り専用モードまたはマウントモードで再起動します。モードは、スイッチオーバー前の元のスタンバイデータベースのオープン状態によって異なります。

1. 新しいプライマリデータベースを読み取り/書き込みモードで開きます。

#### Oracle Data Guard のスイッチオーバー操作後
<a name="oracle-replication-switchover.overview.how-it-works.after-switchover"></a>

Amazon RDS は、プライマリデータベースとスタンバイデータベースのロールを切り替えます。アプリケーションを再接続し、その他の必要な構成を実行するのはユーザーです。

**Topics**
+ [成功基準](#oracle-replication-switchover.overview.how-it-works.after-switchover.success)
+ [新しいプライマリデータベースへの接続](#oracle-replication-switchover.overview.how-it-works.after-switchover.connection)
+ [新しいプライマリデータベースの構成](#oracle-replication-switchover.overview.how-it-works.after-switchover.success.configuration)

##### 成功基準
<a name="oracle-replication-switchover.overview.how-it-works.after-switchover.success"></a>

Oracle Data Guard のスイッチオーバーは、元のスタンバイデータベースが次の処理を実行したときに成功したと判断できます。
+ 新しいプライマリデータベースとしてのロールに移行する
+ 再構成を完了する

ダウンタイムを抑えるため、新しいプライマリデータベースはできるだけ早くアクティブになります。Amazon RDS はバイスタンダーのレプリカを非同期で設定するため、これらのレプリカは元のプライマリデータベースの後でアクティブになる可能性があります。

##### 新しいプライマリデータベースへの接続
<a name="oracle-replication-switchover.overview.how-it-works.after-switchover.connection"></a>

Amazon RDS は、スイッチオーバー後、現在のデータベース接続を新しいプライマリデータベースに伝達しません。Oracle Data Guard のスイッチオーバーが完了したら、アプリケーションを新しいプライマリデータベースに再接続します。

##### 新しいプライマリデータベースの構成
<a name="oracle-replication-switchover.overview.how-it-works.after-switchover.success.configuration"></a>

新しいプライマリデータベースへのスイッチオーバーを実行するために、Amazon RDS は元のスタンバイデータベースのモードをオープンに変更します。ロールの変更がデータベースの唯一の変更です。Amazon RDS によって Multi-AZ レプリケーションなどの機能は設定されません。

オプションが異なるクロスリージョンレプリカへのスイッチオーバーを実行しても、新しいプライマリデータベースでは独自のオプションが保持されます。Amazon RDS は元のプライマリデータベースのオプションを移行しません。元のプライマリデータベースで SSL、NNE、OEM、OEM\$1AGENT などのオプションが指定されている場合も、Amazon RDS はそれらを新しいプライマリデータベースに伝達しません。

# Oracle Data Guard のスイッチオーバーの要件
<a name="oracle-switchover.preparing"></a>

Oracle Data Guard のスイッチオーバーを開始する前に、レプリケーション環境が次の要件を満たしていることを確認します。
+ 元のスタンバイデータベースがマウントされているか、読み取り専用で開かれている。
+ 元のスタンバイデータベースで自動バックアップが有効になっている。
+ 元のプライマリデータベースと元のスタンバイデータベースが `available` 状態である。
+ 元のプライマリデータベースと元のスタンバイデータベースに、`required`、`next window`、または `in progress` 状態の保留中のメンテナンスアクションがない。これらの状態のアクションはスイッチオーバーをブロックします。保留中のメンテナンス更新のステータスを確認する方法については、「[保留中のメンテナンス更新の表示](USER_UpgradeDBInstance.Maintenance.md#USER_UpgradeDBInstance.Maintenance.Viewing)」を参照してください。

  保留中のメンテナンスアクションが `available` 状態の場合は、スイッチオーバーをブロックしません。RDS for Oracle は、オペレーティングシステム (OS) の更新を `available` 状態で頻繁にリリースします。これらの保留中の OS 更新は、次回のメンテナンスウィンドウにスケジュールして `next window` 状態にしない限り、スイッチオーバーをブロックしません。
**注記**  
スケジュールされたメンテナンスアクションを延期してスイッチオーバーを実行できるようにする場合は、RDS コンソールで **[アクション]**、**[アップグレードを延期]** の順に選択します。スイッチオーバーがブロックされないようにするには、保留中のメンテナンスアクションを適用するか、メンテナンスウィンドウをスイッチオーバー前の間隔に移動することもできます。詳細については、re:Post の記事「[How to remove RDS pending maintenance items](https://repost.aws/questions/QUV3dBjmVVRnmVV1pAlzjx1w/how-to-remove-rds-pending-maintenance-item)」を参照してください。
+ 元のスタンバイデータベースがレプリケーション状態である。
+ プライマリデータベースまたはスタンバイデータベースのいずれかがスイッチオーバーライフサイクルで、現在スイッチオーバーを開始しようとしていない。スイッチオーバー後にレプリカデータベースの再構成中、Amazon RDS は別のスイッチオーバーを開始できないようにします。
**注記**  
*バイスタンダーのレプリカ*とは、スイッチオーバーの対象ではない Oracle Data Guard 構成のレプリカです。バイスタンダーのレプリカは、スイッチオーバー時、どのような状態でもかまいません。
+ 元のスタンバイデータベースが、元のプライマリデータベースの構成と希望に近い構成になっている。元のプライマリデータベースと元のスタンバイデータベースでオプションが異なるシナリオを想定します。スイッチオーバーが完了しても、Amazon RDS では、新しいプライマリデータベースを元のプライマリデータベースと同じオプションで自動的には再設定しません。
+ 切り替えを開始する前に、目的のマルチ AZ 配置を設定します。Amazon RDS では、切り替えの一環としてマルチ AZ を管理しません。マルチ AZ 配置はそのままになります。

  db\$1maz がマルチ AZ 配置のプライマリデータベースで、db\$1saz がシングル AZ レプリカであると仮定します。db\$1maz から db\$1saz への切り替えを開始します。その後、db\$1maz はマルチ AZ レプリカデータベースになり、db\$1saz はシングル AZ プライマリデータベースになります。これで、新しいプライマリデータベースは マルチ AZ 配置によって保護されなくなりました。
+ クロスリージョンの切り替えに備え、プライマリデータベースはレプリケーション設定以外の DB インスタンスと同じオプショングループを使用しません。クロスリージョンの切り替えを正常に行うには、現在のプライマリデータベースとそのリードレプリカが、現在のプライマリデータベースのオプショングループを使用する DB インスタンスのみである必要があります。そうではない場合、Amazon RDS が切り替えを妨げます。

# Oracle Data Guard のスイッチオーバーの開始
<a name="oracle-switchover.initiating"></a>

RDS for Oracle リードレプリカをプライマリロールに切り替え、以前のプライマリ DB インスタンスをレプリカロールに切り替えることができます。

## コンソール
<a name="USER_ReadRepl.Promote.Console"></a>

**Oracle リードレプリカをプライマリ DB ロールに切り替えるには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. Amazon RDS コンソールで、[**Databases (データベース)**] を選択します。

   [**Databases (データベース)**] ペインが表示されます。各リードレプリカには､[**Role (ロール)**] 列に [**Replica (レプリカ)**] があります｡

1. プライマリロールに切り替えるリードレプリカを選択します。

1. **[Actions]** (アクション) で、**[Switch over replica]** (レプリカを切り替える) を選択します。

1. **[I acknowledge]** (承認します) を選択します。次に、**[Switch over replica]** (レプリカを切り替える) を選択します。

1. **[Databases]** (データベース) ページで、スイッチオーバーの進行状況をモニタリングします。  
![\[Oracle Data Guard のスイッチオーバーの進行状況をモニタリングする\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/oracle-switchover-progress.png)

   スイッチオーバーが完了すると、ターゲットのロールが**レプリカ**から**ソース**に変わります。  
![\[ソースデータベースとレプリカデータベースのロールが変更されます。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/oracle-switchover-complete.png)

## AWS CLI
<a name="USER_ReadRepl.Promote.CLI"></a>

Oracle レプリカをプライマリ DB ロールに切り替えるには、AWS CLI [https://docs.aws.amazon.com/cli/latest/reference/rds/switchover-read-replica.html](https://docs.aws.amazon.com/cli/latest/reference/rds/switchover-read-replica.html) コマンドを使用します。次の例では、*replica-to-be-made-primary* という名前の Oracle レプリカを新しいプライマリデータベースに切り替えます。

**Example**  
Linux、macOS、Unix の場合:  

```
aws rds switchover-read-replica \
    --db-instance-identifier replica-to-be-made-primary
```
Windows の場合:  

```
aws rds switchover-read-replica ^
    --db-instance-identifier replica-to-be-made-primary
```

## RDS API
<a name="USER_ReadRepl.Promote.API"></a>

Oracle レプリカをプライマリ DB ロールに切り替えるには、必須パラメータ `DBInstanceIdentifier` を使用して、Amazon RDS API [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_SwitchoverReadReplica.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_SwitchoverReadReplica.html) 操作を呼び出します。このパラメータは、プライマリ DB ロールを継承する Oracle レプリカの名前を指定します。

# Oracle Data Guard のスイッチオーバーのモニタリング
<a name="oracle-switchover.monitoring"></a>

インスタンスの状態を確認するには、AWS CLI コマンド `describe-db-instances` を使用します。次のコマンドでは、DB インスタンス *orcl2* のステータスをモニタリングします。このデータベースは、スイッチオーバー前はスタンバイデータベースでしたが、スイッチオーバー後は新しいプライマリデータベースになります。

```
aws rds describe-db-instances \
    --db-instance-identifier orcl2
```

スイッチオーバーが正常に完了したことを確認するには、`V$DATABASE.OPEN_MODE` のクエリを実行します。新しいプライマリデータベースの値が `READ WRITE` であることを確認します。

```
SELECT OPEN_MODE FROM V$DATABASE;
```

スイッチオーバー関連のイベントを検索するには、AWS CLI コマンド `describe-events` を使用します。次の例では、*orcl2* インスタンスのイベントを検索します。

```
aws rds describe-events \
    --source-identifier orcl2 \
    --source-type db-instance
```