

# RDS Custom for Oracle の Oracle レプリカの使用
<a name="custom-rr"></a>

Oracle Enterprise Edition を実行する、RDS Custom for Oracle DB インスタンスの Oracle レプリカを作成できます。コンテナデータベース (CDB) と非 CDB の両方がサポートされています。Standard Edition 2 は、Oracle Data Guard をサポートしていません。

RDS Custom for Oracle レプリカの作成は、RDS for Oracle レプリカの作成に似ていますが、いくつかの重要な違いがあります。Oracle レプリカの作成および管理の一般情報については、「[DB インスタンスのリードレプリカの操作](USER_ReadRepl.md)」 および 「[Amazon RDS for Oracle でのリードレプリカの使用](oracle-read-replicas.md)」 を参照してください。

**Topics**
+ [RDS Custom for Oracle レプリケーションの概要](#custom-rr.overview)
+ [Amazon RDS Custom for Oracle レプリケーションのガイドラインと制限事項](custom-rr.reqs-limitations.md)
+ [RDS Custom for Oracle レプリカをスタンドアロン DB インスタンスに昇格させる](custom-rr.promoting.md)
+ [RDS Custom for Oracle プライマリインスタンスとレプリカインスタンス間の VPN トンネルの設定](cfo-standby-vpn-tunnel.md)

## RDS Custom for Oracle レプリケーションの概要
<a name="custom-rr.overview"></a>

RDS Custom for Oracle レプリケーションのアーキテクチャは、RDS for Oracle レプリケーションに似ています。プライマリ DB インスタンスは 1 つ以上の Oracle レプリカに非同期でレプリケートします。

![\[RDS Custom for Oracle での Oracle レプリカのサポート\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/read-replica-custom-oracle.png)


### レプリカの最大数
<a name="custom-rr.overview.number"></a>

RDS for Oracle と同様に、RDS Custom for Oracle プライマリ DB インスタンスに対して、最大 5 つのマネージド Oracle レプリカを作成できます。手動で設定した独自 (外部) の Oracle レプリカを作成することもできます。外部レプリカは DB インスタンスの制限にはカウントされません。RDS Custom サポートペリメーターの外にもあります。サポートされる形式の詳細については、「[RDS Custom サポート範囲](custom-concept.md#custom-troubleshooting.support-perimeter)」を参照してください。

### レプリカの命名規則
<a name="custom-rr.overview.names"></a>

Oracle レプリカ名は、データベースの一意の名前に基づいています。形式は `DB_UNIQUE_NAME_X` で、文字が順次追加されます。例えば、データベースの一意の名前が `ORCL` であれば、最初の 2 つのレプリカの名前は `ORCL_A` と `ORCL_B` になります。初期の 6 文字 A—F は RDS Custom 用に予約されています。RDS Custom は、プライマリ DB インスタンスからレプリカにデータベースパラメータをコピーします。詳細については、Oracle ドキュメントの「[DB\$1UNIQUE\$1NAME](https://docs.oracle.com/database/121/REFRN/GUID-3547C937-5DDA-49FF-A9F9-14FF306545D8.htm#REFRN10242)」を参照してください。

### レプリカのバックアップ保持
<a name="custom-rr.overview.backups"></a>

デフォルトでは、RDS Custom Oracle レプリカは、プライマリ DB インスタンスと同じバックアップ保持期間を使用します。バックアップ保持期間を 1～35 日に変更することができます。RDS Custom は、バックアップ、リストア、ポイントインタイムリカバリ (PITR) をサポートしています。RDS カスタム DB インスタンスのバックアップと復元の詳細については、「[Amazon RDS Custom for Oracle DB インスタンスのバックアップと復元](custom-backup.md)」を参照してください。

**注記**  
Oracle レプリカを作成している間、RDS Custom は REDO ログファイルのクリーンアップを一時的に一時停止します。このようにして、RDS Custom は、新しい Oracle レプリカが使用可能になった後に、これらのログを確実に適用できるようにします。

### レプリカの昇格
<a name="custom-rr.overview.promotion"></a>

コンソール、`promote-read-replica` AWS CLI コマンド、または `PromoteReadReplica` API を使用して、RDS Custom for Oracle のマネージド Oracle レプリカを昇格させることができます。プライマリ DB インスタンスを削除し、すべてのレプリカが正常であれば、RDS Custom for Oracle はマネージドレプリカをスタンドアロンインスタンスに自動的に昇格させます。レプリカが自動化を一時停止しているか、サポートペリメーター外にある場合は、RDS Custom が自動的にレプリカを昇格させる前にレプリカを修正する必要があります。外部の Oracle レプリカは手動でのみ昇格できます。

# Amazon RDS Custom for Oracle レプリケーションのガイドラインと制限事項
<a name="custom-rr.reqs-limitations"></a>

RDS Custom for Oracle リードレプリカの作成時に、すべての RDS Oracle レプリカオプションがサポートされるわけではありません。

**Topics**
+ [RDS Custom for Oracle レプリケーションの一般的なガイドライン](#custom-rr.guidelines)
+ [RDS Custom for Oracle レプリケーションの一般的な制限事項](#custom-rr.limitations)
+ [RDS Custom for Oracle レプリケーションのネットワーク要件と制限事項](#custom-rr.network)
+ [RDS Custom for Oracle の外部レプリカの制限事項](#custom-rr.external-replica-reqs)

## RDS Custom for Oracle レプリケーションの一般的なガイドライン
<a name="custom-rr.guidelines"></a>

RDS Custom for Oracle を使用するときは、次のガイドラインに従ってください。
+ RDS Custom for Oracle レプリケーションは、Oracle Enterprise Edition でのみ使用できます。Standard Edition 2 はサポートされていません。
+ VPN トンネルを実装して、プライマリインスタンスとスタンバイインスタンス間の通信を暗号化することを強くお勧めします。詳細については、「[RDS Custom for Oracle プライマリインスタンスとレプリカインスタンス間の VPN トンネルの設定](cfo-standby-vpn-tunnel.md)」を参照してください。
+ `RDS_DATAGUARD`ユーザーを変更しないでください。このユーザーは RDS Custom for Oracle オートメーション用に予約されています。このユーザーを変更すると、RDS Custom for Oracle DB インスタンスの Oracle レプリカを作成できないなど、望ましくない結果が発生することがあります。
+ レプリケーションユーザーのパスワードは変更しないでください。このパスワードは、RDS Custom ホスト上で Oracle Data Guard 設定を管理するために必要です。RDS Custom for Oracle でパスワードを変更すると、Oracle レプリカがサポートペリメーターの外に配置される可能性があります。詳細については、「[RDS Custom サポート範囲](custom-concept.md#custom-troubleshooting.support-perimeter)」を参照してください。

  パスワードは、DB リソース ID とタグ付けされ、AWS Secrets Manager に保存されます。Secrets Manager は、各 Oracle レプリカに独自のシークレットがあります。シークレットは、次のいずれかの命名形式を使用します。

  ```
  do-not-delete-rds-custom-db-DB_resource_id-uuid-dg
  rds-custom!oracle-do-not-delete-DB_resource_id-uuid-dg
  ```
+ プライマリ DB インスタンスの `DB_UNIQUE_NAME` は変更しないでください。名前を変更すると、復元オペレーションが停止します。
+ RDS Custom CDB の `CREATE PLUGGABLE DATABASE` コマンドに句 `STANDBYS=NONE` を指定しないでください。これにより、フェイルオーバーが発生しても、スタンバイ CDB にすべての PDB が含まれるようになります。

## RDS Custom for Oracle レプリケーションの一般的な制限事項
<a name="custom-rr.limitations"></a>

RDS Custom for Oracle レプリカの制限は以下のとおりです。
+ RDS Custom for Oracle レプリカは読み取り専用モードで作成することはできません。ただし、レプリカのモードをマウントから読み取り専用に変更したり、読み取り専用からマウントに変更する操作を手動で行うことができます。詳細については、[create-db-instance-read-replica](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance-read-replica.html) AWS CLIコマンドのドキュメントを参照してください。
+ クロスリージョン RDS Custom for Oracle レプリカを作成することはできません。
+ Oracle Data Guard `CommunicationTimeout` パラメータの値を変更することはできません。RDS Custom for Oracle DB インスタンスでこのパラメータを 15 秒に設定します。

## RDS Custom for Oracle レプリケーションのネットワーク要件と制限事項
<a name="custom-rr.network"></a>

ネットワーク設定が RDS Custom for Oracle レプリカをサポートしていることを確認します。以下の点を考慮してください。
+ プライマリ DB インスタンスおよびすべてのレプリカの仮想プライベートクラウド (VPC) 内のインバウンドおよびアウトバウンド通信の両方で、ポート 1140 を有効にしてください。これは、Oracle Data Guard のリードレプリカ間の通信に必要です。
+ RDS Custom for Oracle は、Oracle レプリカの作成中にネットワークを検証します。プライマリ DB インスタンスと新しいレプリカがネットワーク経由で接続できない場合、RDS Custom for Oracle はレプリカを作成せず、`INCOMPATIBLE_NETWORK` 状態にします。
+ Amazon EC2 またはオンプレミスで作成する外部 Oracle レプリカの場合は、Oracle Data Guard レプリケーションに別のポートとリスナーを使用します。ポート 1140 を使用しようとすると、RDS Custom オートメーションと競合する可能性があります。
+ `/rdsdbdata/config/tnsnames.ora`ファイルには、リスナープロトコルアドレスにマップされたネットワークサービス名が含まれています。以下の要件と推奨事項に留意してください。
  + `tnsnames.ora` に `rds_custom_` のプレフィックスが付いたエントリーは、Oracle レプリカオペレーションを処理する際に RDS Custom に予約されます。

    `tnsnames.ora`で手動でエントリーを作成する場合、このプレフィックスは使用しないでください。
  + 場合によっては、手動でスイッチオーバーまたはフェイルオーバーするか、Fast-Start Failover (FSFO) などのフェイルオーバーテクノロジーを使用することをお勧めします。その場合は、マニュアルで`tnsnames.ora`エントリーをプライマリ DB インスタンスからすべてのスタンバイインスタンスに同期してください。このレコメンデーションは、RDS Custom で管理される Oracle レプリカと外部 Oracle レプリカの両方に適用されます。

    RDS Custom オートメーションは、`tnsnames.ora` エントリーをプライマリ DB インスタンスでのみアップデートします。Oracle レプリカを追加または削除するときも、必ず同期してください。

    同期しない場合、`tnsnames.ora`ファイルを切り替えてマニュアルでフェイルオーバーすると、プライマリ DB インスタンス上の Oracle Data Guard が Oracle レプリカと通信できない場合があります。

## RDS Custom for Oracle の外部レプリカの制限事項
<a name="custom-rr.external-replica-reqs"></a>

 RDS Custom for Oracle 外部レプリカ (オンプレミスのレプリカを含む) には次の制限があります。
+ RDS Custom for Oracle は、FSFO などの外部 Oracle レプリカの手動フェイルオーバー時にインスタンスロールの変更を検出しません。

  RDS Custom for Oracle は、マネージドレプリカの変更を検出します。ロールの変更は、イベントログに記録されます。新しい状態は、[describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) AWS CLIコマンドを使用して見ることができます。
+ RDS Custom for Oracle は、外部 Oracle レプリカの高いレプリケーションラグを検出しません。

  RDS Custom for Oracle は、マネージドレプリカのラグを検出します。レプリケーションラグが高い場合は、`Replication has stopped`イベントが発生します。レプリケーションステータスは、[describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) AWS CLIコマンドを実行して見ることができますが、更新に遅延がある可能性があります。
+ RDS Custom for Oracle は、プライマリ DB インスタンスを削除しても、外部の Oracle レプリカを自動的に昇格させません。

  自動昇格機能は、マネージド Oracle レプリカでのみ使用できます。Oracle レプリカを手動で昇格する方法については、ホワイトペーパー「[Amazon RDS Custom for Oracle でのデータガードによる高可用性の有効化](https://d1.awsstatic.com/whitepapers/enabling-high-availability-with-data-guard-on-amazon-rds-custom-for-oracle.pdf)」を参照してください。

# RDS Custom for Oracle レプリカをスタンドアロン DB インスタンスに昇格させる
<a name="custom-rr.promoting"></a>

RDS for Oracle と同様に、RDS Custom for Oracle レプリカをスタンドアロンの DB インスタンスに昇格させることができます。Oracle レプリカを昇格させると、RDS Custom for Oracle は、使用可能になる前に DB インスタンスが再起動します。Oracle レプリカの昇格についての詳細は、「[リードレプリカをスタンドアロン DB インスタンスに昇格させる](USER_ReadRepl.Promote.md)」を参照してください。

レプリカを昇格させる場合は、以下のガイドラインに注意してください。
+ RDS Custom for Oracle がレプリカを昇格させている間は、フェイルオーバーを開始しないようにしてください。そうしないと、昇格ワークフローが停止する可能性があります。
+ RDS Custom for Oracle が Oracle レプリカを昇格させている間は、プライマリ DB インスタンスを切り替えないようにしてください。そうしないと、昇格ワークフローが停止する可能性があります。
+ RDS Custom for Oracle が Oracle レプリカを昇格させている間は、プライマリ DB インスタンスをシャットダウンしないようにしてください。そうしないと、昇格ワークフローが停止する可能性があります。
+ 新しく昇格した DB インスタンスをターゲットとしてレプリケーションを再開しようとしないでください。RDS Custom for Oracle が Oracle レプリカを昇格させると、そのレプリカはスタンドアロンの DB インスタンスになり、レプリカのロールは保有しなくなります。

RDS Custom for Oracle レプリカの昇格について、以下の制事項に注意してください。
+ RDS Custom for Oracle がバックアップを行っている間は、レプリカを昇格させることはできません。
+ Oracle レプリカを昇格させる場合、バックアップ保持期間を `0` に変更することはできません。
+ レプリカが正常な状態でないと、レプリカを昇格させることはできません。

  プライマリ DB インスタンスで `delete-db-instance` を発行した場合、RDS Custom for Oracle は、それぞれのマネージド Oracle レプリカが正常であり、昇格に利用可能であることを検証します。自動化が一時停止されているか、サポートペリメーター外にあるため、レプリカを昇格できない場合があります。このような場合、RDS Custom for Oracle は問題を説明するイベントを公開し、Oracle レプリカを手動で修復できるようにします。

以下のステップは、DB インスタンスに Oracle レプリカを昇格させる一般的なプロセスを示しています。

1. プライマリ DB インスタンスに対するトランザクションの書き込みをすべて停止します。

1. RDS Custom for Oracle がすべての更新を Oracle レプリカに適用するまでお待ちください。

1. Amazon RDS コンソールの **[Promote]** (昇格) オプション、AWS CLI コマンドの [https://docs.aws.amazon.com/cli/latest/reference/rds/promote-read-replica.html](https://docs.aws.amazon.com/cli/latest/reference/rds/promote-read-replica.html)、または Amazon RDS API の [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_PromoteReadReplica.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_PromoteReadReplica.html) オペレーションを使用して、Oracle レプリカを昇格させます。

Oracle レプリカの昇格には数分かかります。プロセス中、RDS Custom for Oracle はレプリケーションを停止し、レプリカを再起動します。再起動が完了すると、Oracle レプリカは新しい DB インスタンスとして使用可能になります。レプリカの昇格のトラブルシューティングについては、「[RDS Custom for Oracle のレプリカプロモーションのトラブルシューティング](custom-troubleshooting.md#custom-troubleshooting-promote)」を参照してください。

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

**RDS Custom for Oracle レプリカをスタンドアロン DB インスタンスに昇格させるには**

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

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

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

1. 昇格させる RDS Custom for Oracle レプリカを選択します。

1. [**アクション**] で、[**Promote (昇格)**] を選択します。

1. **[Promote Oracle replica]** (Oracle レプリカの昇格) ページで、新しく昇格された DB インスタンスのバックアップ保持期間とバックアップウィンドウを入力します。この値を **0** に設定することはできません。

1. 希望通りの設定になったら、**[Promote Oracle replica]** (Oracle レプリカの昇格) を選択します。

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

RDS Custom for Oracle レプリカをスタンドアロン DB インスタンスに昇格させるには、AWS CLI [https://docs.aws.amazon.com/cli/latest/reference/rds/promote-read-replica.html](https://docs.aws.amazon.com/cli/latest/reference/rds/promote-read-replica.html) コマンドを使用します。

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

```
aws rds promote-read-replica \
--db-instance-identifier my-custom-read-replica \
--backup-retention-period 2 \
--preferred-backup-window 23:00-24:00
```
Windows の場合:  

```
aws rds promote-read-replica ^
--db-instance-identifier my-custom-read-replica ^
--backup-retention-period 2 ^
--preferred-backup-window 23:00-24:00
```

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

RDS Custom for Oracle レプリカをスタンドアロン DB インスタンスに昇格するには、必須のパラメータ `DBInstanceIdentifier` を指定して Amazon RDS API の [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_PromoteReadReplica.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_PromoteReadReplica.html) オペレーションを呼び出します。

# RDS Custom for Oracle プライマリインスタンスとレプリカインスタンス間の VPN トンネルの設定
<a name="cfo-standby-vpn-tunnel"></a>

VPN トンネルは、ネットワーク上の 2 つ以上のデバイス間の暗号化された接続です。RDS Custom for Oracle で Oracle Data Guard インスタンスのセキュリティを最高レベルまで高めるために、プライマリインスタンスとスタンバイインスタンス間に VPN トンネルを実装し、通信を暗号化するすることを強くお勧めします。VPN トンネルは、インスタンス間で機密データがネットワークを移動する際のにセキュリティを保護します。この設定はオプションですが、データを保護し、規制に準拠するためのベストプラクティスとしてお勧めします。

次の前提条件を満たしていることを確認します。
+ プライマリホストとスタンバイホストへのルートアクセスがあること。
+ `ipsec` コマンドを実行するための技術的な専門知識があること。

**RDS Custom for Oracle でプライマリとレプリカ間に VPN トンネルを設定するには**

1. 次のルールを使用して、プライマリインスタンスとスタンバイインスタンスの両方のセキュリティグループを許可リストに追加します。

   ```
   ACTION FLOW SOURCE PROTO PORT
   
   ALLOW ingress this-SG 50 (ESP) all (N/A)
   ALLOW egress this-SG 50 (ESP) all (N/A)
   
   ALLOW ingress this-SG 17 (UDP) 500 (IKE)
   ALLOW egress this-SG 17 (UDP) 500 (IKE)
   ```

1. root ユーザーに切り替えます。

   ```
   $ sudo su – root
   ```

1. プライマリインスタンスとスタンバイインスタンスの両方で次のコマンドを実行して、`root` ユーザーのネットワークセキュリティサービス (NSS) データベースを初期化します。

   ```
   ipsec initnss --nssdir /etc/ipsec.d
   ```

1. 次のように RSA キーを生成します。

   1. プライマリインスタンスで、OS のバージョンに応じて次のいずれかの `ipsec` コマンドを使用し、キーを生成します。

      ```
      ipsec newhostkey --nssdir /etc/ipsec.d       ## for Oracle Linux Version 8
      ipsec newhostkey --output /etc/ipsec.secrets ## for Oracle Linux version 7.9
      ```

   1. 構成を作成するために必要なパブリックキーを取得します。次の `ipsec` の例では、`left` が設定中のデバイスを参照し、`right` がトンネルの他方の終端にあるデバイスを参照するため、プライマリインスタンスは `left` になります。

      ```
      ipsec showhostkey --left --ckaid ckaid-returned-in-last-statement
      ```

   1. スタンバイインスタンスで、スタンバイインスタンスのキーを生成します。

      ```
      ipsec newhostkey --nssdir /etc/ipsec.d       ## for Oracle Linux Version 8
      ipsec newhostkey --output /etc/ipsec.secrets ## for Oracle Linux version 7.9
      ```

   1. スタンバイ インスタンスの構成を作成するために必要なパブリックキーを取得します。次の例では、トンネルの他方の終端にあるデバイスを参照している `right` がスタンバイインスタンスになります。

      ```
      ipsec showhostkey --right --ckaid ckaid-returned-in-last-statement
      ```

1. 取得した RSA キーに基づいて、構成を生成します。構成は、プライマリインスタンスとスタンバイインスタンスで同じになります。プライマリインスタンスの IPv4 アドレスも、スタンバイインスタンスの IPv4 アドレスも、AWS コンソールで確認できます。

   プライマリインスタンスとスタンバイインスタンスの両方で、次の構成をファイル `/etc/ipsec.d/custom-fb-tunnel.conf` に保存します。

   ```
   conn custom-db-tunnel
    type=transport
    auto=add
    authby=rsasig
    left=IPV4-for-primary 
    leftrsasigkey=RSA-key-generated-on-primary
    right=IPV4-for-standby
    rightrsasigkey=RSA-key-generated-on-standby
   ```

1. プライマリインスタンスとスタンバイインスタンスの両方のホストで `ipsec` デーモンを起動します。

   ```
   ipsec setup start
   ```

1. プライマリインスタンスまたはスタンバイインスタンスでトンネルを起動します。出力は以下の例のようになります。

   ```
   [root@ip-172-31-6-81 ~]# ipsec auto --up custom-db-tunnel
   181 "custom-db-tunnel" #1: initiating IKEv2 connection
   181 "custom-db-tunnel" #1: sent IKE_SA_INIT request to 172.31.32.196:500
   182 "custom-db-tunnel" #1: sent IKE_AUTH request {cipher=AES_GCM_16_256 integ=n/a prf=HMAC_SHA2_512 group=DH19}
   003 "custom-db-tunnel" #1: initiator established IKE SA; authenticated peer '3584-bit PKCS#1 1.5 RSA with SHA1' signature using preloaded certificate '172.31.32.196'
   004 "custom-db-tunnel" #2: initiator established Child SA using #1; IPsec transport [172.31.6.81-172.31.6.81:0-65535 0] -> [172.31.32.196-172.31.32.196:0-65535 0] {ESP/ESN=>0xda9c4815 <0xb742ca42 xfrm=AES_GCM_16_256-NONE DPD=passive}
   [root@ip-172-31-6-81 ~]#
   ```