

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

# 設定 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))
    )
```