

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

# 使用 Oracle GoldenGate 搭配 Amazon RDS for Oracle
<a name="Appendix.OracleGoldenGate"></a>

Oracle GoldenGate 會收集、複寫和管理資料庫之間的交易資料。這是日誌式變更資料擷取 (CDC) 和複寫軟體套件，與線上交易處理 (OLTP) 系統的資料庫搭配使用。Oracle GoldenGate 會建立線索檔案，其中包含來源資料庫中最近變更的資料。然後它會將這些檔案推送至伺服器，其中有一個程序會將追蹤檔案轉換成標準 SQL，以套用至目標資料庫。

搭配 RDS for Oracle 的 Oracle GoldenGate 支援下列功能：
+ 主動-主動式資料庫複寫
+ 災難復原
+ 資料保護
+ 區域內和跨區域複寫
+ 零停機時間遷移與升級
+ 在 RDS for Oracle 資料庫執行個體與非 Oracle 資料庫之間進行資料複寫
**注意**  
如需支援的資料庫清單，請參閱 Oracle 文件中的 [Oracle Fusion Middleware 支援的系統組態](https://www.oracle.com/middleware/technologies/fusion-certification.html)。

您可以搭配 RDS for Oracle 使用 Oracle GoldenGate 來升級 Oracle Database 的主要版本。例如：您可以搭配 Amazon RDS 使用 GoldenGate，從 Oracle Database 11g 內部部署資料庫升級到 Amazon RDS 資料庫執行個體上的 Oracle Database 19c。

**Topics**
+ [Oracle GoldenGate 支援的版本和授權選項](#Appendix.OracleGoldenGate.licensing)
+ [Oracle GoldenGate 的要求與限制](#Appendix.OracleGoldenGate.requirements)
+ [Oracle GoldenGate 架構](Appendix.OracleGoldenGate.Overview.md)
+ [設定 Oracle GoldenGate](Appendix.OracleGoldenGate.setting-up.md)
+ [使用 Oracle GoldenGate 的 EXTRACT 和 REPLICAT 公用程式](Appendix.OracleGoldenGate.ExtractReplicat.md)
+ [監控 Oracle GoldenGate](Appendix.OracleGoldenGate.Monitoring.md)
+ [Oracle GoldenGate 疑難排解](Appendix.OracleGoldenGate.Troubleshooting.md)

## Oracle GoldenGate 支援的版本和授權選項
<a name="Appendix.OracleGoldenGate.licensing"></a>

您可以搭配 Oracle GoldenGate 版本 12c 和更新版本，使用 RDS for Oracle 的 Standard Edition 2 (SE2) 或 Enterprise Edition (EE)。您可以使用下列 Oracle GoldenGate 功能：
+ 支援 Oracle GoldenGate 遠端擷取。
+ 使用傳統非 CDB 資料庫架構的 RDS for Oracle 資料庫執行個體支援擷取。執行 Oracle Database 21c 或 Oracle Database 19c 版本 19.0.0.0.ru-2024-04.rur-2024-04.r1 或更新版本的 CDB 支援 Oracle GoldenGate 遠端 PDB 擷取。
+ 使用非 CDB 或 CDB 架構的 RDS for Oracle 資料庫執行個體 支援 Oracle GoldenGate 遠端交付 (複寫)。遠端交付支援整合式複寫、平行複寫、協調式複寫和傳統複寫。
+ RDS for Oracle 支援 Oracle GoldenGate 的傳統和微服務架構。
+ 使用整合式擷取模式時，支援 Oracle GoldenGate DDL 和序列值複寫。

您負責管理 Oracle GoldenGate 授權 (BYOL)，以在所有 AWS 區域中與 Amazon RDS 搭配使用。如需詳細資訊，請參閱[RDS for Oracle 授權選項](Oracle.Concepts.Licensing.md)。

## Oracle GoldenGate 的要求與限制
<a name="Appendix.OracleGoldenGate.requirements"></a>

當您使用 Oracle GoldenGate 和 RDS for Oracle 時，請考慮下列需求和限制：
+ 您負責設定和管理 Oracle GoldenGate，以與 RDS for Oracle 搭配使用。
+ 您負責設定使用來源和目標資料庫認證的 Oracle GoldenGate 版本。如需詳細資訊，請參閱 Oracle 文件中的 [Oracle Fusion Middleware 支援的系統組態](https://www.oracle.com/middleware/technologies/fusion-certification.html)。
+ 您可以針對許多不同的使用案例，在許多不同的 AWS 環境中使用 Oracle GoldenGate。如果您有與 Oracle GoldenGate 相關的支援相關問題，請聯絡 Oracle Support Services。
+ 您可以在使用 Oracle 透明資料加密 (TDE) 的 RDS for Oracle 資料庫執行個體上使用 Oracle GoldenGate。為了維持複寫資料的完整性，請使用 Amazon EBS 加密的磁碟區或線索檔案加密來對 GoldenGate 中樞設定加密。也需為 Oracle GoldenGate 中樞及來源和目標資料庫執行個體之間傳送的資料設定加密。RDS for Oracle 資料庫執行個體支援使用 [Oracle Secure Sockets Layer](Appendix.Oracle.Options.SSL.md) 或 [Oracle 原生網路加密](Appendix.Oracle.Options.NetworkEncryption.md) 加密。

# Oracle GoldenGate 架構
<a name="Appendix.OracleGoldenGate.Overview"></a>

適用於 Amazon RDS 的 Oracle GoldenGate 架構由下列幾個分開的模組組成：

來源資料庫  
來源資料庫可以是內部部署 Oracle 資料庫、Amazon EC2 執行個體上的 Oracle 資料庫，或 Amazon RDS 資料庫執行個體上的 Oracle 資料庫。

Oracle GoldenGate 中樞  
GoldenGate 中樞會將交易資訊從來源資料庫移至目標資料庫。中樞可以是以下其中一種：  
+ 已安裝 Oracle Database 及 Oracle GoldenGate 的 Amazon EC2 執行個體
+ 內部部署 Oracle 安裝
您可以有多個 Amazon EC2 中樞。如果您使用 Oracle GoldenGate 進行跨區域複寫，建議您使用兩個中樞。

目標資料庫  
您的目標資料庫可以位於 Amazon RDS 資料庫執行個體、Amazon EC2 執行個體或內部部署位置。

以下各節描述 Amazon RDS 上 Oracle GoldenGate 的常見案例。

**Topics**
+ [內部部署來源資料庫和 Oracle GoldenGate 中樞](#Appendix.OracleGoldenGate.on-prem-source-gg-hub)
+ [內部部署來源資料庫和 Amazon EC2 中樞](#Appendix.OracleGoldenGate.on-prem-source-ec2-hub)
+ [Amazon RDS 來源資料庫和 Amazon EC2 中樞](#Appendix.OracleGoldenGate.rds-source-ec2-hub)
+ [Amazon EC2 來源資料庫和 Amazon EC2 中樞](#Appendix.OracleGoldenGate.ec2-source-ec2-hub)
+ [不同區域中 AWS 的 Amazon EC2 中樞](#Appendix.OracleGoldenGate.cross-region-hubs)

## 內部部署來源資料庫和 Oracle GoldenGate 中樞
<a name="Appendix.OracleGoldenGate.on-prem-source-gg-hub"></a>

在此案例中，內部部署 Oracle 來源資料庫和內部部署 Oracle GoldenGate 中樞會將資料提供給目標 Amazon RDS 資料庫執行個體。

![\[使用 Amazon RDS 的 Oracle GoldenGate 組態 0\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/oracle-gg0.png)


## 內部部署來源資料庫和 Amazon EC2 中樞
<a name="Appendix.OracleGoldenGate.on-prem-source-ec2-hub"></a>

在此案例中，內部部署 Oracle 資料庫做為來源資料庫使用。它連線至一個 Amazon EC2 執行個體。此中樞會向目標 RDS for Oracle 資料庫執行個體提供資料。

![\[使用 Amazon RDS 的 Oracle GoldenGate 組態 1\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/oracle-gg1.png)


## Amazon RDS 來源資料庫和 Amazon EC2 中樞
<a name="Appendix.OracleGoldenGate.rds-source-ec2-hub"></a>

在此案例中，RDS for Oracle 資料庫執行個體做為來源資料庫使用。它連線至一個 Amazon EC2 執行個體。此中樞會向目標 RDS for Oracle 資料庫執行個體提供資料。

![\[使用 Amazon RDS 的 Oracle GoldenGate 組態 2\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/oracle-gg2.png)


## Amazon EC2 來源資料庫和 Amazon EC2 中樞
<a name="Appendix.OracleGoldenGate.ec2-source-ec2-hub"></a>

在此案例中，Amazon EC2 執行個體上的 Oracle 資料庫做為來源資料庫使用。它連線至一個 Amazon EC2 執行個體。此中樞會向目標 RDS for Oracle 資料庫執行個體提供資料。

![\[使用 Amazon RDS 的 Oracle GoldenGate 組態 3\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/oracle-gg3.png)


## 不同區域中 AWS 的 Amazon EC2 中樞
<a name="Appendix.OracleGoldenGate.cross-region-hubs"></a>

在此案例中，Amazon RDS 資料庫執行個體上的 Oracle 資料庫會連線至相同區域中的 Amazon EC2 執行個體中樞 AWS 。中樞會連接到不同區域中的 Amazon EC2 執行個體中樞 AWS 。第二個中樞會將資料提供給與第二個 Amazon EC2 執行個體中樞位於相同 AWS 區域的目標 RDS for Oracle 資料庫執行個體。

![\[使用 Amazon RDS 的 Oracle GoldenGate 組態 4\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/oracle-gg4.png)


**注意**  
任何會影響在內部部署環境上執行 Oracle GoldenGate 的問題，也會影響在 AWS上執行 GoldenGate。強烈建議您監控 Oracle GoldenGate 中樞，以確保在容錯移轉發生時，`EXTRACT` 和 `REPLICAT` 仍可繼續執行。因為 Oracle GoldenGate 中樞在 Amazon EC2 執行個體上執行，Amazon RDS 不會管理 Oracle GoldenGate 中樞，也無法確保中樞一定正在執行。

# 設定 Oracle GoldenGate
<a name="Appendix.OracleGoldenGate.setting-up"></a>

若要使用 Amazon RDS 設定 Oracle GoldenGate，請在 Amazon EC2 執行個體上設定中樞，然後設定來源和目標資料庫。下列幾節提供一個範例，說明如何設定 Oracle GoldenGate，以與 Amazon RDS for Oracle 搭配使用。

**Topics**
+ [在 Amazon EC2 上設定 Oracle GoldenGate 中樞](#Appendix.OracleGoldenGate.Hub)
+ [設定來源資料庫與 Amazon RDS 上的 GoldenGate 搭配使用](#Appendix.OracleGoldenGate.Source)
+ [設定目標資料庫與 Amazon RDS 上的 Oracle GoldenGate 搭配使用](#Appendix.OracleGoldenGate.Target)

## 在 Amazon EC2 上設定 Oracle GoldenGate 中樞
<a name="Appendix.OracleGoldenGate.Hub"></a>

若要在 Amazon EC2 執行個體上建立 Oracle GoldenGate 中樞，請先建立 Amazon EC2 執行個體，其中具有 Oracle RDBMS 的完整用戶端安裝。Amazon EC2 執行個體也須已安裝 Oracle GoldenGate 軟體。Oracle GoldenGate 軟體版本取決於來源與目標資料庫版本。如需安裝 Oracle GoldenGatee 的詳細資訊，請參閱 [Oracle GoldenGate 文件](https://docs.oracle.com/en/middleware/goldengate/core/index.html)。

做為 Oracle GoldenGate 中樞的 Amazon EC2 執行個體，會處理來自來源資料庫的交易資訊並存放到線索檔案中。若要支援此程序，請確定您符合下列需求：
+ 您已針對追蹤檔案配置足夠的儲存體。
+ Amazon EC2 執行個體具有足夠的處理能力來管理資料量。
+ EC2 執行個體有足夠的記憶體來儲存交易資訊，然後再寫入追蹤檔案。

**在 Amazon EC2 執行個體上設定 Oracle GoldenGate 傳統架構中樞**

1. 建立 Oracle GoldenGate 目錄中的子目錄。

   在 Amazon EC2 命令列 shell 中，啟動 `ggsci` (Oracle GoldenGate 命令解譯器)。`CREATE SUBDIRS` 命令會在 `/gg` 目錄下建立參數、報告和檢查點檔案的子目錄。

   ```
   prompt$ cd /gg
   prompt$ ./ggsci
   
   GGSCI> CREATE SUBDIRS
   ```

1. 設定 `mgr.prm` 檔案。

   下列範例會將下列幾行新增至 `$GGHOME/dirprm/mgr.prm` 檔案。

   ```
   PORT 8199
   PurgeOldExtracts ./dirdat/*, UseCheckpoints, MINKEEPDAYS 5
   ```

1. 啟動管理員。

   下列範例會啟動 `ggsci` 並執行 `start mgr` 命令。

   ```
   GGSCI> start mgr
   ```

Oracle GoldenGate 中樞現在可供使用。

## 設定來源資料庫與 Amazon RDS 上的 GoldenGate 搭配使用
<a name="Appendix.OracleGoldenGate.Source"></a>

完成下列任務，設定來源資料庫以搭配 Oracle GoldenGate 使用。

**Topics**
+ [步驟 1：開啟來源資料庫上的補充記錄](#Appendix.OracleGoldenGate.Source.Logging)
+ [步驟 2：將 ENABLE\$1GOLDENGATE\$1REPLICATION 初始化參數設為 true](#Appendix.OracleGoldenGate.Source.enable-gg-rep)
+ [步驟 3：在來源資料庫上設定日誌保留期間](#Appendix.OracleGoldenGate.Source.Retention)
+ [步驟 4：在來源資料庫上建立 Oracle GoldenGate 使用者帳戶。](#Appendix.OracleGoldenGate.Source.Account)
+ [步驟 5：在來源資料庫上將帳戶權限授予使用者](#Appendix.OracleGoldenGate.Source.Privileges)
+ [步驟 6：新增來源資料庫的 TNS 別名](#Appendix.OracleGoldenGate.Source.TNS)

### 步驟 1：開啟來源資料庫上的補充記錄
<a name="Appendix.OracleGoldenGate.Source.Logging"></a>

若要開啟最低資料庫層級補充記錄，請執行下列 PL/SQL 程序：

```
EXEC rdsadmin.rdsadmin_util.alter_supplemental_logging(p_action => 'ADD')
```

### 步驟 2：將 ENABLE\$1GOLDENGATE\$1REPLICATION 初始化參數設為 true
<a name="Appendix.OracleGoldenGate.Source.enable-gg-rep"></a>

當您將 `ENABLE_GOLDENGATE_REPLICATION` 初始化參數設為 `true` 時，它會允許資料庫服務支援邏輯複寫。如果來源資料庫位於 Amazon RDS 資料庫執行個體，請確定將一個參數群組指派給 `ENABLE_GOLDENGATE_REPLICATION` 初始化參數設為 `true` 的資料庫執行個體。如需 `ENABLE_GOLDENGATE_REPLICATION` 初始化參數的詳細資訊，請參閱 [Oracle Database 文件](https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/ENABLE_GOLDENGATE_REPLICATION.html)。

### 步驟 3：在來源資料庫上設定日誌保留期間
<a name="Appendix.OracleGoldenGate.Source.Retention"></a>

請確定來源資料庫設定為保留封存的重做日誌。請考量下列準則：
+ 指定記錄保留的持續時間 (以小時為單位)。最小值為一小時 。
+ 將持續時間設定為超過來源資料庫執行個體的任何潛在停機時間、通訊的任何潛在期間，以及來源執行個體聯網問題的任何潛在期間。此持續時間可讓 Oracle GoldenGate 視需要從來源執行個體復原日誌。
+ 請確定執行個體有足夠的儲存空間可存放這些檔案。

例如，將封存重做日誌的保留期間設為 24 小時。

```
EXEC rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',24)
```

如果未啟用日誌保留，或如果保留值太小，您會收到如下訊息：

```
2022-03-06 06:17:27  ERROR   OGG-00446  error 2 (No such file or directory) 
opening redo log /rdsdbdata/db/GGTEST3_A/onlinelog/o1_mf_2_9k4bp1n6_.log for sequence 1306 
Not able to establish initial position for begin time 2022-03-06 06:16:55.
```

因為您的資料庫執行個體會保留您封存的重做日誌，所以請確定您有足夠的空間存放檔案。若要查看您在過去 *num\$1hours* 小時內已使用多少空間，請使用下列查詢，並將 *num\$1hours* 改為時數。

```
SELECT SUM(BLOCKS * BLOCK_SIZE) BYTES FROM V$ARCHIVED_LOG 
   WHERE NEXT_TIME>=SYSDATE-num_hours/24 AND DEST_ID=1;
```

### 步驟 4：在來源資料庫上建立 Oracle GoldenGate 使用者帳戶。
<a name="Appendix.OracleGoldenGate.Source.Account"></a>

Oracle GoldenGate 會以資料庫使用者身分執行，且需有適當的資料庫權限，才能存取來源資料庫的重做日誌和封存重做日誌。若要提供這些內容，在來源資料庫上建立使用者帳戶。如需 Oracle GoldenGate 使用者帳戶許可的詳細資訊，請參閱 [Oracle 文件](https://docs.oracle.com/en/middleware/goldengate/core/19.1/oracle-db/establishing-oracle-goldengate-credentials.html#GUID-79122058-27B0-4FB6-B3DC-B7D1B67EB053)。

下列陳述式會建立一個名為 `oggadm1` 的使用者帳戶。

```
CREATE TABLESPACE administrator;
CREATE USER oggadm1  IDENTIFIED BY "password"
   DEFAULT TABLESPACE ADMINISTRATOR TEMPORARY TABLESPACE TEMP;
ALTER USER oggadm1 QUOTA UNLIMITED ON administrator;
```

**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

### 步驟 5：在來源資料庫上將帳戶權限授予使用者
<a name="Appendix.OracleGoldenGate.Source.Privileges"></a>

在此任務中，您會將必要的帳戶權限授予來源資料庫上的資料庫使用者。

**在來源資料庫上授予帳戶權限**

1. 您可以使用 SQL 命令 `grant` 和 `rdsadmin.rdsadmin_util` 程序 `grant_sys_object`，將必要權限授予 Oracle GoldenGate 使用者帳戶。下列陳述式會將權限授予一個名為 `oggadm1` 的使用者。

   ```
   GRANT CREATE SESSION, ALTER SESSION TO oggadm1;
   GRANT RESOURCE TO oggadm1;
   GRANT SELECT ANY DICTIONARY TO oggadm1;
   GRANT FLASHBACK ANY TABLE TO oggadm1;
   GRANT SELECT ANY TABLE TO oggadm1;
   GRANT SELECT_CATALOG_ROLE TO rds_master_user_name WITH ADMIN OPTION;
   EXEC rdsadmin.rdsadmin_util.grant_sys_object ('DBA_CLUSTERS', 'OGGADM1');
   GRANT EXECUTE ON DBMS_FLASHBACK TO oggadm1;
   GRANT SELECT ON SYS.V_$DATABASE TO oggadm1;
   GRANT ALTER ANY TABLE TO oggadm1;
   ```

1. 授予將成為 Oracle GoldenGate 管理員之使用者帳戶所需的權限。執行下列 PL/SQL 程式。

   ```
   EXEC rdsadmin.rdsadmin_dbms_goldengate_auth.grant_admin_privilege (
       grantee                 => 'OGGADM1',
       privilege_type          => 'capture',
       grant_select_privileges => true, 
       do_grants               => TRUE);
   ```

   若要撤銷權限，請在同一套件中使用程序 `revoke_admin_privilege`。

### 步驟 6：新增來源資料庫的 TNS 別名
<a name="Appendix.OracleGoldenGate.Source.TNS"></a>

將下列項目新增至 Oracle 主目錄中要由 `EXTRACT` 程序使用的 `$ORACLE_HOME/network/admin/tnsnames.ora`。如需 `tnsnames.ora` 檔案的詳細資訊，請參閱 [Oracle 文件](https://docs.oracle.com/en/database/oracle/oracle-database/19/netrf/local-naming-parameters-in-tns-ora-file.html#GUID-7F967CE5-5498-427C-9390-4A5C6767ADAA)。

```
OGGSOURCE=
   (DESCRIPTION= 
        (ENABLE=BROKEN)
        (ADDRESS_LIST= 
            (ADDRESS=(PROTOCOL=TCP)(HOST=goldengate-source.abcdef12345.us-west-2.rds.amazonaws.com)(PORT=8200)))
        (CONNECT_DATA=(SERVICE_NAME=ORCL))
    )
```

## 設定目標資料庫與 Amazon RDS 上的 Oracle GoldenGate 搭配使用
<a name="Appendix.OracleGoldenGate.Target"></a>

在此任務中，您會設定目標資料庫執行個體與 Oracle GoldenGate 搭配使用。

**Topics**
+ [步驟 1：將 ENABLE\$1GOLDENGATE\$1REPLICATION 初始化參數設為 true](#Appendix.OracleGoldenGate.Target.enable-gg-rep)
+ [步驟 2：在目標資料庫上建立 Oracle GoldenGate 使用者帳戶](#Appendix.OracleGoldenGate.Target.User)
+ [步驟 3：在目標資料庫上授予帳戶權限](#Appendix.OracleGoldenGate.Target.Privileges)
+ [步驟 4：新增目標資料庫的 TNS 別名](#Appendix.OracleGoldenGate.Target.TNS)

### 步驟 1：將 ENABLE\$1GOLDENGATE\$1REPLICATION 初始化參數設為 true
<a name="Appendix.OracleGoldenGate.Target.enable-gg-rep"></a>

當您將 `ENABLE_GOLDENGATE_REPLICATION` 初始化參數設為 `true` 時，它會允許資料庫服務支援邏輯複寫。如果來源資料庫位於 Amazon RDS 資料庫執行個體，請確定將一個參數群組指派給 `ENABLE_GOLDENGATE_REPLICATION` 初始化參數設為 `true` 的資料庫執行個體。如需 `ENABLE_GOLDENGATE_REPLICATION` 初始化參數的詳細資訊，請參閱 [Oracle Database 文件](https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/ENABLE_GOLDENGATE_REPLICATION.html)。

### 步驟 2：在目標資料庫上建立 Oracle GoldenGate 使用者帳戶
<a name="Appendix.OracleGoldenGate.Target.User"></a>

Oracle GoldenGate 會以資料庫使用者身分執行，而且需要適當的資料庫權限。若要確定它具有這些權限，請在目標資料庫上建立一個使用者帳戶。

下列陳述式會建立一個名為 `oggadm1` 的使用者。

```
CREATE TABLESPSACE administrator;
CREATE USER oggadm1  IDENTIFIED BY "password" 
   DEFAULT TABLESPACE administrator 
   TEMPORARY TABLESPACE temp;
ALTER USER oggadm1 QUOTA UNLIMITED ON administrator;
```

**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

### 步驟 3：在目標資料庫上授予帳戶權限
<a name="Appendix.OracleGoldenGate.Target.Privileges"></a>

在此任務中，您會將必要的帳戶權限授予目標資料庫上的資料庫使用者。

**在目標資料庫上授予帳戶權限**

1. 您需要將必要權限授予目標資料庫上的 Oracle GoldenGate 使用者帳戶。在下列範例中，您會將權限授予 `oggadm1`。

   ```
   GRANT CREATE SESSION        TO oggadm1;
   GRANT ALTER SESSION         TO oggadm1;
   GRANT CREATE CLUSTER        TO oggadm1;
   GRANT CREATE INDEXTYPE      TO oggadm1;
   GRANT CREATE OPERATOR       TO oggadm1;
   GRANT CREATE PROCEDURE      TO oggadm1;
   GRANT CREATE SEQUENCE       TO oggadm1;
   GRANT CREATE TABLE          TO oggadm1;
   GRANT CREATE TRIGGER        TO oggadm1;
   GRANT CREATE TYPE           TO oggadm1;
   GRANT SELECT ANY DICTIONARY TO oggadm1;
   GRANT CREATE ANY TABLE      TO oggadm1;
   GRANT ALTER ANY TABLE       TO oggadm1;
   GRANT LOCK ANY TABLE        TO oggadm1;
   GRANT SELECT ANY TABLE      TO oggadm1;
   GRANT INSERT ANY TABLE      TO oggadm1;
   GRANT UPDATE ANY TABLE      TO oggadm1;
   GRANT DELETE ANY TABLE      TO oggadm1;
   ```

1. 授予將成為 Oracle GoldenGate 管理員之使用者帳戶所需的權限。執行下列 PL/SQL 程式。

   ```
   EXEC rdsadmin.rdsadmin_dbms_goldengate_auth.grant_admin_privilege (
       grantee                 => 'OGGADM1',
       privilege_type          => 'apply',
       grant_select_privileges => true, 
       do_grants               => TRUE);
   ```

   若要撤銷權限，請在同一套件中使用程序 `revoke_admin_privilege`。

### 步驟 4：新增目標資料庫的 TNS 別名
<a name="Appendix.OracleGoldenGate.Target.TNS"></a>

將下列項目新增至 Oracle 主目錄中要由 `REPLICAT` 程序使用的 `$ORACLE_HOME/network/admin/tnsnames.ora`。對於 Oracle 多租戶資料庫，請確定 TNS 別名指向 PDB 的服務名稱。如需 `tnsnames.ora` 檔案的詳細資訊，請參閱 [Oracle 文件](https://docs.oracle.com/en/database/oracle/oracle-database/19/netrf/local-naming-parameters-in-tns-ora-file.html#GUID-7F967CE5-5498-427C-9390-4A5C6767ADAA)。

```
OGGTARGET=
    (DESCRIPTION= 
        (ENABLE=BROKEN)
        (ADDRESS_LIST= 
            (ADDRESS=(PROTOCOL=TCP)(HOST=goldengate-target.abcdef12345.us-west-2.rds.amazonaws.com)(PORT=8200)))
        (CONNECT_DATA=(SERVICE_NAME=ORCL))
    )
```

# 使用 Oracle GoldenGate 的 EXTRACT 和 REPLICAT 公用程式
<a name="Appendix.OracleGoldenGate.ExtractReplicat"></a>

Oracle GoldenGate 公用程式 `EXTRACT` 和 `REPLICAT` 會一起利用追蹤檔案，並透過增量交易複寫，將來源和目標資料庫保持同步。來源資料庫上發生的所有變更皆由 `EXTRACT` 自動偵測，然後格式化並傳送至 Oracle GoldenGate 內部部署或 Amazon EC2 執行個體中樞。完成初始載入之後，`REPLICAT` 公用程式會從這些檔案讀取資料並複寫至目標資料庫。

## 執行 Oracle GoldenGate EXTRACT 公用程式
<a name="Appendix.OracleGoldenGate.Extract"></a>

`EXTRACT` 公用程式會從來源資料庫擷取、轉換及輸出資料至追蹤檔案。基本程序如下：

1. `EXTRACT` 會將交易詳細資訊排入記憶體或暫存磁碟儲存體。

1. 該來源資料庫會遞交該筆交易。

1. `EXTRACT` 會將交易詳細資訊寫入追蹤檔案。

1. 線索檔案會將這些詳細資訊路由到內部部署的 Oracle GoldenGate 或 Amazon EC2 執行個體中樞，然後再路由到目標資料庫。

下列步驟會啟動 `EXTRACT` 公用程式、從來源資料庫 `OGGSOURCE` 中的 `EXAMPLE.TABLE` 擷取資料，然後建立追蹤檔案。

**執行 EXTRACT 公用程式**

1. 在 Oracle GoldenGate 中樞 (內部部署或 Amazon EC2 執行個體) 上設定 `EXTRACT` 參數檔案。下列清單會顯示名為 `$GGHOME/dirprm/eabc.prm` 的範例 `EXTRACT` 參數檔案。

   ```
   EXTRACT EABC
    
   USERID oggadm1@OGGSOURCE, PASSWORD "my-password"
   EXTTRAIL /path/to/goldengate/dirdat/ab 
    
   IGNOREREPLICATES
   GETAPPLOPS
   TRANLOGOPTIONS EXCLUDEUSER OGGADM1
   	 
   TABLE EXAMPLE.TABLE;
   ```

1. 在 Oracle GoldenGate 中樞上，登入來源資料庫，並啟動 Oracle GoldenGate 命令列界面 `ggsci`。以下範例會顯示登入的格式。

   ```
   dblogin oggadm1@OGGSOURCE
   ```

1. 新增交易資料，開啟資料庫資料表的補充記錄。

   ```
   add trandata EXAMPLE.TABLE
   ```

1. 使用 `ggsci` 命令列，搭配下列命令來啟用 `EXTRACT` 公用程式。

   ```
   add extract EABC tranlog, INTEGRATED tranlog, begin now
   add exttrail /path/to/goldengate/dirdat/ab 
      extract EABC, 
      MEGABYTES 100
   ```

1. 向資料庫註冊 `EXTRACT` 公用程式，如此就不會刪除封存日誌。此任務可讓您在必要時復原未遞交的舊交易。若要向資料庫註冊 `EXTRACT` 公用程式，請使用下列命令。

   ```
   register EXTRACT EABC, DATABASE
   ```

1. 使用下列命令啟動 `EXTRACT` 公用程式。

   ```
   start EABC
   ```

## 執行 Oracle GoldenGate REPLICAT 公用程式
<a name="Appendix.OracleGoldenGate.Replicat"></a>

`REPLICAT` 公用程式會將追蹤檔案中的交易資訊「推送」至目標資料庫。

下列步驟會啟用並啟動 `REPLICAT` 公用程式，以便它可以將擷取的資料複寫到目標資料庫 `OGGTARGET` 中的資料表 `EXAMPLE.TABLE`。

**執行 REPLICATE 公用程式**

1. 在 Oracle GoldenGate 中樞 (內部部署或 EC2 執行個體) 上設定 `REPLICAT` 參數檔案。下列清單會顯示名為 `$GGHOME/dirprm/rabc.prm` 的範例 `REPLICAT` 參數檔案。

   ```
   REPLICAT RABC
    
   USERID oggadm1@OGGTARGET, password "my-password"
    
   ASSUMETARGETDEFS
   MAP EXAMPLE.TABLE, TARGET EXAMPLE.TABLE;
   ```
**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

1. 登入目標資料庫，然後啟動 Oracle GoldenGate 命令列界面 (`ggsci`)。以下範例會顯示登入的格式。

   ```
   dblogin userid oggadm1@OGGTARGET
   ```

1. 使用 `ggsci` 命令列，新增檢查點資料表。指明的使用者應該為 Oracle GoldenGate 使用者帳戶，而不是目標資料表結構描述擁有者。下列範例會建立名為 `gg_checkpoint` 的檢查點資料表。

   ```
   add checkpointtable oggadm1.oggchkpt
   ```

1. 若要啟用 `REPLICAT` 公用程式，請使用下列命令。

   ```
   add replicat RABC EXTTRAIL /path/to/goldengate/dirdat/ab CHECKPOINTTABLE oggadm1.oggchkpt 
   ```

1. 使用下列命令啟動 `REPLICAT` 公用程式。

   ```
   start RABC
   ```

# 監控 Oracle GoldenGate
<a name="Appendix.OracleGoldenGate.Monitoring"></a>

當您使用 Oracle GoldenGate 進行複製時，請確認已啟動執行 Oracle GoldenGate 程序，且來源和目標資料庫已同步。您可以使用下列監控工具：
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) 是一項監控服務，用於此模式來監控 GoldenGate 錯誤日誌。
+ [Amazon SNS](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/US_SetupSNS.html) 是一項訊息通知服務，用於此模式來傳送電子郵件通知。

如需詳細指示，請參閱[使用 Amazon CloudWatch 監控 Oracle GoldenGate 日誌](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/monitor-oracle-goldengate-logs-by-using-amazon-cloudwatch.html)。

# Oracle GoldenGate 疑難排解
<a name="Appendix.OracleGoldenGate.Troubleshooting"></a>

本節說明使用 Oracle GoldenGate 搭配 Amazon RDS for Oracle 時最常見的問題。

**Topics**
+ [開啟線上重做日誌時發生錯誤](#Appendix.OracleGoldenGate.Troubleshooting.Logs)
+ [Oracle GoldenGate 設定似乎正確，但複寫無法運作](#Appendix.OracleGoldenGate.Troubleshooting.Replication)
+ [由於 SYS."\$1DBA\$1APPLY\$1CDR\$1INFO" 上的查詢，整合式 REPLICAT 執行緩慢。](#Appendix.OracleGoldenGate.IR)

## 開啟線上重做日誌時發生錯誤
<a name="Appendix.OracleGoldenGate.Troubleshooting.Logs"></a>

確定您己將資料庫設定為保留封存的重做日誌。請考量下列準則：
+ 指定記錄保留的持續時間 (以小時為單位)。最小值為一小時 。
+ 將持續時間設定為超過來源資料庫執行個體的任何潛在停機時間、通訊的任何潛在期間，以及來源資料庫執行個體聯網問題的任何潛在期間。此持續時間可讓 Oracle GoldenGate 視需要從來源資料庫執行個體復原日誌。
+ 請確定執行個體有足夠的儲存空間可存放這些檔案。

如果未啟用日誌保留，或如果保留值太小，您會收到如下訊息：

```
2022-03-06 06:17:27  ERROR   OGG-00446  error 2 (No such file or directory) 
opening redo log /rdsdbdata/db/GGTEST3_A/onlinelog/o1_mf_2_9k4bp1n6_.log for sequence 1306 
Not able to establish initial position for begin time 2022-03-06 06:16:55.
```

## Oracle GoldenGate 設定似乎正確，但複寫無法運作
<a name="Appendix.OracleGoldenGate.Troubleshooting.Replication"></a>

針對既有的資料表，您必須指定 Oracle GoldenGate 從中運作的 SCN。

**修正此問題**

1. 登入來源資料庫，然後啟動 Oracle GoldenGate 命令列界面 (`ggsci`)。以下範例會顯示登入的格式。

   ```
   dblogin userid oggadm1@OGGSOURCE
   ```

1. 使用 `ggsci` 命令列，設定 `EXTRACT` 程序的起始 SCN。下列範例將 `EXTRACT` 的 SCN 設為 223274。

   ```
   ALTER EXTRACT EABC SCN 223274
   start EABC
   ```

1. 登入目標資料庫。以下範例會顯示登入的格式。

   ```
   dblogin userid oggadm1@OGGTARGET
   ```

1. 使用 `ggsci` 命令列，設定 `REPLICAT` 程序的起始 SCN。下列範例將 `REPLICAT` 的 SCN 設為 223274。

   ```
   start RABC atcsn 223274
   ```

## 由於 SYS."\$1DBA\$1APPLY\$1CDR\$1INFO" 上的查詢，整合式 REPLICAT 執行緩慢。
<a name="Appendix.OracleGoldenGate.IR"></a>

Oracle GoldenGate 衝突偵測與解決方案 (CDR) 提供了基本的衝突解決常式。例如，CDR 可以解決 `INSERT` 陳述式的唯一衝突。

當 CDR 解決碰撞時，它可以暫時地將記錄插入到例外資料表 `_DBA_APPLY_CDR_INFO`。整合的 `REPLICAT` 稍後會刪除這些記錄。在極少數情況下，整合的 `REPLICAT` 可以處理大量的碰撞，但新的整合 `REPLICAT` 不會取代它。不是被刪除，而是 `_DBA_APPLY_CDR_INFO` 中的現有資料列是孤立的。任何新的整合 `REPLICAT` 程序都會變慢，因為它們正在查詢 `_DBA_APPLY_CDR_INFO` 中的孤立資料列。

若要從 `_DBA_APPLY_CDR_INFO` 中移除所有資料列，請使用 Amazon RDS 程序 `rdsadmin.rdsadmin_util.truncate_apply$_cdr_info`。此程序是作為 2020 年 10 月發行版本和修補程式更新的一部分發行。此程序可在下列資料庫版本中提供：
+ [ 版本 21.0.0.0.ru-2022-01.rur-2022-01.r1](https://docs.aws.amazon.com/AmazonRDS/latest/OracleReleaseNotes/oracle-version-21-0.html#oracle-version-RU-RUR.21.0.0.0.ru-2022-01.rur-2022-01.r1) 和更新版本
+ [ 版本 19.0.0.0.ru-2020-10.rur-2020-10.r1](https://docs.aws.amazon.com/AmazonRDS/latest/OracleReleaseNotes/oracle-version-19-0.html#oracle-version-RU-RUR.19.0.0.0.ru-2020-10.rur-2020-10.r1) 和更新版本

下列範例會截斷資料表 `_DBA_APPLY_CDR_INFO`。

```
SET SERVEROUTPUT ON SIZE 2000
EXEC rdsadmin.rdsadmin_util.truncate_apply$_cdr_info;
```