

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 RDS Custom for Oracle 的 Oracle 複本
<a name="custom-rr"></a>

您可以建立執行 Oracle Enterprise Edition 的 RDS Custom for Oracle 資料庫執行個體的 Oracle 複本。同時支援容器資料庫 (CDB) 和非 CDB。Standard Edition 2 不支援 Oracle Data Guard。

建立 RDS Custom for Oracle 複本與建立 RDS for Oracle 複本過程類似，但有一些重要差異。如需建立和管理 Oracle 複本的一般資訊，請參閱 [使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md) 和 [使用適用於 Amazon RDS for Oracel 的僅供讀取複本](oracle-read-replicas.md)。

**Topics**
+ [RDS Custom for Oracle 複本的概觀](#custom-rr.overview)
+ [RDS Custom for Oracle 複本的指南和限制](custom-rr.reqs-limitations.md)
+ [將 RDS Custom for Oracle 複本升級為獨立的資料庫執行個體](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 複本的類比。主要資料庫執行個體會以非同步方式複寫到一或多個 Oracle 複本。

![\[RDS Custom for Oracle 支援 Oracle 複本\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/read-replica-custom-oracle.png)


### 複本數上限
<a name="custom-rr.overview.number"></a>

與 RDS for Oracle 相同，您的 RDS Custom for Oracle 主要資料庫執行個體最多可以建立 5 個受管的 Oracle 複本。您也可以自行建立手動設定 (外部) 的 Oracle 複本。外部複本不會計入您的資料庫執行個體限制。外部複本也屬於 RDS Custom 支援範圍之外。如需支援周邊的詳細資訊，請參閱 [RDS Custom 支援周邊](custom-concept.md#custom-troubleshooting.support-perimeter)。

### 複本命名慣例
<a name="custom-rr.overview.names"></a>

Oracle 複本名稱是以資料庫唯一名稱為基礎。格式為 `DB_UNIQUE_NAME_X`，按附加字母順序排序。例如，如果您的資料庫唯一名稱為 `ORCL`，則前兩個複本會命名為 `ORCL_A` 和 `ORCL_B`。前六個字母 A—F 會保留給 RDS Custom。RDS Custom 會從主要資料庫執行個體將資料庫參數複製到複本。如需詳細資訊，請參閱 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 複本會使用與主要資料庫執行個體相同的備份保留期間。您可以將備份保留期修改為 1 - 35 天。RDS Custom 支援備份、還原和時間點復原 (PITR)。如需備份和還原 RDS Custom 資料庫執行個體的詳細資訊，請參閱 [備份與還原 Amazon RDS Custom for Oracle DB 資料庫執行個體](custom-backup.md)。

**注意**  
建立 Oracle 複本時，RDS Custom 會暫時暫停重做日誌的清理。如此一來，RDS Custom 可確保新的 Oracle 複本可供使用之後，將這些日誌套用至新的 Oracle 複本。

### 複本提升
<a name="custom-rr.overview.promotion"></a>

您可以使用主控台、`promote-read-replica` AWS CLI 指令，或 `PromoteReadReplica` API 在 RDS Custom for Oracle 中提升受管的 Oracle 複本。如果您刪除主要資料庫執行個體，且所有複本都正常運作，則 RDS Custom for Oracle 會自動將受管複本提升為獨立執行個體。如果複本已暫停自動提升或位於支援範圍以外，您必須先修正複本，RDS Custom 才可以自動提升複本。您只能手動提升外部 Oracle 複本。

# 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 的時候，請遵循下列指示：
+ 您只能在 Oracle Enterprise Edition 中使用 RDS Custom for Oracle 複寫。不支援 Standard Edition 2。
+ 強烈建議您實作 VPN 通道來加密主要與待命執行個體之間的通訊。如需詳細資訊，請參閱[在 RDS Custom for Oracle 主要執行個體和複本執行個體之間設定 VPN 通道](cfo-standby-vpn-tunnel.md)。
+ 請不要修改 `RDS_DATAGUARD` 使用者。此使用者是為 RDS Custom for Oracle 自動化保留的。修改此使用者可能會導致意外結果，例如，無法為您的 RDS Custom for Oracle 資料庫執行個體建立 Oracle 複本。
+ 請勿變更複本使用者密碼。管理 RDS Custom 主機上的 Oracle Data Guard 組態時會需要該密碼。如果您變更密碼，RDS Custom for Oracle 可能會將 Oracle 複本置於支援範圍以外。如需詳細資訊，請參閱[RDS Custom 支援周邊](custom-concept.md#custom-troubleshooting.support-perimeter)。

  密碼會存放在 中 AWS Secrets Manager，並標記資料庫資源 ID。每個 Oracel 複本在 Secrets Manager 中都有自己的秘密。秘密使用下列任一命名格式。

  ```
  do-not-delete-rds-custom-db-DB_resource_id-uuid-dg
  rds-custom!oracle-do-not-delete-DB_resource_id-uuid-dg
  ```
+ 請勿變更主要資料庫執行個體的 `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 Gard `CommunicationTimeout` 值的參數。此參數針對 Oracle 資料庫執行個體設定為 15 秒。

## RDS Custom for Oracle 複本的網路需求和限制
<a name="custom-rr.network"></a>

確定您的網路組態支援 RDS Custom for Oracle 複本。考慮下列各項：
+ 請務必針對主要資料庫執行個體和所有複本，對於虛擬私有雲端 (VPC) 內的輸入和輸出通訊啟用連接埠 1140。這對於僅供讀取複本之間的 Oracle Data Guard 通訊而言是必要的。
+ RDS Custom for Oracle 會於建立 Oracle 複本時驗證網路。如果主要資料庫執行個體和新的複本無法透過網路連線，則 RDS Custom for Oracle 不會建立複本，並將其置於 `INCOMPATIBLE_NETWORK` 狀態。
+ 對於外部 Oracle 複本 (例如您在 Amazon EC2 或內部部署建立的複本)，請針對 Oracle Data Guard 複寫使用另一個連接埠和接聽程式。嘗試使用連接埠 1140 可能會導致與 RDS Custom 自動化發生衝突。
+ `/rdsdbdata/config/tnsnames.ora` 檔案包含對應至接聽程式通訊協定位址的網路服務名稱。請注意以下要求和建議：
  + 在處理 Oracle 複本操作時，`tnsnames.ora` 中字首為 `rds_custom_` 的項目是為 RDS Custom 保留的。

    在 `tnsnames.ora` 中建立手動項目時，不使用此字首。
  + 在某些情況下，您可能想要手動切換或容錯移轉，或使用容錯移轉技術，例如快速啟動容錯移轉 (FSFO)。若是如此，請確定手動將 `tnsnames.ora` 項目從主要資料庫執行個體同步到所有待命執行個體。此建議適用於由 RDS Custom 管理的 Oracle 複本和外部 Oracle 複本。

    RDS Custom 自動化只會在主要資料庫執行個體上更新 `tnsnames.ora` 項目。同時務必在新增或移除 Oracle 複本時同步。

    如果您未同步 `tnsnames.ora` 檔案並手動切換或容錯移轉，則主要資料庫執行個體上的 Oracle Data Guard 可能無法與 Oracle 複本通訊。

## RDS Custom for Oracle 的外部複本限制
<a name="custom-rr.external-replica-reqs"></a>

 RDS Custom for Oracle 外部複本 (包含內部部署複本) 具有下列限制：
+ RDS Custom for Oracle 不會對外部 Oracle 複本在手動容錯移轉 (例如 FSFO) 時偵測執行個體角色變更。

  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 不會自動提升外部 Oracle 複本。

  自動提升功能僅適用於受管的 Oracle 複本。如需手動提升僅 Oracle 複本的相關資訊，請參閱白皮書[使用 Amazon RDS Custom for Oracle 上的 Data Guard 來啟用高可用性](https://d1.awsstatic.com/whitepapers/enabling-high-availability-with-data-guard-on-amazon-rds-custom-for-oracle.pdf)。

# 將 RDS Custom for Oracle 複本升級為獨立的資料庫執行個體
<a name="custom-rr.promoting"></a>

就像使用 RDS for Oracle 一樣，您可以將 RDS Custom for Oracle 提升為獨立的資料庫執行個體。當您提升 Oracle 複本時，RDS Custom for Oracle 資料庫執行個體將在可使用前重新啟動。如需提升 Oracle 複本的相關詳細資訊，請參閱 [提升僅供讀取複本為獨立的資料庫執行個體](USER_ReadRepl.Promote.md)。

提升複本時，請注意下列指示：
+ RDS Custom for Oracle 升級複本時，請勿發起容錯移轉。否則，可能會導致提升工作流程停滯。
+ 當 Oracle Custom for Oracle 正在升級您的 Oracle 複本時，請勿切換主要資料庫執行個體。否則，可能會導致提升工作流程停滯。
+ 當 RDS Custom for Oracle 正在升級您的 Oracle 複本時，請勿關閉主要資料庫執行個體。否則，可能會導致提升工作流程停滯。
+ 請勿嘗試以新提升的資料庫執行個體做為目標重新啟動複寫。RDS Custom for Oracle 提升您的 Oracle 複本之後，它會成為獨立的資料庫執行個體，而且不再具有複本角色。

請留意下列 RDS Custom for Oracle 複本提升的限制：
+ RDS Custom for Oracle 正在進行備份時，您無法提升複本。
+ 提升 Oracle 複本時，您無法將備份保留期變更為 `0`。
+ 若複本的運作狀態不佳，您便不能提升該複本。

  如果您在主要資料庫執行個體上發出問題 `delete-db-instance`，RDS Custom for Oracle 會驗證每個受管的 Oracle 複本是否正常運作且可用於升級。複本可能會由於自動化已暫停或位於支援範圍之外而不符合升級。在這種情況下，RDS Custom for Oracle 會發佈事件說明問題，以便您可以手動修復 Oracle 複本。

以下步驟顯示了提升 Oracle 複本至資料庫執行個體的一般流程：

1. 停止任何交易寫入主要資料庫執行個體。

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) 或 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_PromoteReadReplica.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_PromoteReadReplica.html) Amazon RDS API 操作，提升 Oracle 複本。

提升 Oracle 複本可能需要幾分鐘。在此程序期間，RDS Custom for Oracle 會停止複寫並重新啟動您的複本。當重新啟動完成，該 Oracle 複本便可用做獨立的資料庫執行個體。如需針對複本提升進行故障診斷的相關資訊，請參閱 [RDS Custom for Oracle 複本提升的故障診斷](custom-troubleshooting.md#custom-troubleshooting-promote)。

## 主控台
<a name="USER_ReadRepl.Promote.Console"></a>

**若要將 RDS Custom for Oracle 複本提升為獨立的資料庫執行個體**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在 Amazon RDS 主控台，選擇 **Databases (資料庫)**。

   **Databases (資料庫)** 窗格隨即出現。每個 Oracle 複本會在 **Role** (角色) 欄中顯示 **Replica** (複本)。

1. 選擇您想提升的 RDS Custom for Oracle 複本。

1. 針對 **Actions** (動作)，選擇 **Promote** (提升)。

1. 在 **Promote Oracle replica** (提升 Oracle 複本) 頁面上，輸入新升級資料庫執行個體的備份保留期間和備份時間。您無法將此數值設為 **0**。

1. 依您所需完成設定後，選擇 **Promote Oracle replica** (提升 Oracle 複本)。

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

若要將 RDS Custom for Oracle 複本提升為獨立的資料庫執行個體，請使用 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 複本提升為獨立的資料庫執行個體，請使用所需參數 `PromoteReadReplica` 呼叫 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 通道是網路中兩個或多個裝置之間的加密連線。為了確保 RDS Custom for Oracle 中 Oracle Data Guard 執行個體的最高安全性層級，強烈建議您實作 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. 切換至根使用者。

   ```
   $ sudo su – root
   ```

1. 在主要執行個體和待命執行個體上執行下列命令，以在使用者 `root` 下初始化網路安全服務 (NSS) 資料庫。

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

1. 產生 RSA 金鑰，如下所示：

   1. 在主要執行個體上，根據您的作業系統版本，使用下列任一 `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. 取得建立組態所需的公有金鑰。在下列範例中，主要執行個體是 `left`，因為以 `ipsec` 術語來說，`left` 是指您目前設定的裝置，而 `right` 是指通道另一端的裝置。

      ```
      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 金鑰來產生組態。主要執行個體和待命執行個體的組態都相同。您可以在 AWS 主控台中找到主要執行個體 IPv4 地址和待命執行個體 IPv4 地址。

   在主要執行個體和待命執行個體上，將下列組態儲存至檔案 `/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 ~]#
   ```