

# Amazon RDS for Oracle과 함께 Oracle GoldenGate 사용
<a name="Appendix.OracleGoldenGate"></a>

Oracle GoldenGate는 데이터베이스 간 트랜잭션 데이터를 수집, 복제 및 관리합니다. 온라인 트랜잭션 처리(OLTP) 시스템에서 데이터베이스와 함께 사용하는 로그 기반 변경 데이터 캡처(CDC) 및 복제 소프트웨어 패키지입니다. Oracle GoldenGate는 원본 데이터베이스에서 가장 최근에 변경된 데이터를 포함하는 추적 파일을 생성합니다. 그런 다음 이러한 파일을 서버로 푸시하고, 서버에서는 트레일 파일을 표준 SQL로 변환하여 대상 데이터베이스에 적용하는 프로세스가 진행됩니다.

RDS for Oracle을 사용하는 Oracle GoldenGate는 다음 기능을 지원합니다.
+ 활성/활성 데이터베이스 복제
+ 재해 복구
+ 데이터 보호
+ 리전 내 및 리전 간 복제
+ 제로 가동 중지 마이그레이션 및 업그레이드
+ RDS for Oracle DB 인스턴스와 비 Oracle 데이터베이스 간 데이터 복제
**참고**  
지원되는 데이터베이스 목록은 Oracle 설명서에서 [Oracle Fusion Middleware 지원 시스템 구성](https://www.oracle.com/middleware/technologies/fusion-certification.html)을 참조하십시오.

RDS for Oracle이 포함된 Oracle GoldenGate를 사용하여 Oracle Database의 메이저 버전으로 업그레이드할 수 있습니다. 예를 들어 Oracle GoldenGate를 사용하여 Oracle Database 11g 온프레미스 데이터베이스를 Amazon RDS DB 인스턴스의 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 포함 RDS for Oracle 버전 12c 이상의 Standard Edition 2(SE2) 또는 Enterprise Edition(EE)을 사용할 수 있습니다. 다음 Oracle GoldenGate 기능을 사용할 수 있습니다.
+ Oracle GoldenGate Remote Capture(추출)가 지원됩니다.
+ Capture(추출)는 기존 비 CDB 데이터베이스 아키텍처를 사용하는 RDS for Oracle DB 인스턴스에서 지원됩니다. Oracle GoldenGate 원격 PDB 캡처는 Oracle Database 21c 또는 Oracle Database 19c 버전 19.0.0.0.ru-2024-04.rur-2024-04.r1 이상을 실행하는 CDB에서 지원됩니다.
+ Oracle GoldenGate Remote Delivery(복제)는 CDB가 아닌 아키텍처나 CDB 아키텍처를 사용하는 RDS for Oracle DB 인스턴스에서 지원됩니다. Remote Delivery는 Integrated Replicat(통합 복제), Parallel Replicat(병렬 복제), Coordinated Replicat(조정 복제) 및 클래식 Replicat(복제)를 지원합니다.
+ RDS for Oracle은 Oracle GoldenGate의 Classic(클래식) 및 Microservices(마이크로서비스) 아키텍처를 지원합니다.
+ Oracle GoldenGate DDL과 Sequence(시퀀스) 값 복제는 Integrated(통합) 캡처 모드를 사용할 때 지원됩니다.

사용자는 모든 AWS 리전에서 Amazon RDS와 함께 사용하는 데 필요한 Oracle GoldenGate 라이선싱(BYOL)을 관리해야 합니다. 자세한 내용은 [RDS for Oracle 라이선스 옵션](Oracle.Concepts.Licensing.md) 섹션을 참조하세요.

## Oracle GoldenGate의 요구 사항 및 제한 사항
<a name="Appendix.OracleGoldenGate.requirements"></a>

Oracle GoldenGate 및 RDS for Oracle을 작업할 때는 다음 요구 사항과 제한 사항을 고려해야 합니다.
+ 사용자는 RDS for Oracle과 함께 사용할 수 있도록 Oracle GoldenGate를 설정하고 관리해야 합니다.
+ 소스 및 대상 데이터베이스를 이용해 인증한 Oracle GoldenGate 버전을 설정하는 것은 사용자의 책임입니다. 자세한 내용은 Oracle 설명서에서 [Oracle Fusion Middleware 지원 시스템 구성](https://www.oracle.com/middleware/technologies/fusion-certification.html)을 참조하십시오.
+ Oracle GoldenGate는 다양한 AWS 환경에서 다양한 사용 사례에 사용할 수 있습니다. Oracle GoldenGate와 관련된 지원 관련 문제가 있다면 Oracle Support Services에 문의하십시오.
+ Oracle Transparent Data Encryption(TDE)을 사용하는 RDS for Oracle DB 인스턴스에서 Oracle GoldenGate를 사용할 수 있습니다. 복제된 데이터의 무결성을 유지 관리하려면 Amazon EBS 암호화된 볼륨 또는 추적 파일 암호화를 사용하여 Oracle GoldenGate 허브에서 암호화를 구성합니다. 또한 Oracle GoldenGate 허브와 원본 및 대상 데이터베이스 인스턴스 간에 전송되는 데이터에 대한 암호화를 구성합니다. RDS for Oracle DB 인스턴스는 [Oracle 보안 소켓 Layer](Appendix.Oracle.Options.SSL.md) 또는 [Oracle 기본 네트워크 암호화](Appendix.Oracle.Options.NetworkEncryption.md)을 사용하여 암호화를 지원합니다.

# Oracle GoldenGate 아키텍처
<a name="Appendix.OracleGoldenGate.Overview"></a>

Amazon RDS용 OracleGoldenGate 아키텍처는 다음과 같은 분리된 모듈로 구성됩니다.

원본 데이터베이스  
원본 데이터베이스는 온프레미스 Oracle 데이터베이스, Amazon EC2 인스턴스의 Oracle 데이터베이스 또는 Amazon RDS DB 인스턴스의 Oracle 데이터베이스입니다.

Oracle GoldenGate 허브  
Oracle GoldenGate 허브는 트랜잭션 정보를 원본 데이터베이스에서 대상 데이터베이스로 이동합니다. 허브는 다음 중 하나일 수 있습니다.  
+ Oracle 데이터베이스 및 Oracle GoldenGate가 설치된 Amazon EC2 인스턴스
+ 온프레미스 Oracle 설치
2개 이상의 Amazon EC2 허브가 있을 수 있습니다. 리전 간 복제에 Oracle GoldenGate를 사용하는 경우 허브를 2개 사용하는 것이 좋습니다.

대상 데이터베이스:  
대상 데이터베이스는 Amazon RDS DB 인스턴스, 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 DB 인스턴스에 데이터를 제공합니다.

![\[Amazon RDS를 사용하는 Oracle GoldenGate 구성 0\]](http://docs.aws.amazon.com/ko_kr/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 DB 인스턴스에 데이터를 제공합니다.

![\[Amazon RDS를 사용하는 Oracle GoldenGate 구성 1\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/oracle-gg1.png)


## Amazon RDS 원본 데이터베이스 및 Amazon EC2 허브
<a name="Appendix.OracleGoldenGate.rds-source-ec2-hub"></a>

이 시나리오에서는 RDS for Oracle DB 인스턴스가 원본 데이터베이스 역할을 합니다. 이 데이터베이스가 Amazon EC2 인스턴스 허브에 연결됩니다. 이 허브는 대상 RDS for Oracle DB 인스턴스에 데이터를 제공합니다.

![\[Amazon RDS를 사용하는 Oracle GoldenGate 구성 2\]](http://docs.aws.amazon.com/ko_kr/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 DB 인스턴스에 데이터를 제공합니다.

![\[Amazon RDS를 사용하는 Oracle GoldenGate 구성 3\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/oracle-gg3.png)


## 서로 다른 여러 AWS 리전의 Amazon EC2 허브
<a name="Appendix.OracleGoldenGate.cross-region-hubs"></a>

이 시나리오에서는 Amazon RDS DB 인스턴스의 Oracle 데이터베이스가 동일한 AWS 리전의 Amazon EC2 인스턴스 허브에 연결되어 있습니다. 허브는 다른 AWS 리전의 Amazon EC2 인스턴스 허브에 연결되어 있습니다. 이 두 번째 허브는 두 번째 Amazon EC2 인스턴스 허브와 동일한 AWS 리전의 대상 RDS for Oracle DB 인스턴스에 데이터를 제공합니다.

![\[Amazon RDS를 사용하는 Oracle GoldenGate 구성 4\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/oracle-gg4.png)


**참고**  
온프레미스 환경에서 Oracle GoldenGate를 실행하는 데 영향을 미치는 문제는 AWS에서 Oracle 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 인스턴스에서 허브를 구성한 후 소스 및 대상 데이터베이스를 구성해야 합니다. 다음 섹션에서는 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 DBMS의 전체 클라이언트 설치가 완료된 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 인스턴스에 있는 경우 파라미터 그룹을 DB 인스턴스에 할당하고 `ENABLE_GOLDENGATE_REPLICATION` 초기화 파라미터를 `true`로 설정해야 합니다. `ENABLE_GOLDENGATE_REPLICATION` 초기화 파라미터에 대한 자세한 내용은 [Oracle 데이터베이스 설명서](https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/ENABLE_GOLDENGATE_REPLICATION.html)를 참조하세요.

### 3단계: 소스 데이터베이스에서 로그 보존 기간 설정
<a name="Appendix.OracleGoldenGate.Source.Retention"></a>

보관된 다시 실행 로그를 유지하도록 원본 데이터베이스를 구성했는지 확인합니다. 다음 지침을 참고하세요.
+ 로그 보존 기간을 시간 단위로 지정합니다. 최소값은 1시간입니다.
+ 소스 DB 인스턴스의 잠재적 가동 중지 시간, 잠재적 통신 시간, 소스 인스턴스의 네트워킹 문제가 발생할 잠재적 기간보다 긴 기간을 설정합니다. 이러한 기간을 통해 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.
```

DB 인스턴스는 보관된 다시 실행 로그를 보관하니, 파일을 저장할 공간이 충분한지 확인해야 합니다. 지난 *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 홈의 `$ORACLE_HOME/network/admin/tnsnames.ora`에 다음 항목을 추가하여 `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단계: 대상 데이터베이스에서 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 DB 인스턴스에 있는 경우 파라미터 그룹을 DB 인스턴스에 할당하고 `ENABLE_GOLDENGATE_REPLICATION` 초기화 파라미터를 `true`로 설정해야 합니다. `ENABLE_GOLDENGATE_REPLICATION` 초기화 파라미터에 대한 자세한 내용은 [Oracle 데이터베이스 설명서](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 홈의 `$ORACLE_HOME/network/admin/tnsnames.ora`에 다음 항목을 추가하여 `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))
    )
```

# 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` 유틸리티는 트레일 파일의 트랜잭션 정보를 대상 데이터베이스로 "푸시"합니다.

다음 단계는 캡처된 데이터를 대상 데이터베이스 `OGGTARGET`의 `EXAMPLE.TABLE` 테이블에 복제할 수 있도록 `REPLICAT` 유틸리티를 활성화하고 시작합니다.

**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>

이 섹션에서는 Amazon RDS for Oracle과 함께 Oracle GoldenGate를 사용할 때 가장 자주 발생하는 문제를 설명합니다.

**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>

보관된 다시 실행 로그를 유지하도록 소스 데이터베이스를 구성했는지 확인합니다. 다음 지침을 참고하세요.
+ 로그 보존 기간을 시간 단위로 지정합니다. 최소값은 1시간입니다.
+ 소스 DB 인스턴스의 잠재적 가동 중지 시간, 잠재적 통신 시간, 소스 DB 인스턴스의 네트워킹 문제가 발생할 잠재적 기간보다 긴 기간을 설정합니다. 이러한 기간을 통해 Oracle GoldenGate는 필요에 따라 소스 DB 인스턴스에서 로그를 복구할 수 있습니다.
+ 인스턴스에 파일을 저장할 스토리지가 충분한지 확인합니다.

로그 보존을 활성화하지 않거나 보존 값이 너무 작으면 다음과 비슷한 오류 메시지가 표시됩니다.

```
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;
```