

# Configuración de Oracle GoldenGate
<a name="Appendix.OracleGoldenGate.setting-up"></a>

Para configurar Oracle GoldenGate mediante Amazon RDS, tiene que configurar el hub en la instancia de Amazon EC2 y, a continuación, configurar las bases de datos de origen y de destino. Las siguientes secciones muestran un ejemplo de cómo configurar Oracle GoldenGate para usarlo con Amazon RDS para Oracle.

**Topics**
+ [Configuración de un hub de Oracle GoldenGate en Amazon EC2](#Appendix.OracleGoldenGate.Hub)
+ [Configuración de una base de datos de origen para usarla con Oracle GoldenGate en Amazon RDS](#Appendix.OracleGoldenGate.Source)
+ [Configuración de una base de datos de destino para Oracle GoldenGate en Amazon RDS](#Appendix.OracleGoldenGate.Target)

## Configuración de un hub de Oracle GoldenGate en Amazon EC2
<a name="Appendix.OracleGoldenGate.Hub"></a>

Para crear un hub de Oracle GoldenGate en una instancia de Amazon EC2, cree en primer lugar una instancia de Amazon EC2 con una instalación completa de cliente de Oracle DBMS. La instancia de Amazon EC2 también debe tener instalado el software GoldenGate de Oracle. Las versiones del software de Oracle GoldenGate dependen de las versiones de la base de datos de origen y destino. Para obtener más información acerca de la instalación de Oracle GoldenGate, consulte la [documentación de Oracle GolgenGate](https://docs.oracle.com/en/middleware/goldengate/core/index.html).

La instancia de Amazon EC2 que actúa de hub de Oracle GoldenGate almacena y procesa la información de las transacciones de la base de datos de origen a los archivos de trazado. Para admitir este proceso, asegúrese de que cumpla los siguientes requisitos:
+ Haber asignado suficiente espacio de almacenamiento para los archivos de seguimiento.
+ La instancia de Amazon EC2 tiene suficiente potencia de procesamiento para administrar la cantidad de datos.
+ La instancia EC2 tiene suficiente memoria para almacenar la información de transacción antes de que se escriba en el archivo de seguimiento.

**Para configurar un hub de arquitectura clásica de Oracle GoldenGate en una instancia Amazon EC2**

1. Cree los subdirectorios en el directorio de Oracle GoldenGate.

   En el shell de la línea de comandos de Amazon EC2, lance `ggsci`, el intérprete del comando de Oracle GoldenGate. El comando `CREATE SUBDIRS` crea subdirectorios bajo el directorio `/gg` para los archivos de parámetros, informes y puntos de comprobación.

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

1. Configure el archivo `mgr.prm`.

   El siguiente ejemplo añade líneas al archivo `$GGHOME/dirprm/mgr.prm`.

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

1. Inicie el administrador.

   En el siguiente ejemplo se lanza `ggsci` y se ejecuta el comando `start mgr`.

   ```
   GGSCI> start mgr
   ```

El hub de Oracle GoldenGate ya se puede utilizar.

## Configuración de una base de datos de origen para usarla con Oracle GoldenGate en Amazon RDS
<a name="Appendix.OracleGoldenGate.Source"></a>

Complete las siguientes tareas para configurar una base de datos de origen con el fin de utilizarla con Oracle GoldenGate.

**Topics**
+ [Paso 1: activar el registro suplementario en la base de datos de origen](#Appendix.OracleGoldenGate.Source.Logging)
+ [Paso 2: establecer el parámetro de inicialización ENABLE\$1GOLDENGATE\$1REPLICATION en verdadero](#Appendix.OracleGoldenGate.Source.enable-gg-rep)
+ [Paso 3: establecer el período de retención del registro en la base de datos de origen](#Appendix.OracleGoldenGate.Source.Retention)
+ [Paso 4: crear una cuenta de usuario de Oracle GoldenGate en la base de datos de origen](#Appendix.OracleGoldenGate.Source.Account)
+ [Paso 5: conceder privilegios al usuario en la base de datos de origen](#Appendix.OracleGoldenGate.Source.Privileges)
+ [Paso 6: agregar un alias de TNS para la base de datos de origen](#Appendix.OracleGoldenGate.Source.TNS)

### Paso 1: activar el registro suplementario en la base de datos de origen
<a name="Appendix.OracleGoldenGate.Source.Logging"></a>

Para activar el registro suplementario mínimo en el nivel de la base de datos, ejecute el siguiente procedimiento PL/SQL: 

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

### Paso 2: establecer el parámetro de inicialización ENABLE\$1GOLDENGATE\$1REPLICATION en verdadero
<a name="Appendix.OracleGoldenGate.Source.enable-gg-rep"></a>

Al establecer el parámetro de inicialización `ENABLE_GOLDENGATE_REPLICATION` en `true`, permite que los servicios de bases de datos admitan la replicación lógica. Si la base de datos de origen está en una instancia de base de datos de Amazon RDS, asegúrese de asignar un grupo de parámetros a dicha instancia de base de datos con el parámetro de inicialización `ENABLE_GOLDENGATE_REPLICATION` establecido en `true`. Para obtener más información acerca del parámetro de inicialización `ENABLE_GOLDENGATE_REPLICATION`, consulte la [documentación de la base de datos de Oracle](https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/ENABLE_GOLDENGATE_REPLICATION.html).

### Paso 3: establecer el período de retención del registro en la base de datos de origen
<a name="Appendix.OracleGoldenGate.Source.Retention"></a>

Asegúrese de configurar la base de datos de origen para retener los registros redo archivados. Tenga en cuenta estas directrices:
+ Especifique la duración de la retención de registros en horas. El valor mínimo es una hora.
+ Establezca la duración de manera que supere cualquier posible periodo de inactividad de la instancia de base de datos de origen, cualquier posible periodo de comunicación y cualquier posible periodo de problemas de red para dicha instancia de origen. Dicha duración permite a Oracle GoldenGate recuperar registros de la instancia de origen según sea necesario.
+ Asegúrese de que dispone de suficiente almacenamiento en la instancia para los archivos.

Por ejemplo, establezca el período de retención para los registros REDO archivados en 24 horas.

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

Si no tiene la retención de registros habilitada, o bien si el valor de retención es demasiado pequeño, recibirá un mensaje de error similar al siguiente.

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

Dado que la instancia de base de datos conserva los registros redo archivados, asegúrese de tener suficiente espacio para los archivos. Para ver cuánto espacio ha utilizado en las últimas *num\$1hours* horas, utilice la siguiente consulta, sustituyendo *num\$1hours* por el número de horas.

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

### Paso 4: crear una cuenta de usuario de Oracle GoldenGate en la base de datos de origen
<a name="Appendix.OracleGoldenGate.Source.Account"></a>

Oracle GoldenGate se ejecuta como usuario de base de datos y requiere los privilegios de base de datos apropiados para obtener acceso a los registros redo y redo archivados para la base de datos de origen. Para proporcionarlos, cree una cuenta de usuario en la base de datos de origen. Para obtener más información sobre los permisos para una cuenta de usuario de Oracle GoldenGate, consulte la [documentación de Oracle](https://docs.oracle.com/en/middleware/goldengate/core/19.1/oracle-db/establishing-oracle-goldengate-credentials.html#GUID-79122058-27B0-4FB6-B3DC-B7D1B67EB053).

Las siguientes instrucciones crean una cuenta de usuario llamada `oggadm1`. 

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

**nota**  
Especifique una contraseña distinta de la que se muestra aquí como práctica recomendada de seguridad.

### Paso 5: conceder privilegios al usuario en la base de datos de origen
<a name="Appendix.OracleGoldenGate.Source.Privileges"></a>

En esta tarea, concederá los privilegios de cuenta necesarios a los usuarios de la base de datos de la base de datos de origen.

**Para conceder privilegios a la cuenta en la base de datos de origen**

1. Conceda los privilegios necesarios a la cuenta de usuario de Oracle GoldenGate mediante el comando SQL `grant` y el procedimiento `grant_sys_object` de `rdsadmin.rdsadmin_util`. Las siguientes instrucciones conceden privilegios a un usuario llamado `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. Otorgue los privilegios necesarios para que una cuenta de usuario sea administrador de Oracle GoldenGate. Ejecute el siguiente programa PL/SQL.

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

   Para revocar privilegios, utilice el procedimiento `revoke_admin_privilege` en el mismo paquete.

### Paso 6: agregar un alias de TNS para la base de datos de origen
<a name="Appendix.OracleGoldenGate.Source.TNS"></a>

Agregue la siguiente entrada a `$ORACLE_HOME/network/admin/tnsnames.ora` en el directorio raíz de Oracle que utilizará el proceso `EXTRACT`. Para obtener más información sobre el archivo `tnsnames.ora`, consulte la [documentación de 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))
    )
```

## Configuración de una base de datos de destino para Oracle GoldenGate en Amazon RDS
<a name="Appendix.OracleGoldenGate.Target"></a>

En esta tarea, debe configurar una instancia de base de datos de destino para usarla con Oracle GoldenGate.

**Topics**
+ [Paso 2: establecer el parámetro de inicialización ENABLE\$1GOLDENGATE\$1REPLICATION en verdadero](#Appendix.OracleGoldenGate.Target.enable-gg-rep)
+ [Paso 2: crear una cuenta de usuario de Oracle GoldenGate en la base de datos de destino](#Appendix.OracleGoldenGate.Target.User)
+ [Paso 3: otorgar privilegios de cuenta en la base de datos de destino](#Appendix.OracleGoldenGate.Target.Privileges)
+ [Paso 4: agregar un alias de TNS para la base de datos de destino](#Appendix.OracleGoldenGate.Target.TNS)

### Paso 2: establecer el parámetro de inicialización ENABLE\$1GOLDENGATE\$1REPLICATION en verdadero
<a name="Appendix.OracleGoldenGate.Target.enable-gg-rep"></a>

Al establecer el parámetro de inicialización `ENABLE_GOLDENGATE_REPLICATION` en `true`, permite que los servicios de bases de datos admitan la replicación lógica. Si la base de datos de origen está en una instancia de base de datos de Amazon RDS, asegúrese de asignar un grupo de parámetros a dicha instancia de base de datos con el parámetro de inicialización `ENABLE_GOLDENGATE_REPLICATION` establecido en `true`. Para obtener más información acerca del parámetro de inicialización `ENABLE_GOLDENGATE_REPLICATION`, consulte la [documentación de la base de datos de Oracle](https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/ENABLE_GOLDENGATE_REPLICATION.html).

### Paso 2: crear una cuenta de usuario de Oracle GoldenGate en la base de datos de destino
<a name="Appendix.OracleGoldenGate.Target.User"></a>

Oracle GoldenGate se ejecuta como usuario de base de datos y requiere los privilegios de base de datos apropiados. Para asegurarse de que los tiene, cree una cuenta de usuario en la base de datos de destino.

La siguiente instrucción crea una cuenta de usuario llamada `oggadm1`.

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

**nota**  
Especifique una contraseña distinta de la que se muestra aquí como práctica recomendada de seguridad.

### Paso 3: otorgar privilegios de cuenta en la base de datos de destino
<a name="Appendix.OracleGoldenGate.Target.Privileges"></a>

En esta tarea, concederá los privilegios de cuenta necesarios a los usuarios de la base de datos en la base de datos de destino.

**Para otorgar privilegios de cuenta en la base de datos de destino**

1. Otorgue los privilegios necesarios a la cuenta de usuario de Oracle GoldenGate en la base de datos de destino. En el siguiente ejemplo, otorgará privilegios a `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. Otorgue los privilegios necesarios para que una cuenta de usuario sea administrador de Oracle GoldenGate. Ejecute el siguiente programa PL/SQL.

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

   Para revocar privilegios, utilice el procedimiento `revoke_admin_privilege` en el mismo paquete.

### Paso 4: agregar un alias de TNS para la base de datos de destino
<a name="Appendix.OracleGoldenGate.Target.TNS"></a>

Agregue la siguiente entrada a `$ORACLE_HOME/network/admin/tnsnames.ora` en el directorio raíz de Oracle que utilizará el proceso `REPLICAT`. Para las bases de datos Oracle Multitenant, asegúrese de que el alias TNS apunte hacia el nombre del servicio de la PDB. Para obtener más información sobre el archivo `tnsnames.ora`, consulte la [documentación de 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))
    )
```