

# Usar o Oracle GoldenGate com o Amazon RDS para Oracle
<a name="Appendix.OracleGoldenGate"></a>

O Oracle GoldenGate coleta, replica e gerencia dados transacionais entre bancos de dados. Ele é um processo de captura de dados de alterações (CDC) baseado em log e um pacote de software de replicação usado com bancos de dados para sistemas de processamento de transações online (OLTP). O Oracle GoldenGate cria arquivos de trilha que contêm os dados alterados mais recentes do banco de dados de origem. Depois, ele envia esses arquivos ao servidor, onde um processo converte o arquivo de trilha em SQL padrão para ser aplicado ao banco de dados de destino.

O Oracle GoldenGate com RDS para Oracle é compatível com seguintes recursos:
+ Replicação de banco de dados ativo-ativo
+ Recuperação de desastres
+ Proteção de dados
+ Replicação em regiões e entre regiões
+ Migração e upgrades com tempo de inatividade zero
+ Replicação de dados entre uma instância de banco de dados do RDS para Oracle e um banco de dados que não seja Oracle
**nota**  
Para obter uma lista de bancos de dados compatíveis, consulte [Oracle Fusion Middleware Supported System Configurations](https://www.oracle.com/middleware/technologies/fusion-certification.html) (Configurações do sistema compatíveis com o Oracle Fusion Middleware) na documentação da Oracle.

Você pode usar o Oracle GoldenGate com RDS para Oracle para atualizar para as versões principais do banco de dados Oracle. Por exemplo, é possível usar o Oracle GoldenGate para atualizar de um banco de dados on-premises do Oracle Database 11g para o Oracle Database 19c em uma instância de banco de dados do Amazon RDS.

**Topics**
+ [Versões e opções de licenciamento com suporte para o Oracle GoldenGate](#Appendix.OracleGoldenGate.licensing)
+ [Requisitos e limitações do Oracle GoldenGate](#Appendix.OracleGoldenGate.requirements)
+ [Arquitetura do Oracle GoldenGate](Appendix.OracleGoldenGate.Overview.md)
+ [Configurar o Oracle GoldenGate](Appendix.OracleGoldenGate.setting-up.md)
+ [Trabalhar com os utilitários EXTRACT e REPLICAT do Oracle GoldenGate](Appendix.OracleGoldenGate.ExtractReplicat.md)
+ [Monitorar o Oracle GoldenGate](Appendix.OracleGoldenGate.Monitoring.md)
+ [Solução de problemas do Oracle GoldenGate](Appendix.OracleGoldenGate.Troubleshooting.md)

## Versões e opções de licenciamento com suporte para o Oracle GoldenGate
<a name="Appendix.OracleGoldenGate.licensing"></a>

É possível usar a Standard Edition 2 (SE2) ou a Enterprise Edition (EE) do RDS para Oracle com Oracle GoldenGate versão 12c e posterior. É possível usar os seguintes recursos do Oracle GoldenGate:
+ O Oracle GoldenGate Remote Capture (extração) é compatível.
+ A captura (extração) é compatível com instâncias de banco de dados do RDS para Oracle que usam a arquitetura tradicional de banco de dados não CDB. A captura remota de PDB do Oracle GoldenGate é compatível com CDBs que executam o Oracle Database 21c ou o Oracle Database 19c versão 19.0.0.0.ru-2024-04.rur-2024-04.r1 ou posterior.
+ O Oracle GoldenGate Remote Delivery (replicat) é compatível com o RDS para instâncias de banco de dados Oracle que usam arquiteturas não CDB ou CDB. A entrega remota é compatível com a replicação integrada, replicação paralela, replicação coordenada e replicação clássica.
+ O RDS da Oracle é compatível com as arquiteturas Clássica e de Microsserviço do Oracle GoldenGate.
+ A replicação de valores do Oracle GoldenGate DDL e Sequence é compatível com o uso do modo de captura integrado.

Você é responsável por gerenciar o licenciamento (BYOL) do Oracle GoldenGate para usá-lo com o Amazon RDS em todas as Regiões da AWS. Para obter mais informações, consulte [Opções de licenciamento do RDS para Oracle](Oracle.Concepts.Licensing.md).

## Requisitos e limitações do Oracle GoldenGate
<a name="Appendix.OracleGoldenGate.requirements"></a>

Ao trabalhar do Oracle GoldenGate e RDS for Oracle, considere os seguintes requisitos e limitações: 
+ Você é responsável por configurar e gerenciar o Oracle GoldenGate para usar com o RDS para Oracle. 
+ Você é responsável por configurar uma versão do Oracle GoldenGate certificada com os bancos de dados de origem e de destino. Para obter mais informações, consulte [Configurações do sistema compatíveis com o Oracle Fusion Middleware](https://www.oracle.com/middleware/technologies/fusion-certification.html) na documentação da Oracle.
+ Você pode usar o Oracle GoldenGate em vários ambientes da AWSdiferentes para diversos casos de uso. Se você tiver um problema de suporte relacionado ao Oracle GoldenGate, entre em contato com os Serviços de Suporte da Oracle.
+ É possível usar o Oracle GoldenGate em instâncias de banco de dados do RDS para Oracle que usam a Oracle Transparent Data Encryption (TDE). Para manter a integridade dos dados replicados, configure a criptografia no hub do Oracle GoldenGate usando volumes criptografados do Amazon EBS ou criptografia de arquivos de trilha. Configure também a criptografia para dados enviados entre o hub do Oracle GoldenGate e as instâncias de banco de dados de fonte e destino. As instâncias de banco de dados do RDS for Oracle são compatíveis com a criptografia com [Oracle Secure Sockets Layer](Appendix.Oracle.Options.SSL.md) ou [Oracle Native Network Encryption](Appendix.Oracle.Options.NetworkEncryption.md).

# Arquitetura do Oracle GoldenGate
<a name="Appendix.OracleGoldenGate.Overview"></a>

A arquitetura do GoldenGate para uso com o Amazon RDS consiste nos seguintes módulos desacoplados:

Fonte do banco de dados  
A fonte do banco de dados pode ser um banco de dados Oracle no local, um banco de dados Oracle em uma instância do Amazon EC2 ou um banco de dados Oracle em uma instância de banco de dados do Amazon RDS.

Hub do Oracle GoldenGate  
Um hub do Oracle GoldenGate move as informações de transação da fonte do banco de dados para o banco de dados de destino. O hub pode ser um dos seguintes:  
+ Uma instância do Amazon EC2 com o Oracle Database e o Oracle GoldenGate instalados
+ Uma instalação da Oracle on-premises.
É possível ter mais de um hub do Amazon EC2. Recomendamos que você use dois hubs se utilizar o Oracle GoldenGate para replicação entre regiões.

Bancos de dados de destino:  
O banco de dados de destino pode estar em uma instância de banco de dados do Amazon RDS, em uma instância do Amazon EC2 ou no local.

As seções a seguir descrevem cenários comuns para o Oracle GoldenGate no Amazon RDS.

**Topics**
+ [Fonte do banco de dados on-premises e hub do Oracle GoldenGate](#Appendix.OracleGoldenGate.on-prem-source-gg-hub)
+ [Fonte do banco de dados on-premises e hub do Amazon EC2](#Appendix.OracleGoldenGate.on-prem-source-ec2-hub)
+ [Fonte do banco de dados do Amazon RDS e hub do Amazon EC2](#Appendix.OracleGoldenGate.rds-source-ec2-hub)
+ [Fonte do banco de dados do Amazon EC2 e hub do Amazon EC2](#Appendix.OracleGoldenGate.ec2-source-ec2-hub)
+ [Hubs do Amazon EC2 em diferentes regiões da AWS](#Appendix.OracleGoldenGate.cross-region-hubs)

## Fonte do banco de dados on-premises e hub do Oracle GoldenGate
<a name="Appendix.OracleGoldenGate.on-prem-source-gg-hub"></a>

Nesse cenário, uma fonte do banco de dados Oracle on-premises e um hub do Oracle GoldenGate on-premises fornecem dados para uma instância de banco de dados do Amazon RDS de destino. 

![\[Configuração 0 do Oracle GoldenGate usando o Amazon RDS\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/images/oracle-gg0.png)


## Fonte do banco de dados on-premises e hub do Amazon EC2
<a name="Appendix.OracleGoldenGate.on-prem-source-ec2-hub"></a>

Nesse cenário, um banco de dados Oracle on-premises atua como a fonte do banco de dados. É conectado a um hub de instância do Amazon EC2. Este hub fornece dados para uma instância de banco de dados de destino do RDS for Oracle.

![\[Configuração 1 do Oracle GoldenGate usando o Amazon RDS\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/images/oracle-gg1.png)


## Fonte do banco de dados do Amazon RDS e hub do Amazon EC2
<a name="Appendix.OracleGoldenGate.rds-source-ec2-hub"></a>

Nesse cenário, uma instância de banco de dados do RDS for Oracle atua como fonte do banco de dados. É conectado a um hub de instância do Amazon EC2. Este hub fornece dados para uma instância de banco de dados de destino do RDS for Oracle.

![\[Configuração 2 do Oracle GoldenGate usando o Amazon RDS\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/images/oracle-gg2.png)


## Fonte do banco de dados do Amazon EC2 e hub do Amazon EC2
<a name="Appendix.OracleGoldenGate.ec2-source-ec2-hub"></a>

Nesse cenário, um banco de dados Oracle em uma instância do Amazon EC2 atua como a fonte do banco de dados. É conectado a um hub de instância do Amazon EC2. Este hub fornece dados para uma instância de banco de dados de destino do RDS for Oracle.

![\[Configuração 3 do Oracle GoldenGate usando o Amazon RDS\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/images/oracle-gg3.png)


## Hubs do Amazon EC2 em diferentes regiões da AWS
<a name="Appendix.OracleGoldenGate.cross-region-hubs"></a>

Nesse cenário, um banco de dados Oracle em uma instância de banco de dados do Amazon RDS está conectado a um hub de instância do Amazon EC2 na mesma região da AWS. O hub está conectado a um hub da instância do Amazon EC2 em outra região da AWS. Esse segundo hub fornece dados para a instância de banco de dados de destino do RDS for Oracle na mesma região da AWS como o segundo hub da instância do Amazon EC2.

![\[Configuração 4 do Oracle GoldenGate usando o Amazon RDS\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/images/oracle-gg4.png)


**nota**  
Quaisquer problemas que afetem o funcionamento do Oracle GoldenGate em ambiente on-premises também afetarão a execução do Oracle GoldenGate na AWS. É altamente recomendável que você monitore o hub do Oracle GoldenGate para garantir que `EXTRACT` e `REPLICAT` sejam retomados se ocorrer um failover. Como o hub do Oracle GoldenGate é executado em uma instância do Amazon EC2, o Amazon RDS não gerencia o hub do Oracle GoldenGate e não pode garantir que ele esteja em execução.

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

# Trabalhar com os utilitários EXTRACT e REPLICAT do Oracle GoldenGate
<a name="Appendix.OracleGoldenGate.ExtractReplicat"></a>

Os utilitários `EXTRACT` e `REPLICAT` do Oracle GoldenGate trabalham juntos para manter os bancos de dados de origem e destino sincronizados via replicação de transações incrementais usando arquivos de trilha. Todas as alterações que ocorrem no banco de dados de origem são automaticamente detectadas por `EXTRACT`, depois formatadas e transferidas para arquivos de trilha no Oracle GoldenGate on-premises ou no hub de instâncias do Amazon EC2. Após a conclusão da carga inicial, os dados são lidos desses arquivos e replicados para o banco de dados de destino pelo utilitário `REPLICAT`.

## Executar o utilitário EXTRACT do Oracle GoldenGate
<a name="Appendix.OracleGoldenGate.Extract"></a>

O utilitário `EXTRACT` recupera, converte e gera dados do banco de dados de origem para arquivos de trilha. O processo básico é o seguinte:

1. `EXTRACT` coloca os detalhes da transação em fila na memória ou em armazenamento de disco temporário.

1. O banco de dados de origem confirma a transação.

1. `EXTRACT` grava os detalhes da transação em um arquivo de trilha.

1. O arquivo de trilha roteia esses detalhes para o Oracle GoldenGate on-premises ou o hub da instância do Amazon EC2 e depois para o banco de dados de destino.

As etapas a seguir iniciam o utilitário `EXTRACT`, capturam os dados do `EXAMPLE.TABLE` no banco de dados de origem `OGGSOURCE` e criam os arquivos de trilha. 

**Como executar o utilitário EXTRACT**

1. Configure o arquivo de parâmetro `EXTRACT` no hub do Oracle GoldenGate (on-premises ou na instância do Amazon EC2). A listagem a seguir mostra um exemplo do arquivo de parâmetro `EXTRACT` denominado `$GGHOME/dirprm/eabc.prm`.

   ```
   EXTRACT EABC
    
   USERID oggadm1@OGGSOURCE, PASSWORD "my-password"
   EXTTRAIL /path/to/goldengate/dirdat/ab 
    
   IGNOREREPLICATES
   GETAPPLOPS
   TRANLOGOPTIONS EXCLUDEUSER OGGADM1
   	 
   TABLE EXAMPLE.TABLE;
   ```

1. No hub do Oracle GoldenGate, faça login no banco de dados de origem e execute a interface de linha de comando do Oracle GoldenGate `ggsci`. O exemplo a seguir mostra o formato para login.

   ```
   dblogin oggadm1@OGGSOURCE
   ```

1. Adicione dados de transação para ativar o registro em log complementar para a tabela de banco de dados.

   ```
   add trandata EXAMPLE.TABLE
   ```

1. Usando a linha de comando `ggsci`, ative o utilitário `EXTRACT` usando os comandos a seguir.

   ```
   add extract EABC tranlog, INTEGRATED tranlog, begin now
   add exttrail /path/to/goldengate/dirdat/ab 
      extract EABC, 
      MEGABYTES 100
   ```

1. Registre o utilitário `EXTRACT` no banco de dados para que os logs de arquivamento não sejam excluídos. Essa tarefa permite que você recupere transações antigas, não confirmadas, se necessário. Para registrar o utilitário `EXTRACT` no banco de dados, use o comando a seguir.

   ```
   register EXTRACT EABC, DATABASE
   ```

1. Inicie o utilitário `EXTRACT` com o comando a seguir.

   ```
   start EABC
   ```

## Executar o utilitário REPLICAT do Oracle GoldenGate
<a name="Appendix.OracleGoldenGate.Replicat"></a>

O utilitário `REPLICAT` “envia por push” informações de transação nos arquivos de trilha ao banco de dados de destino.

As etapas a seguir ativam e iniciam o utilitário `REPLICAT` para que ele possa replicar os dados capturados na tabela `EXAMPLE.TABLE` no banco de dados de destino `OGGTARGET`.

**Como executar o utilitário REPLICATE**

1. Configure o arquivo de parâmetro `REPLICAT` no hub do Oracle GoldenGate (on-premises ou na instância do EC2). A listagem a seguir mostra um exemplo do arquivo de parâmetro `REPLICAT` denominado `$GGHOME/dirprm/rabc.prm`.

   ```
   REPLICAT RABC
    
   USERID oggadm1@OGGTARGET, password "my-password"
    
   ASSUMETARGETDEFS
   MAP EXAMPLE.TABLE, TARGET EXAMPLE.TABLE;
   ```
**nota**  
Especifique uma senha diferente do prompt mostrado aqui como prática recomendada de segurança.

1. Faça login no banco de dados de destino e execute a interface de linha de comando do Oracle GoldenGate (`ggsci`). O exemplo a seguir mostra o formato para login.

   ```
   dblogin userid oggadm1@OGGTARGET
   ```

1. Usando a linha de comando `ggsci`, adicione uma tabela de verificação. O usuário indicado deve ser a conta de usuário do Oracle GoldenGate, e não o proprietário do esquema da tabela de destino. O exemplo a seguir cria um ponto de verificação denominado `gg_checkpoint`.

   ```
   add checkpointtable oggadm1.oggchkpt
   ```

1. Para habilitar o utilitário `REPLICAT`, use o seguinte comando:

   ```
   add replicat RABC EXTTRAIL /path/to/goldengate/dirdat/ab CHECKPOINTTABLE oggadm1.oggchkpt 
   ```

1. Inicie o utilitário `REPLICAT` usando o comando a seguir.

   ```
   start RABC
   ```

# Monitorar o Oracle GoldenGate
<a name="Appendix.OracleGoldenGate.Monitoring"></a>

Ao usar o Oracle GoldenGate para replicação, certifique-se de que o processo do Oracle GoldenGate esteja ativo e em execução e que os bancos de dados de origem e destino estejam sincronizados. Você pode usar as seguintes ferramentas de monitoramento:
+ O [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) é um serviço de monitoramento usado nesse padrão para monitorar os logs de erros do GoldenGate.
+ O [Amazon SNS](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/US_SetupSNS.html) é um serviço de notificação de mensagens usado nesse padrão para enviar notificações por e-mail.

Para obter instruções detalhadas, consulte [Monitorar os logs do Oracle GoldenGate usando o Amazon CloudWatch](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/monitor-oracle-goldengate-logs-by-using-amazon-cloudwatch.html).

# Solução de problemas do Oracle GoldenGate
<a name="Appendix.OracleGoldenGate.Troubleshooting"></a>

Esta seção explica os problemas mais comuns ao usar o Oracle GoldenGate com o Amazon RDS para Oracle.

**Topics**
+ [Erro ao abrir um redo log online](#Appendix.OracleGoldenGate.Troubleshooting.Logs)
+ [O Oracle GoldenGate parece estar devidamente configurado, mas a replicação não está funcionando](#Appendix.OracleGoldenGate.Troubleshooting.Replication)
+ [REPLICAT integrado lento devido a consulta no SYS. “\$1DBA\$1APPLY\$1CDR\$1INFO”](#Appendix.OracleGoldenGate.IR)

## Erro ao abrir um redo log online
<a name="Appendix.OracleGoldenGate.Troubleshooting.Logs"></a>

Configure os bancos de dados 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 banco de dados de origem. Essa duração permite que o Oracle GoldenGate recupere logs da instância de banco de dados de origem de acordo com a necessidade.
+ Verifique se você tem armazenamento suficiente na instância para os arquivos.

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

## O Oracle GoldenGate parece estar devidamente configurado, mas a replicação não está funcionando
<a name="Appendix.OracleGoldenGate.Troubleshooting.Replication"></a>

Para tabelas pré-existentes, você precisa especificar o SCN do qual o Oracle GoldenGate trabalha.

**Como corrigir esse problema**

1. Faça login no banco de dados de origem e execute a interface de linha de comando do Oracle GoldenGate (`ggsci`). O exemplo a seguir mostra o formato para login.

   ```
   dblogin userid oggadm1@OGGSOURCE
   ```

1. Usando a linha de comando `ggsci`, configure o SCN inicial para o processo `EXTRACT`. O exemplo a seguir define o SCN como 223274 para `EXTRACT`.

   ```
   ALTER EXTRACT EABC SCN 223274
   start EABC
   ```

1. Faça login no banco de dados de destino. O exemplo a seguir mostra o formato para login.

   ```
   dblogin userid oggadm1@OGGTARGET
   ```

1. Usando a linha de comando `ggsci`, configure o SCN inicial para o processo `REPLICAT`. O exemplo a seguir define o SCN como 223274 para `REPLICAT`.

   ```
   start RABC atcsn 223274
   ```

## REPLICAT integrado lento devido a consulta no SYS. “\$1DBA\$1APPLY\$1CDR\$1INFO”
<a name="Appendix.OracleGoldenGate.IR"></a>

O Oracle GoldenGate Conflict Detection and Resolution (CDR) fornece rotinas básicas de resolução de conflitos. Por exemplo, o CDR pode resolver um conflito exclusivo para uma instrução `INSERT`.

Quando o CDR resolve um conflito, ele pode inserir registros na tabela de exceção `_DBA_APPLY_CDR_INFO` temporariamente. O `REPLICAT` integrado exclui esses registros posteriormente. Em um cenário raro, o `REPLICAT` integrado pode processar um grande número de colisões, mas um novo `REPLICAT` integrado não o substitui. Em vez de serem removidas, as linhas `_DBA_APPLY_CDR_INFO` existentes ficam órfãs. Todos os novos processos `REPLICAT` integrados abrandam porque estão consultando linhas órfãs no `_DBA_APPLY_CDR_INFO`.

Para remover todas as linhas de `_DBA_APPLY_CDR_INFO`, use o procedimento `rdsadmin.rdsadmin_util.truncate_apply$_cdr_info` do Amazon RDS. Este procedimento é lançado como parte da versão de outubro de 2020 e atualização de patch. O procedimento está disponível nas seguintes versões do banco de dados:
+ [ Version 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) e posterior
+ [ Version 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) e posterior

O exemplo a seguir trunca a tabela `_DBA_APPLY_CDR_INFO`.

```
SET SERVEROUTPUT ON SIZE 2000
EXEC rdsadmin.rdsadmin_util.truncate_apply$_cdr_info;
```