

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

Para configurar o Oracle GoldenGate usando o Amazon RDS, configure o hub em uma instância do Amazon EC2 e, depois, configure os bancos de dados de origem e de destino. As seções a seguir fornecem um exemplo de como configurar o Oracle GoldenGate para uso com o Amazon RDS para Oracle.

**Topics**
+ [Configurar um hub do Oracle GoldenGate no Amazon EC2](#Appendix.OracleGoldenGate.Hub)
+ [Configurar um banco de dados de origem para uso com o Oracle GoldenGate no Amazon RDS](#Appendix.OracleGoldenGate.Source)
+ [Configurar um banco de dados de destino para uso com o Oracle GoldenGate no Amazon RDS](#Appendix.OracleGoldenGate.Target)

## Configurar um hub do Oracle GoldenGate no Amazon EC2
<a name="Appendix.OracleGoldenGate.Hub"></a>

Para criar um hub do Oracle GoldenGate em uma instância do Amazon EC2, crie primeiro uma instância do Amazon EC2 com uma instalação completa do cliente do Oracle RDBMS. A instância do Amazon EC2 também deve ter o software do Oracle GoldenGate instalado. As versões do software Oracle GoldenGate dependem das versões dos bancos de dados de origem e de destino. Para obter mais informações sobre a instalação do Oracle GoldenGate, consulte a [documentação do Oracle GoldenGate](https://docs.oracle.com/en/middleware/goldengate/core/index.html).

A instância do Amazon EC2 que serve como o hub do GoldenGate armazena e processa as informações de transação da fonte do banco de dados em arquivos de trilha. Para que esse processo seja aceito, atenda às seguintes condições:
+ Você alocou armazenamento suficiente para os arquivos de trilha.
+ A instância do Amazon EC2 tem poder de processamento suficiente para gerenciar a quantidade de dados.
+ Além disso, certifique-se de que a instância do EC2 tenha memória suficiente para armazenar as informações de transação antes delas serem gravadas no arquivo de trilha.

**Como definir um hub de configuração de arquitetura clássica do Oracle GoldenGate em uma instância do Amazon EC2**

1. Crie os subdiretórios no diretório do Oracle GoldenGate.

   No shell da linha de comando do Amazon EC2, inicie o `ggsci`, o interpretador de comandos do Oracle GoldenGate. O comando `CREATE SUBDIRS` cria subdiretórios no diretório `/gg` para arquivos de parâmetros, relatórios e ponto de verificação.

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

1. Configure o arquivo `mgr.prm`.

   O exemplo a seguir adiciona linhas ao arquivo `$GGHOME/dirprm/mgr.prm`.

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

1. Inicie o gerente.

   O exemplo a seguir inicia o `ggsci` e executa o comando `start mgr`.

   ```
   GGSCI> start mgr
   ```

O hub do Oracle GoldenGate agora está pronto para uso.

## Configurar um banco de dados de origem para uso com o Oracle GoldenGate no Amazon RDS
<a name="Appendix.OracleGoldenGate.Source"></a>

Conclua as tarefas a seguir para configurar um banco de dados de origem a ser usado com o Oracle GoldenGate.

**Topics**
+ [Etapa 1: Ativar o registro em log complementar no banco de dados de origem](#Appendix.OracleGoldenGate.Source.Logging)
+ [Etapa 2: Definir o parâmetro de inicialização ENABLE\$1GOLDENGATE\$1REPLICATION como true](#Appendix.OracleGoldenGate.Source.enable-gg-rep)
+ [Etapa 3: Definir o período de retenção de log no banco de dados de origem](#Appendix.OracleGoldenGate.Source.Retention)
+ [Etapa 4: Criar uma conta do usuário do Oracle GoldenGate no banco de dados de origem](#Appendix.OracleGoldenGate.Source.Account)
+ [Etapa 5: Conceder privilégios ao usuário no banco de dados de origem](#Appendix.OracleGoldenGate.Source.Privileges)
+ [Etapa 6: Adicionar um alias TNS ao banco de dados de origem](#Appendix.OracleGoldenGate.Source.TNS)

### Etapa 1: Ativar o registro em log complementar no banco de dados de origem
<a name="Appendix.OracleGoldenGate.Source.Logging"></a>

Para ativar o registro complementar mínimo em nível de banco de dados, execute o seguinte procedimento PL/SQL: 

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

### Etapa 2: Definir o parâmetro de inicialização ENABLE\$1GOLDENGATE\$1REPLICATION como true
<a name="Appendix.OracleGoldenGate.Source.enable-gg-rep"></a>

Quando você define o parâmetro de inicialização `ENABLE_GOLDENGATE_REPLICATION` como `true`, ele permite que os serviços de banco de dados sejam compatíveis com a replicação lógica. Se o banco de dados de origem estiver em uma instância de banco de dados do Amazon RDS, tenha um grupo de parâmetros atribuído à instância de banco de dados com o parâmetro de inicialização `ENABLE_GOLDENGATE_REPLICATION` definido como `true`. Para obter mais informações sobre o parâmetro de inicialização `ENABLE_GOLDENGATE_REPLICATION`, consulte a [documentação do banco de dados Oracle](https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/ENABLE_GOLDENGATE_REPLICATION.html).

### Etapa 3: Definir o período de retenção de log no banco de dados de origem
<a name="Appendix.OracleGoldenGate.Source.Retention"></a>

Configure o banco de dados de origem para reter os redo logs arquivados. Considere as seguintes diretrizes:
+ Especifique a duração da retenção de log em horas. O valor mínimo é uma hora.
+ Defina a duração para exceder qualquer tempo de inatividade possível, qualquer período de comunicação possível e qualquer período de problemas de rede possível com a instância de origem. Essa duração permite que o Oracle GoldenGate recupere logs da instância de origem de acordo com a necessidade.
+ Verifique se você tem armazenamento suficiente na instância para os arquivos.

Por exemplo, defina o período de retenção para logs redo arquivados como 24 horas.

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

Se você não tiver a retenção de logs ativada, ou se o valor de retenção for muito pequeno, receberá uma mensagem de erro semelhante à seguinte.

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

Como sua instância de banco de dados retém seus redo logs arquivados, verifique se você tem espaço suficiente para os arquivos. Para ver quanto espaço você usou nas últimas *num\$1hours* horas, use a consulta a seguir, substituindo *num\$1hours* pelo 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;
```

### Etapa 4: Criar uma conta do usuário do Oracle GoldenGate no banco de dados de origem
<a name="Appendix.OracleGoldenGate.Source.Account"></a>

O Oracle GoldenGate é executado como usuário de banco de dados e requer os privilégios apropriados para acessar os redo logs e redo logs arquivados do banco de dados de origem. Para concedê-los, crie uma conta do usuário no banco de dados de origem. Para obter mais informações sobre as permissões para uma conta de usuário do GoldenGate, consulte a [documentação do Oracle](https://docs.oracle.com/en/middleware/goldengate/core/19.1/oracle-db/establishing-oracle-goldengate-credentials.html#GUID-79122058-27B0-4FB6-B3DC-B7D1B67EB053).

As instruções a seguir criam uma conta do usuário denominada `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 uma senha diferente do prompt mostrado aqui como prática recomendada de segurança.

### Etapa 5: Conceder privilégios ao usuário no banco de dados de origem
<a name="Appendix.OracleGoldenGate.Source.Privileges"></a>

Nessa tarefa, você concede os privilégios de conta necessários para usuários do banco de dados em seu banco de dados de origem.

**Como conceder privilégios de conta no banco de dados de origem**

1. Conceda os privilégios necessários à conta de usuário do Oracle GoldenGate usando o comando SQL `grant` e o procedimento `grant_sys_object` do `rdsadmin.rdsadmin_util`. As instruções a seguir concedem privilégios a um usuário denominado `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. Conceda os privilégios necessários a uma conta do usuário para ser um administrador do Oracle GoldenGate. Execute o programa PL/SQL a seguir.

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

   Para revogar privilégios, use o procedimento `revoke_admin_privilege` no mesmo pacote.

### Etapa 6: Adicionar um alias TNS ao banco de dados de origem
<a name="Appendix.OracleGoldenGate.Source.TNS"></a>

Adicione a entrada a seguir a `$ORACLE_HOME/network/admin/tnsnames.ora` no Oracle Home para ser usada pelo processo `EXTRACT`. Para obter mais informações sobre o arquivo `tnsnames.ora`, consulte a [documentação da 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))
    )
```

## Configurar um banco de dados de destino para uso com o Oracle GoldenGate no Amazon RDS
<a name="Appendix.OracleGoldenGate.Target"></a>

Nessa tarefa, você configura uma instância de banco de dados de destino para uso com o Oracle GoldenGate.

**Topics**
+ [Etapa 1: Definir o parâmetro de inicialização ENABLE\$1GOLDENGATE\$1REPLICATION como true](#Appendix.OracleGoldenGate.Target.enable-gg-rep)
+ [Etapa 2: Criar uma conta do usuário do Oracle GoldenGate no banco de dados de destino](#Appendix.OracleGoldenGate.Target.User)
+ [Etapa 3: Conceder privilégios de conta no banco de dados de destino](#Appendix.OracleGoldenGate.Target.Privileges)
+ [Etapa 4: Adicionar um alias TNS ao banco de dados de destino](#Appendix.OracleGoldenGate.Target.TNS)

### Etapa 1: Definir o parâmetro de inicialização ENABLE\$1GOLDENGATE\$1REPLICATION como true
<a name="Appendix.OracleGoldenGate.Target.enable-gg-rep"></a>

Quando você define o parâmetro de inicialização `ENABLE_GOLDENGATE_REPLICATION` como `true`, ele permite que os serviços de banco de dados sejam compatíveis com a replicação lógica. Se o banco de dados de origem estiver em uma instância de banco de dados do Amazon RDS, tenha um grupo de parâmetros atribuído à instância de banco de dados com o parâmetro de inicialização `ENABLE_GOLDENGATE_REPLICATION` definido como `true`. Para obter mais informações sobre o parâmetro de inicialização `ENABLE_GOLDENGATE_REPLICATION`, consulte a [documentação do banco de dados Oracle](https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/ENABLE_GOLDENGATE_REPLICATION.html).

### Etapa 2: Criar uma conta do usuário do Oracle GoldenGate no banco de dados de destino
<a name="Appendix.OracleGoldenGate.Target.User"></a>

O Oracle GoldenGate é executado como um usuário do banco de dados e requer os privilégios de banco de dados apropriados. Para garantir que ele tenha esses privilégios, crie uma conta do usuário no banco de dados de destino.

A instrução a seguir cria um usuário denominado `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 uma senha diferente do prompt mostrado aqui como prática recomendada de segurança.

### Etapa 3: Conceder privilégios de conta no banco de dados de destino
<a name="Appendix.OracleGoldenGate.Target.Privileges"></a>

Nessa tarefa, você concede os privilégios de conta necessários para usuários do banco de dados em seu banco de dados de destino.

**Como conceder privilégios de conta no banco de dados de destino**

1. Conceda os privilégios necessários à conta do usuário do Oracle GoldenGate no banco de dados de destino. No exemplo a seguir, conceda privilégios 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. Conceda os privilégios necessários a uma conta do usuário para ser um administrador do Oracle GoldenGate. Execute o programa PL/SQL a seguir.

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

   Para revogar privilégios, use o procedimento `revoke_admin_privilege` no mesmo pacote.

### Etapa 4: Adicionar um alias TNS ao banco de dados de destino
<a name="Appendix.OracleGoldenGate.Target.TNS"></a>

Adicione a entrada a seguir a `$ORACLE_HOME/network/admin/tnsnames.ora` no Oracle Home para ser usada pelo processo `REPLICAT`. Para bancos de dados multilocação Oracle, o alias TNS deve apontar para o nome do serviço do PDB. Para obter mais informações sobre o arquivo `tnsnames.ora`, consulte a [documentação da 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))
    )
```