

# Oracle GoldenGate のセットアップ
<a name="Appendix.OracleGoldenGate.setting-up"></a>

Amazon RDS を使用して Oracle GoldenGate をセットアップするには、Amazon EC2 インスタンス上にハブを設定し、ソースデータベースとターゲットデータベースを設定します。以下のセクションは、Amazon RDS for Oracle で使用するために Oracle GoldenGate を設定する方法を示しています。

**Topics**
+ [Amazon EC2 での Oracle GoldenGate ハブのセットアップ](#Appendix.OracleGoldenGate.Hub)
+ [Amazon RDS の Oracle 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 ハブを作成するには、まず Oracle RDBMS の完全なクライアントインストールで Amazon EC2 インスタンスを作成します。Amazon EC2 インスタンスには、Oracle GoldenGate ソフトウェアもインストールしている必要があります。Oracle GoldenGate ソフトウェアのバージョンは、ソースおよびターゲットのデータベースのバージョンにより決定されます。Oracle GoldenGate のインストールの詳細については、[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 コマンドラインシェルで、Oracle GoldenGate コマンドインタープリタ `ggsci` を起動します。`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 の Oracle 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 DB インスタンスにある場合、`ENABLE_GOLDENGATE_REPLICATION` インストールパラメータを `true` に設定して、DB インスタンスにパラメータグループを割り当てる必要があります。`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>

アーカイブされた REDO ログを保持するようにソースデータベースを必ず設定してください。以下のガイドラインを検討します。
+ ログの保持期間を時間単位で指定します。最小値は 1 時間です。
+ この期間は、ソース DB インスタンスの潜在的なダウンタイム、潜在的な通信期間、ソースインスタンスのネットワーク問題の潜在的な期間を超えるように設定します。このような期間により、Oracle GoldenGate は必要に応じて出典インスタンスからログを復元できます。
+ ファイル用の十分なストレージがインスタンスにあることを確認します。

例えば、アーカイブ REDO ログの保持期間を 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.
```

DB インスタンスにはアーカイブされた REDO ログが保持されるため、ファイル用の十分なスペースがあることを確認してください。過去 *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 はデータベースユーザーとして実行され、出典データベースの REDO ログとアーカイブ REDO ログにアクセスするには、適切なデータベース権限が必要です。これらを指定するには、ソースデータベースにユーザーアカウントを作成します。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_HOME/network/admin/tnsnames.ora` プロセスで使用する Oracle Home で、次のエントリを `EXTRACT` に追加します。`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 で使用するターゲット DB インスタンスを設定します。

**Topics**
+ [ステップ 1: ENABLE\$1GOLDENGATE\$1REPLICATION 初期化パラメータを true に設定する](#Appendix.OracleGoldenGate.Target.enable-gg-rep)
+ [ステップ 2: ターゲットデータベースで 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 DB インスタンスにある場合、`ENABLE_GOLDENGATE_REPLICATION` インストールパラメータを `true` に設定して、DB インスタンスにパラメータグループを割り当てる必要があります。`ENABLE_GOLDENGATE_REPLICATION` の初期化パラメータの詳細については、[Oracle Database のドキュメント](https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/ENABLE_GOLDENGATE_REPLICATION.html)を参照してください。

### ステップ 2: ターゲットデータベースで 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_HOME/network/admin/tnsnames.ora` プロセスで使用する Oracle Home で、次のエントリを `REPLICAT` に追加します。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))
    )
```