

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Trabalhando com endpoints AWS do DMS
<a name="CHAP_Endpoints"></a>

Um endpoint fornece informações de conexão, tipo de armazenamento de dados e localização sobre seu armazenamento de dados. AWS O Database Migration Service usa essas informações para se conectar a um armazenamento de dados e migrar dados de um endpoint de origem para um endpoint de destino. É possível especificar atributos de conexão adicionais para um endpoint utilizando as configurações do endpoint. Esses atributos podem controlar o registro em log, o tamanho do arquivo e outros parâmetros. Para obter mais informações sobre conexões a endpoints, consulte a seção da documentação do datastore. 

Veja a seguir mais detalhes sobre endpoints.

**Topics**
+ [Criar endpoints de origem e de destino](CHAP_Endpoints.Creating.md)
+ [Origens para a migração de dados](CHAP_Source.md)
+ [Destinos para a migração de dados](CHAP_Target.md)
+ [Configurando endpoints VPC para AWS DMS](CHAP_VPC_Endpoints.md)
+ [Declarações DDL apoiadas por AWS DMS](CHAP_Introduction.SupportedDDL.md)
+ [Configuração do endpoint avançada](CHAP_Advanced.Endpoints.md)

# Criar endpoints de origem e de destino
<a name="CHAP_Endpoints.Creating"></a>

É possível criar endpoints de origem e de destino ao criar a instância de replicação ou criar os endpoints depois que a instância de replicação for criada. Os datastores de origem e de destino podem estar em uma instância do Amazon Elastic Compute Cloud (Amazon EC2), em uma instância do Amazon Relational Database Service (Amazon RDS) ou em um banco de dados on-premises. (Observe que um dos seus endpoints deve estar em um AWS serviço. Você não pode usar o AWS DMS para migrar de um banco de dados local para outro banco de dados local.)

O procedimento a seguir pressupõe que você tenha escolhido o assistente do console AWS DMS. Observe que também é possível realizar esta etapa selecionando **Endpoints** no painel de navegação do console do AWS DMS e selecionando **Ciar endpoint**. Ao utilizar o assistente de console, os endpoints de origem e de destino são criados na mesma página. Quando o assistente de console não é usado, cada endpoint é criado separadamente.

**Para especificar os endpoints do banco de dados de origem ou destino usando o console AWS**

1. Na página **Conectar endpoints dos bancos de dados de origem e de destino**, especifique as suas informações de conexão do banco de dados de origem ou de destino. A tabela a seguir descreve as configurações.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Endpoints.Creating.html)

   A tabela a seguir lista os caracteres incompatíveis com senhas de endpoint e segredos do Secrets Manager para os mecanismos de banco de dados listados. Se você quiser usar vírgulas (,) em suas senhas de endpoint, use o suporte do Secrets Manager fornecido em AWS DMS para autenticar o acesso às suas instâncias. AWS DMS Para obter mais informações, consulte [Usando segredos para acessar AWS Database Migration Service endpoints](security_iam_secretsmanager.md).    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Endpoints.Creating.html)

1. Escolha **Configurações de Endpoint** e **AWS KMS key ** se for necessário. Para testar a conexão do endpoint, selecione **Executar teste**. A tabela a seguir descreve as configurações.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Endpoints.Creating.html)

# Usando a autenticação do IAM para o endpoint do Amazon RDS em AWS DMS
<a name="CHAP_Endpoints.Creating.IAMRDS"></a>

AWS A autenticação do banco de dados Identity and Access Management (IAM) fornece segurança aprimorada para seus bancos de dados do Amazon RDS gerenciando o acesso ao AWS banco de dados por meio de credenciais do IAM. Em vez de usar senhas de banco de dados tradicionais, a autenticação do IAM gera tokens de autenticação de curta duração, válidos por 15 minutos, usando credenciais da AWS . Essa abordagem melhora significativamente a segurança, eliminando a necessidade de armazenar senhas de banco de dados no código da aplicação, reduzindo o risco de exposição de credenciais e proporcionando o gerenciamento centralizado de acesso por meio do IAM. Ele também simplifica o gerenciamento de acesso ao aproveitar as funções e políticas existentes AWS do IAM, permitindo que você controle o acesso ao banco de dados usando a mesma estrutura do IAM que você usa para outros AWS serviços.

AWS DMS agora oferece suporte à autenticação do IAM para instâncias de replicação que executam o DMS versão 3.6.1 ou posterior ao se conectar a endpoints MySQL, PostgreSQL, Aurora PostgreSQL, Aurora MySQL ou MariaDB no Amazon RDS. Ao criar um endpoint para esses mecanismos, você pode selecionar a autenticação do IAM e especificar um perfil do IAM em vez de fornecer credenciais de banco de dados. Essa integração aprimora a segurança ao eliminar a necessidade de gerenciar e armazenar senhas de banco de dados para tarefas de migração.

## Configurando a autenticação do IAM para o endpoint do Amazon RDS em AWS DMS
<a name="CHAP_Endpoints.Creating.IAMRDS.config"></a>

Ao criar um endpoint, você pode configurar a autenticação do IAM para seu banco de dados Amazon RDS. Para configurar a autenticação do IAM, faça o seguinte:

### Console do DMS
<a name="CHAP_Endpoints.Creating.IAMRDS.console"></a>

1. O Amazon RDS e o usuário do banco de dados devem ter a autenticação do IAM habilitada. Para saber mais, consulte [Habilitar e desabilitar a autenticação de banco de dados do IAM](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.Enabling.html) no *Guia do usuário do Amazon Relational Database Service*. 

1. Navegue até o console do IAM e crie um perfil do IAM com as políticas abaixo:

   Política

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": [
                   "rds-db:connect"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

   Política de confiança:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "",
               "Effect": "Allow",
               "Principal": {
                   "Service": [
                       "dms.amazonaws.com"
                   ]
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. Durante a configuração do endpoint no [https://console.aws.amazon.com/dms/v2](https://console.aws.amazon.com/dms/v2), navegue até a seção **Acesso ao banco de dados do endpoint** e selecione **Autenticação do IAM**.

1. No menu suspenso **Perfil do IAM para autenticação do banco de dados do RDS**, selecione a perfil do IAM com as permissões apropriadas para acessar o banco de dados.

    Para ter mais informações, consulte [Criar endpoints de origem e de destino](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.Creating.html).

### AWS CLI
<a name="CHAP_Endpoints.Creating.IAMRDS.awscli"></a>

1. O Amazon RDS e o usuário do banco de dados devem ter a autenticação do IAM habilitada. Para saber mais, consulte [Habilitar e desabilitar a autenticação de banco de dados do IAM](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.Enabling.html) no *Guia do usuário do Amazon Relational Database Service*. 

1. Navegue até a AWS CLI, crie uma função do IAM e permita que o DMS assuma a função:

   Política:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": [
                   "rds-db:connect"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

   Política de confiança:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "",
               "Effect": "Allow",
               "Principal": {
                   "Service": [
                       "dms.amazonaws.com"
                   ]
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. Execute o comando a seguir para importar o certificado e baixar o arquivo PEM. Para ter mais informações, consulte [Baixar pacotes de certificados para Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html#UsingWithRDS.SSL.CertificatesDownload) no *Guia do usuário do Amazon Relational Database Service*. 

   ```
   aws dms import-certificate --certificate-identifier rdsglobal --certificate-pem file://~/global-bundle.pem
   ```

1. Execute os seguintes comandos para criar um endpoint do IAM:
   + Para endpoints PostgreSQL/Aurora do PostgreSQL (`sslmode`quando está definido `required` como`--certificate-arn`, o sinalizador não é obrigatório): 

     ```
     aws dms create-endpoint --endpoint-identifier <endpoint-name> --endpoint-type <source/target> --engine-name <postgres/aurora-postgres> --username <db username with iam auth privileges> --server-name <db server name> --port <port number> --ssl-mode <required/verify-ca/verify-full> --postgre-sql-settings "{\"ServiceAccessRoleArn\": \"role arn created from step 2 providing permissions for iam authentication\", \"AuthenticationMethod\": \"iam\", \"DatabaseName\": \"database name\"}" --certificate-arn <if sslmode is verify-ca/verify full use cert arn generated in step 3, otherwise this parameter is not required>
     ```
   + Para endpoints do MySQL, MariaDB ou Aurora para MySQL: 

     ```
     aws dms create-endpoint --endpoint-identifier <endpoint-name> --endpoint-type <source/target> --engine-name <mysql/mariadb/aurora> --username <db username with iam auth privileges> --server-name <db server name> --port <port number> --ssl-mode <verify-ca/verify-full> --my-sql-settings "{\"ServiceAccessRoleArn\": \"role arn created from step 2 providing permissions for iam authentication\", \"AuthenticationMethod\": \"iam\", \"DatabaseName\": \"database name\"}" --certificate-arn <cert arn from previously imported cert in step 3>
     ```

1. Execute uma conexão de teste na instância de replicação desejada para criar a associação do endpoint da instância e verificar se tudo está configurado corretamente: 

   ```
   aws dms test-connection --replication-instance-arn <replication instance arn> --endpoint-arn <endpoint arn from previously created endpoint in step 4>
   ```
**nota**  
Ao usar a autenticação do IAM, a instância de replicação fornecida na conexão de teste deve estar na AWS DMS versão 3.6.1 ou posterior.

## Limitações
<a name="CHAP_Endpoints.Creating.IAMRDS.Limitations"></a>

AWS DMS tem as seguintes limitações ao usar a autenticação do IAM com o endpoint do Amazon RDS:
+ No momento, as instâncias do Amazon RDS para PostgreSQL e do Amazon Aurora para PostgreSQL não são compatíveis com conexões de CDC com autenticação do IAM. Para ter mais informações, consulte [Limitações para a autenticação de banco de dados do IAM](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html#UsingWithRDS.IAMDBAuth.Limitations) no *Guia do usuário do Amazon Relational Database Service*.

# Origens para a migração de dados
<a name="CHAP_Source"></a>

AWS Database Migration Service (AWS DMS) pode usar muitos dos mecanismos de dados mais populares como fonte para replicação de dados. A origem do banco de dados pode ser um mecanismo autogerenciado em execução em uma instância do Amazon EC2 ou em um banco de dados on-premises. Ou pode ser uma fonte de dados em um AWS serviço como o Amazon RDS ou o Amazon S3.

Para obter uma lista abrangente de origens válidas, consulte [Origens do AWS DMS](CHAP_Introduction.Sources.md#CHAP_Introduction.Sources.title).

**Topics**
+ [Usando um banco de dados Oracle como fonte para AWS DMS](CHAP_Source.Oracle.md)
+ [Usando um banco de dados Microsoft SQL Server como fonte para AWS DMS](CHAP_Source.SQLServer.md)
+ [Usando o banco de dados SQL do Microsoft Azure como fonte para AWS DMS](CHAP_Source.AzureSQL.md)
+ [Usando a Instância Gerenciada SQL do Microsoft Azure como fonte para AWS DMS](CHAP_Source.AzureMgd.md)
+ [Usando o servidor flexível do Banco de Dados Microsoft Azure para PostgreSQL como fonte para AWS DMS](CHAP_Source.AzureDBPostgreSQL.md)
+ [Usando o servidor flexível do Banco de Dados do Microsoft Azure para MySQL como fonte para AWS DMS](CHAP_Source.AzureDBMySQL.md)
+ [Usando o OCI MySQL Heatwave como fonte para AWS DMS](CHAP_Source.heatwave.md)
+ [Usando o Google Cloud para MySQL como fonte para AWS DMS](CHAP_Source.GC.md)
+ [Usando o Google Cloud para PostgreSQL como fonte para AWS DMS](CHAP_Source.GCPostgres.md)
+ [Usando um banco de dados PostgreSQL como fonte AWS DMS](CHAP_Source.PostgreSQL.md)
+ [Usando um banco de dados compatível com MySQL como fonte para AWS DMS](CHAP_Source.MySQL.md)
+ [Usando um banco de dados SAP ASE como fonte para AWS DMS](CHAP_Source.SAP.md)
+ [Usando o MongoDB como fonte para AWS DMS](CHAP_Source.MongoDB.md)
+ [Usando o Amazon DocumentDB (com compatibilidade com o MongoDB) como fonte para AWS DMS](CHAP_Source.DocumentDB.md)
+ [Usando o Amazon S3 como fonte para AWS DMS](CHAP_Source.S3.md)
+ [Usando o banco de dados IBM Db2 para Linux, Unix, Windows e Amazon RDS (Db2 LUW) como fonte para AWS DMS](CHAP_Source.DB2.md)
+ [Usando o IBM Db2 para z/OS bancos de dados como fonte para AWS DMS](CHAP_Source.DB2zOS.md)

# Usando um banco de dados Oracle como fonte para AWS DMS
<a name="CHAP_Source.Oracle"></a>

Você pode migrar dados de um ou vários bancos de dados Oracle usando o. AWS DMS Com um banco de dados Oracle como origem, é possível migrar dados para qualquer um dos destinos compatíveis com o AWS DMS.

AWS DMS suporta as seguintes edições do banco de dados Oracle:
+ Oracle Enterprise Edition
+ Oracle Standard Edition
+ Oracle Express Edition
+ Oracle Personal Edition

Para obter informações sobre versões de bancos de dados Oracle que oferecem AWS DMS suporte como fonte, consulte[Fontes para AWS DMS](CHAP_Introduction.Sources.md).

É possível utilizar Secure Sockets Layer (SSL) para criptografar conexões entre o endpoint do Oracle e a instância de replicação. Para obter mais informações sobre a utilização de SSL com um endpoint do Oracle, consulte [Suporte de SSL para um endpoint do Oracle](#CHAP_Security.SSL.Oracle).

AWS DMS suporta o uso da criptografia transparente de dados (TDE) da Oracle para criptografar dados em repouso no banco de dados de origem. Para obter mais informações sobre como utilizar a TDE do Oracle com um endpoint do Oracle de origem, consulte [Métodos de criptografia suportados para usar o Oracle como fonte para AWS DMS](#CHAP_Source.Oracle.Encryption).

AWS suporta o uso do TLS versão 1.2 e posterior com endpoints Oracle (e todos os outros tipos de endpoints) e recomenda o uso do TLS versão 1.3 ou posterior.

Siga estas etapas para configurar um banco de dados Oracle como um endpoint AWS DMS de origem:

1. Crie um usuário Oracle com as permissões apropriadas AWS DMS para acessar seu banco de dados de origem Oracle.

1. Crie um endpoint de origem do Oracle que esteja em conformidade com a configuração de banco de dados Oracle escolhida. Para criar uma full-load-only tarefa, nenhuma configuração adicional é necessária.

1. Para criar uma tarefa que gerencie a captura de dados de alteração (uma tarefa somente de CDC ou de carga completa e CDC), escolha Oracle LogMiner ou AWS DMS Binary Reader para capturar as alterações nos dados. A escolha LogMiner do Binary Reader determina algumas das permissões e opções de configuração posteriores. Para uma comparação entre o Binary Reader LogMiner e o Binary Reader, consulte a seção a seguir.

**nota**  
Para obter mais informações sobre tarefas de carga máxima, tarefas somente CDC e tarefas de carga máxima e CDC, consulte [Criar uma tarefa](CHAP_Tasks.Creating.md)

Para obter detalhes adicionais sobre como trabalhar com bancos de dados de origem Oracle AWS DMS, consulte as seções a seguir. 

**Topics**
+ [Usando Oracle LogMiner ou AWS DMS Binary Reader para CDC](#CHAP_Source.Oracle.CDC)
+ [Fluxos de trabalho para configurar um banco de dados de origem Oracle autogerenciado ou AWS gerenciado para AWS DMSConfigurar um banco de dados de origem Oracle](#CHAP_Source.Oracle.Workflows)
+ [Trabalhando com um banco de dados Oracle autogerenciado como fonte para AWS DMS](#CHAP_Source.Oracle.Self-Managed)
+ [Trabalhando com um banco AWS de dados Oracle gerenciado como fonte para AWS DMS](#CHAP_Source.Oracle.Amazon-Managed)
+ [Limitações no uso da Oracle como fonte para AWS DMS](#CHAP_Source.Oracle.Limitations)
+ [Suporte de SSL para um endpoint do Oracle](#CHAP_Security.SSL.Oracle)
+ [Métodos de criptografia suportados para usar o Oracle como fonte para AWS DMS](#CHAP_Source.Oracle.Encryption)
+ [Métodos de compactação suportados para usar o Oracle como fonte para AWS DMS](#CHAP_Source.Oracle.Compression)
+ [Replicando tabelas aninhadas usando o Oracle como fonte para AWS DMS](#CHAP_Source.Oracle.NestedTables)
+ [Armazenando REDO no Oracle ASM ao usar o Oracle como fonte para AWS DMS](#CHAP_Source.Oracle.REDOonASM)
+ [Configurações de endpoint ao usar o Oracle como fonte para AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib)
+ [Tipos de dados de origem do Oracle](#CHAP_Source.Oracle.DataTypes)

## Usando Oracle LogMiner ou AWS DMS Binary Reader para CDC
<a name="CHAP_Source.Oracle.CDC"></a>

Em AWS DMS, há dois métodos para ler os redo logs ao fazer a captura de dados de alteração (CDC) para Oracle como fonte: Oracle LogMiner e AWS DMS Binary Reader. LogMiner é uma API da Oracle para ler os redo logs on-line e os arquivos de redo log arquivados. O Binary Reader é um AWS DMS método que lê e analisa diretamente os arquivos brutos de redo log. Esses métodos têm os recursos a seguir.


| Recurso | LogMiner | Binary Reader | 
| --- | --- | --- | 
| Fácil de configurar | Sim | Não | 
| Menor impacto no sistema de origem I/O e na CPU | Não | Sim | 
| Melhor performance da CDC | Não | Sim | 
| Compatível com clusters de tabelas do Oracle | Sim | Não | 
| Compatível com todos os tipos de Oracle Hybrid Columnar Compression (HCC) | Sim |  Parcialmente O Binary Reader não é compatível com QUERY LOW para tarefas com CDC. Todos os outros tipos de HCC são totalmente compatíveis.  | 
| Compatível com a coluna LOB no Oracle 12c somente | Não (o LOB Support não está disponível LogMiner no Oracle 12c.) | Sim | 
| Compatível com instruções UPDATE que afetam somente colunas LOB | Não | Sim | 
| Compatível com a criptografia de dados transparente (TDE) do Oracle |  Parcialmente Ao usar o Oracle LogMiner, AWS DMS não oferece suporte à criptografia TDE em nível de coluna para Amazon RDS for Oracle.  |  Parcialmente O Binary Reader é compatível com TDE somente em bancos de dados Oracle autogerenciados.  | 
| Compatível com todos os métodos de compactação do Oracle | Sim | Não | 
| Compatível com transações XA | Não | Sim | 
| RAC |  Sim Não recomendado por motivos de desempenho e por algumas limitações internas do DMS.  |  Sim Altamente recomendado  | 

**nota**  
Por padrão, AWS DMS usa Oracle LogMiner for (CDC).   
AWS DMS suporta métodos transparentes de criptografia de dados (TDE) ao trabalhar com um banco de dados de origem Oracle. Se as credenciais de TDE especificadas estiverem incorretas, a tarefa de migração do AWS DMS não falhará, o que pode afetar a replicação contínua de tabelas criptografadas. Para obter mais informações sobre como especificar as credenciais da TDE, consulte [Métodos de criptografia suportados para usar o Oracle como fonte para AWS DMS](#CHAP_Source.Oracle.Encryption).

As principais vantagens de usar LogMiner com AWS DMS incluem o seguinte:
+ LogMiner suporta a maioria das opções do Oracle, como opções de criptografia e opções de compactação. O Binary Reader não é compatível com todas as opções do Oracle, especialmente a compactação e a maioria das opções de criptografia.
+ LogMiner oferece uma configuração mais simples, especialmente em comparação com a configuração de acesso direto do Binary Reader ou quando os redo logs são gerenciados usando o Oracle Automatic Storage Management (ASM).
+ LogMiner suporta clusters de tabelas para uso por AWS DMS. Binary Reader não.

As principais vantagens de usar o Binary Reader com AWS DMS incluem o seguinte:
+ Para migrações com um grande volume de alterações, LogMiner pode ter algum I/O impacto sobre a CPU no computador que hospeda o banco de dados de origem Oracle. O Binary Reader tem menos chance de causar impacto na CPU porque os registros são extraídos diretamente, em vez de fazer várias consultas ao banco de dados. I/O 
+ Para migrações com um alto volume de alterações, o desempenho do CDC geralmente é muito melhor quando se usa o Binary Reader em comparação com o uso do Oracle. LogMiner
+ O Binary Reader suporta CDC LOBs na versão 12c do Oracle. LogMiner não faz.

Em geral, use o Oracle LogMiner para migrar seu banco de dados Oracle, a menos que você tenha uma das seguintes situações:
+ Você precisa executar várias tarefas de migração no banco de dados Oracle de origem.
+ O volume de alterações ou o volume de redo logs no banco de dados Oracle de origem é alto ou você tem alterações e também está utilizando o Oracle ASM.

**nota**  
Se você alternar entre o uso do Oracle LogMiner e do AWS DMS Binary Reader, certifique-se de reiniciar a tarefa do CDC. 

### Configuração da CDC em um banco de dados Oracle de origem
<a name="CHAP_Source.Oracle.CDC.Configuration"></a>

Para que um endpoint de origem Oracle se conecte ao banco de dados para uma tarefa de captura de dados de alteração (CDC), talvez seja necessário especificar atributos de conexão adicionais. Isso pode ser verdade tanto para uma tarefa de carga máxima e CDC quanto para uma tarefa somente de CDC. Os atributos extras de conexão que você especifica dependem do método usado para acessar os redo logs: Oracle LogMiner ou AWS DMS Binary Reader. 

Você especifica atributos de conexão adicionais ao criar o endpoint de origem. Se você tiver várias configurações de atributos de conexão, separe-as umas das outras por ponto e vírgula e sem espaços em branco adicionais (por exemplo, `oneSetting;thenAnother`).

AWS DMS usa LogMiner por padrão. Não é necessário especificar atributos de conexão adicionais para utilizá-lo. 

Para utilizar o Binary Reader para acessar os redo logs, inclua os seguintes atributos de conexão adicionais.

```
useLogMinerReader=N;useBfile=Y;
```

Utilize o seguinte formato para os atributos de conexão adicionais para acessar um servidor que utiliza o ASM com o Binary Reader.

```
useLogMinerReader=N;useBfile=Y;asm_user=asm_username;asm_server=RAC_server_ip_address:port_number/+ASM;
```

Defina o parâmetro de solicitação `Password` do endpoint de origem para a senha do usuário do Oracle e a senha do ASM, separadas por uma vírgula da seguinte forma.

```
oracle_user_password,asm_user_password
```

Quando a origem Oracle utiliza o ASM, é possível trabalhar com opções de alto desempenho no Binary Reader para o processamento de transações em escala. Essas opções incluem atributos de conexão adicionais para especificar o número de threads paralelos (`parallelASMReadThreads`) e o número de buffers de leitura antecipada (`readAheadBlocks`). A configuração conjunta desses atributos pode melhorar significativamente o desempenho da tarefa de CDC. As configurações a seguir fornecem bons resultados para a maioria das configurações do ASM.

```
useLogMinerReader=N;useBfile=Y;asm_user=asm_username;asm_server=RAC_server_ip_address:port_number/+ASM;
    parallelASMReadThreads=6;readAheadBlocks=150000;
```

Para obter mais informações sobre os valores compatíveis com atributos de conexão adicionais, consulte [Configurações de endpoint ao usar o Oracle como fonte para AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib).

Além disso, o desempenho de uma tarefa de CDC com uma origem Oracle que utiliza o ASM depende das outras configurações escolhidas. Essas configurações incluem os atributos de conexão adicionais do AWS DMS e as configurações do SQL para configurar a origem Oracle. Para obter mais informações sobre atributos de conexão adicionais para uma origem Oracle que utiliza o ASM, consulte [Configurações de endpoint ao usar o Oracle como fonte para AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib)

Você também precisa escolher um ponto de partida apropriado da CDC. Normalmente, ao fazer isso, você deseja identificar o ponto de processamento da transação que captura a primeira transação aberta a partir da qual a CDC é iniciada. Caso contrário, a tarefa de CDC pode perder transações abertas anteriores. Para um banco de dados de origem Oracle, é possível escolher um ponto inicial nativo da CDC com base no número da alteração do sistema (SCN) do Oracle para identificar essa primeira transação aberta. Para obter mais informações, consulte [Executar a replicação a partir de um ponto de início de CDC](CHAP_Task.CDC.md#CHAP_Task.CDC.StartPoint).

Para obter mais informações sobre como configurar a CDC para um banco de dados Oracle autogerenciado como origem, consulte [Privilégios de conta necessários ao usar o Oracle LogMiner para acessar os redo logs](#CHAP_Source.Oracle.Self-Managed.LogMinerPrivileges), [Privilégios de conta necessários ao usar o AWS DMS Binary Reader para acessar os redo logs](#CHAP_Source.Oracle.Self-Managed.BinaryReaderPrivileges) e [Privilégios adicionais de conta necessários ao utilizar o Binary Reader com o Oracle ASM](#CHAP_Source.Oracle.Self-Managed.ASMBinaryPrivileges).

Para obter mais informações sobre como configurar o CDC para um banco AWS de dados Oracle gerenciado como fonte, consulte e. [Configurando uma tarefa do CDC para usar o Binary Reader com uma fonte do RDS for Oracle para AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC) [Usando um Amazon RDS Oracle Standby (réplica de leitura) como fonte com o Binary Reader for CDC em AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.StandBy)

## Fluxos de trabalho para configurar um banco de dados de origem Oracle autogerenciado ou AWS gerenciado para AWS DMS


## Configurar um banco de dados de origem Oracle
<a name="CHAP_Source.Oracle.Workflows"></a>

Para configurar uma instância de banco de dados de origem autogerenciado, utilize as seguintes etapas, dependendo de como você executa a CDC. 


| Para esta etapa do fluxo de trabalho | Se você executar o CDC usando LogMiner, faça isso | Se você executar a CDC utilizando o Binary Reader, faça isso | 
| --- | --- | --- | 
| Conceda privilégios à conta Oracle. | Consulte [Privilégios de conta de usuário necessários em uma fonte Oracle autogerenciada para AWS DMS](#CHAP_Source.Oracle.Self-Managed.Privileges). | Consulte [Privilégios de conta de usuário necessários em uma fonte Oracle autogerenciada para AWS DMS](#CHAP_Source.Oracle.Self-Managed.Privileges). | 
| Prepare o banco de dados de origem para replicação utilizando a CDC. | Consulte [Preparando um banco de dados de origem autogerenciado Oracle para CDC usando AWS DMS](#CHAP_Source.Oracle.Self-Managed.Configuration). | Consulte [Preparando um banco de dados de origem autogerenciado Oracle para CDC usando AWS DMS](#CHAP_Source.Oracle.Self-Managed.Configuration). | 
| Conceda privilégios adicionais ao usuário do Oracle necessários para a CDC. | Consulte [Privilégios de conta necessários ao usar o Oracle LogMiner para acessar os redo logs](#CHAP_Source.Oracle.Self-Managed.LogMinerPrivileges). | Consulte [Privilégios de conta necessários ao usar o AWS DMS Binary Reader para acessar os redo logs](#CHAP_Source.Oracle.Self-Managed.BinaryReaderPrivileges). | 
| Para uma instância Oracle com ASM, conceda privilégios adicionais de conta de usuário necessários para acessar o ASM para CDC. | Nenhuma ação adicional. AWS DMS oferece suporte ao Oracle ASM sem privilégios adicionais de conta. | Consulte [Privilégios adicionais de conta necessários ao utilizar o Binary Reader com o Oracle ASM](#CHAP_Source.Oracle.Self-Managed.ASMBinaryPrivileges). | 
| Se você ainda não tiver feito isso, configure a tarefa a ser usada LogMiner ou o Binary Reader for CDC. | Consulte [Usando Oracle LogMiner ou AWS DMS Binary Reader para CDC](#CHAP_Source.Oracle.CDC). | Consulte [Usando Oracle LogMiner ou AWS DMS Binary Reader para CDC](#CHAP_Source.Oracle.CDC). | 
| Configure o Oracle Standby como origem para a CDC. | AWS DMS não oferece suporte ao Oracle Standby como fonte. | Consulte [Usando um Oracle Standby autogerenciado como fonte com o Binary Reader for CDC em AWS DMS](#CHAP_Source.Oracle.Self-Managed.BinaryStandby). | 

Use as seguintes etapas do fluxo de trabalho para configurar uma instância de banco AWS de dados de origem Oracle gerenciada.


| Para esta etapa do fluxo de trabalho | Se você executar o CDC usando LogMiner, faça isso | Se você executar a CDC utilizando o Binary Reader, faça isso | 
| --- | --- | --- | 
| Conceda privilégios à conta Oracle. | Para obter mais informações, consulte [Privilégios de conta de usuário necessários em uma fonte Oracle AWS gerenciada para AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Privileges). | Para obter mais informações, consulte [Privilégios de conta de usuário necessários em uma fonte Oracle AWS gerenciada para AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Privileges). | 
| Prepare o banco de dados de origem para replicação utilizando a CDC. | Para obter mais informações, consulte [Configurando uma fonte Oracle AWS gerenciada para AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Configuration). | Para obter mais informações, consulte [Configurando uma fonte Oracle AWS gerenciada para AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Configuration). | 
| Conceda privilégios adicionais ao usuário do Oracle necessários para a CDC. | Nenhum privilégio adicional de conta é necessário. | Para obter mais informações, consulte [Configurando uma tarefa do CDC para usar o Binary Reader com uma fonte do RDS for Oracle para AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC). | 
| Se você ainda não tiver feito isso, configure a tarefa a ser usada LogMiner ou o Binary Reader for CDC. | Para obter mais informações, consulte [Usando Oracle LogMiner ou AWS DMS Binary Reader para CDC](#CHAP_Source.Oracle.CDC). | Para obter mais informações, consulte [Usando Oracle LogMiner ou AWS DMS Binary Reader para CDC](#CHAP_Source.Oracle.CDC). | 
| Configure o Oracle Standby como origem para a CDC. | AWS DMS não oferece suporte ao Oracle Standby como fonte. | Para obter mais informações, consulte [Usando um Amazon RDS Oracle Standby (réplica de leitura) como fonte com o Binary Reader for CDC em AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.StandBy). | 

## Trabalhando com um banco de dados Oracle autogerenciado como fonte para AWS DMS
<a name="CHAP_Source.Oracle.Self-Managed"></a>

Um *banco de dados autogerenciado* é um banco de dados que você configura e controla, em uma instância de banco de dados on-premises ou em um banco de dados no Amazon EC2. A seguir, você pode descobrir os privilégios e as configurações de que precisa ao usar um banco de dados Oracle autogerenciado com o. AWS DMS

### Privilégios de conta de usuário necessários em uma fonte Oracle autogerenciada para AWS DMS
<a name="CHAP_Source.Oracle.Self-Managed.Privileges"></a>

Para usar um banco de dados Oracle como origem em AWS DMS, conceda os seguintes privilégios ao usuário Oracle especificado nas configurações de conexão do endpoint Oracle.

**nota**  
Ao conceder privilégios, utilize o nome real dos objetos, não o sinônimo de cada objeto. Por exemplo, utilize `V_$OBJECT` incluindo o sublinhado, não `V$OBJECT` sem o sublinhado.

```
GRANT CREATE SESSION TO dms_user;
GRANT SELECT ANY TRANSACTION TO dms_user;
GRANT SELECT ON V_$ARCHIVED_LOG TO dms_user;
GRANT SELECT ON V_$LOG TO dms_user;
GRANT SELECT ON V_$LOGFILE TO dms_user;
GRANT SELECT ON V_$LOGMNR_LOGS TO dms_user;
GRANT SELECT ON V_$LOGMNR_CONTENTS TO dms_user;
GRANT SELECT ON V_$DATABASE TO dms_user;
GRANT SELECT ON V_$THREAD TO dms_user;
GRANT SELECT ON V_$PARAMETER TO dms_user;
GRANT SELECT ON V_$NLS_PARAMETERS TO dms_user;
GRANT SELECT ON V_$TIMEZONE_NAMES TO dms_user;
GRANT SELECT ON V_$TRANSACTION TO dms_user;
GRANT SELECT ON V_$CONTAINERS TO dms_user;                   
GRANT SELECT ON ALL_INDEXES TO dms_user;
GRANT SELECT ON ALL_OBJECTS TO dms_user;
GRANT SELECT ON ALL_TABLES TO dms_user;
GRANT SELECT ON ALL_USERS TO dms_user;
GRANT SELECT ON ALL_CATALOG TO dms_user;
GRANT SELECT ON ALL_CONSTRAINTS TO dms_user;
GRANT SELECT ON ALL_CONS_COLUMNS TO dms_user;
GRANT SELECT ON ALL_TAB_COLS TO dms_user;
GRANT SELECT ON ALL_IND_COLUMNS TO dms_user;
GRANT SELECT ON ALL_ENCRYPTED_COLUMNS TO dms_user;
GRANT SELECT ON ALL_LOG_GROUPS TO dms_user;
GRANT SELECT ON ALL_TAB_PARTITIONS TO dms_user;
GRANT SELECT ON SYS.DBA_REGISTRY TO dms_user;
GRANT SELECT ON SYS.OBJ$ TO dms_user;
GRANT SELECT ON DBA_TABLESPACES TO dms_user;
GRANT SELECT ON DBA_OBJECTS TO dms_user; -– Required if the Oracle version is earlier than 11.2.0.3.
GRANT SELECT ON SYS.ENC$ TO dms_user; -– Required if transparent data encryption (TDE) is enabled. For more information on using Oracle TDE with AWS DMS, see Métodos de criptografia suportados para usar o Oracle como fonte para AWS DMS.
GRANT SELECT ON GV_$TRANSACTION TO dms_user; -– Required if the source database is Oracle RAC in AWS DMS versions 3.4.6 and higher.
GRANT SELECT ON V_$DATAGUARD_STATS TO dms_user; -- Required if the source database is Oracle Data Guard and Oracle Standby is used in the latest release of DMS version 3.4.6, version 3.4.7, and higher.
GRANT SELECT ON V_$DATABASE_INCARNATION TO dms_user;
```

Conceda o privilégio adicional a seguir para cada tabela replicada ao utilizar uma lista de tabelas específica.

```
GRANT SELECT on any-replicated-table to dms_user;
```

Conceda o privilégio adicional a seguir para utilizar o recurso de validação.

```
GRANT EXECUTE ON SYS.DBMS_CRYPTO TO dms_user;
```

Conceda o seguinte privilégio adicional se você usar o leitor binário em vez de LogMiner.

```
GRANT SELECT ON SYS.DBA_DIRECTORIES TO dms_user;
```

Conceda o seguinte privilégio adicional para expor visualizações.

```
GRANT SELECT on ALL_VIEWS to dms_user;
```

Para expor visualizações, adicione também o atributo de conexão adicional do `exposeViews=true` ao endpoint de origem.

Conceda o seguinte privilégio adicional ao utilizar replicações com tecnologia sem servidor.

```
GRANT SELECT on dba_segments to dms_user;
GRANT SELECT on v_$tablespace to dms_user;
GRANT SELECT on dba_tab_subpartitions to dms_user;
GRANT SELECT on dba_extents to dms_user;
```

Para obter informações sobre as replicações com tecnologia sem servidor, consulte [Trabalhando com AWS DMS Serverless](CHAP_Serverless.md).

Conceda os seguintes privilégios adicionais ao utilizar avaliações de pré-migração específicas do Oracle.

```
GRANT SELECT on gv_$parameter  to dms_user;
GRANT SELECT on v_$instance to dms_user;
GRANT SELECT on v_$version to dms_user;
GRANT SELECT on gv_$ASM_DISKGROUP to dms_user;
GRANT SELECT on gv_$database to dms_user;
GRANT SELECT on dba_db_links to dms_user;
GRANT SELECT on gv_$log_History to dms_user;
GRANT SELECT on gv_$log to dms_user;
GRANT SELECT ON DBA_TYPES TO dms_user;
GRANT SELECT ON DBA_USERS to dms_user;
GRANT SELECT ON DBA_DIRECTORIES to dms_user;
GRANT EXECUTE ON SYS.DBMS_XMLGEN TO dms_user;
```

Para obter informações sobre avaliações de pré-migração específicas do Oracle, consulte. [Avaliações do Oracle](CHAP_Tasks.AssessmentReport.Oracle.md)

#### Pré-requisitos para tratar transações abertas do Oracle Standby
<a name="CHAP_Source.Oracle.Self-Managed.Privileges.Standby"></a>

Ao usar AWS DMS as versões 3.4.6 e superiores, execute as etapas a seguir para lidar com transações abertas para o Oracle Standby. 

1. Crie um link de banco de dados nomeado `AWSDMS_DBLINK` no banco de dados primário. O `DMS_USER` utilizará o link de banco de dados para conectar-se ao banco de dados primário. Observe que o link de banco de dados é executado na instância em espera para consultar as transações abertas em execução no banco de dados primário. Veja o exemplo a seguir. 

   ```
   CREATE PUBLIC DATABASE LINK AWSDMS_DBLINK 
      CONNECT TO DMS_USER IDENTIFIED BY DMS_USER_PASSWORD
      USING '(DESCRIPTION=
               (ADDRESS=(PROTOCOL=TCP)(HOST=PRIMARY_HOST_NAME_OR_IP)(PORT=PORT))
               (CONNECT_DATA=(SERVICE_NAME=SID))
             )';
   ```

1. Verifique se a conexão ao link de banco de dados que utiliza o `DMS_USER` está estabelecida conforme mostrado no exemplo a seguir.

   ```
   select 1 from dual@AWSDMS_DBLINK
   ```

### Preparando um banco de dados de origem autogerenciado Oracle para CDC usando AWS DMS
<a name="CHAP_Source.Oracle.Self-Managed.Configuration"></a>

Prepare seu banco de dados Oracle autogerenciado como origem para executar uma tarefa de CDC fazendo o seguinte: 
+ [Verificando se é AWS DMS compatível com a versão do banco de dados de origem](#CHAP_Source.Oracle.Self-Managed.Configuration.DbVersion).
+ [Verificar se o modo ARCHIVELOG está ativado](#CHAP_Source.Oracle.Self-Managed.Configuration.ArchiveLogMode).
+ [Configuração de registro em log suplementar](#CHAP_Source.Oracle.Self-Managed.Configuration.SupplementalLogging).

#### Verificando se é AWS DMS compatível com a versão do banco de dados de origem
<a name="CHAP_Source.Oracle.Self-Managed.Configuration.DbVersion"></a>

Execute uma consulta, como a seguinte, para verificar se a versão atual do banco de dados Oracle é compatível com o AWS DMS.

```
SELECT name, value, description FROM v$parameter WHERE name = 'compatible';
```

Aqui, `name`, `value` e `description` são colunas em algum local no banco de dados que estão sendo consultadas com base no valor de `name`. Se essa consulta for executada sem erros, AWS DMS será compatível com a versão atual do banco de dados e você poderá continuar com a migração. Se a consulta gerar um erro, AWS DMS isso não é compatível com a versão atual do banco de dados. Para continuar com a migração, primeiro converta o banco de dados Oracle em uma versão suportada pelo AWS DMS.

#### Verificar se o modo ARCHIVELOG está ativado
<a name="CHAP_Source.Oracle.Self-Managed.Configuration.ArchiveLogMode"></a>

É possível executar o Oracle em dois modos diferentes: o modo `ARCHIVELOG` e o modo `NOARCHIVELOG`. Para executar uma tarefa de CDC, execute o banco de dados no modo `ARCHIVELOG`. Para saber se o banco de dados está no modo `ARCHIVELOG`, execute a consulta a seguir.

```
SQL> SELECT log_mode FROM v$database;
```

Se for retornado o modo `NOARCHIVELOG`, defina o banco de dados como `ARCHIVELOG` de acordo com as instruções do Oracle. 

#### Configuração de registro em log suplementar
<a name="CHAP_Source.Oracle.Self-Managed.Configuration.SupplementalLogging"></a>

Para capturar as mudanças em andamento, é AWS DMS necessário que você habilite o mínimo de registro suplementar em seu banco de dados de origem Oracle. Além disso, você precisa ativar o registro em log suplementar em cada tabela replicada no banco de dados.

Por padrão, AWS DMS adiciona registro `PRIMARY KEY` suplementar em todas as tabelas replicadas. Para permitir AWS DMS a adição de registros `PRIMARY KEY` complementares, conceda o seguinte privilégio para cada tabela replicada.

```
ALTER on any-replicated-table;
```

Você pode desativar o registro `PRIMARY KEY` suplementar padrão adicionado AWS DMS usando o atributo de conexão extra. `addSupplementalLogging` Para obter mais informações, consulte [Configurações de endpoint ao usar o Oracle como fonte para AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib).

Ative o registro em log suplementar se a tarefa de replicação atualizar uma tabela utilizando uma cláusula `WHERE` que não faz referência a uma coluna de chave primária.

**Como configurar o registro em log suplementar manualmente**

1. Execute a consulta a seguir para verificar se o registro em log suplementar está ativado para o banco de dados.

   ```
   SELECT supplemental_log_data_min FROM v$database;
   ```

   Se o resultado retornado for `YES` ou `IMPLICIT`, o registro em log suplementar estará ativado para o banco de dados.

   Se necessário, ative o registro em log suplementar para o banco de dados executando o comando a seguir.

   ```
   ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
   ```

1. Verifique se o registro em log suplementar necessário está adicionado a cada tabela replicada.

   Considere o seguinte:
   + Se o registro em log suplementar `ALL COLUMNS` estiver adicionado à tabela, não será necessário adicionar mais registros em log.
   + Se houver uma chave primária, adicione o registro em log suplementar à chave primária. É possível fazer isso utilizando o formato para adicionar registro em log suplementar à chave primária ou adicionando o registro em log suplementar às colunas de chave primária no banco de dados.

     ```
     ALTER TABLE Tablename ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
     ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
     ```
   + Se não houver uma chave primária e a tabela possuir um único índice exclusivo, adicione todas as colunas do índice exclusivo ao log suplementar.

     ```
     ALTER TABLE TableName ADD SUPPLEMENTAL LOG GROUP LogGroupName (UniqueIndexColumn1[, UniqueIndexColumn2] ...) ALWAYS;
     ```

     Usar `SUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS` não faz com que as colunas do índice exclusivo sejam adicionadas ao log.
   + Se não existir uma chave primária e a tabela tiver vários índices exclusivos, AWS DMS seleciona o primeiro índice exclusivo em uma lista ascendente ordenada alfabeticamente. Você precisa adicionar registro em log suplementar nas colunas do índice selecionado, como no item anterior.

     Usar `SUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS` não faz com que as colunas do índice exclusivo sejam adicionadas ao log.
   + Se não houver uma chave primária e não houver um índice exclusivo, adicione o registro em log suplementar em todas as colunas.

     ```
     ALTER TABLE TableName ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
     ```

     Em alguns casos, a chave primária da tabela de destino ou índice exclusivo são diferentes da chave primária da tabela de origem ou índice exclusivo. Nesses casos, adicione o registro em log suplementar manualmente nas colunas da tabela de origem que compõem a chave primária da tabela ou o índice exclusivo de destino.

     Além disso, se você alterar a chave primária da tabela de destino, adicione o registro complementar às colunas do índice exclusivo de destino, em vez das colunas do índice exclusivo ou da chave primária de origem.

Se um filtro ou uma transformação for definida para uma tabela, talvez seja necessário habilitar o registro em log adicional.

Considere o seguinte:
+ Se o registro em log suplementar `ALL COLUMNS` estiver adicionado à tabela, não será necessário adicionar mais registros em log.
+ Se a tabela tiver um índice exclusivo ou uma chave primária, adicione registro em log suplementar a cada coluna envolvida em um filtro ou transformação. No entanto, faça isso somente se essas colunas forem diferentes da chave primária ou das colunas do índice exclusivo.
+ Se uma transformação incluir apenas uma coluna, não adicione essa coluna a um grupo de registro em log suplementar. Por exemplo, para uma transformação `A+B`, adicione registro em log suplementar em ambas as colunas `A` e `B`. No entanto, para uma transformação `substring(A,10)`, não adicione registro em log suplementar à coluna `A`.
+ Para configurar o registro em log suplementar em colunas de índice exclusivo ou de chave primária e outras colunas específicas filtradas ou transformadas, é possível adicionar o registro em log suplementar `USER_LOG_GROUP`. Adicione esse registro em log suplementar às colunas de chave primária ou ao índice exclusivo e às outras colunas específicas filtradas ou transformadas.

  Por exemplo, para replicar uma tabela nomeada `TEST.LOGGING` com chave primária `ID` e um filtro pela coluna `NAME`, é possível executar um comando semelhante ao seguinte para criar o registro em log suplementar do grupo de logs.

  ```
  ALTER TABLE TEST.LOGGING ADD SUPPLEMENTAL LOG GROUP TEST_LOG_GROUP (ID, NAME) ALWAYS;
  ```

### Privilégios de conta necessários ao usar o Oracle LogMiner para acessar os redo logs
<a name="CHAP_Source.Oracle.Self-Managed.LogMinerPrivileges"></a>

Para acessar os redo logs usando o Oracle LogMiner, conceda os seguintes privilégios ao usuário Oracle especificado nas configurações de conexão do endpoint Oracle.

```
GRANT EXECUTE on DBMS_LOGMNR to dms_user;
GRANT SELECT on V_$LOGMNR_LOGS to dms_user;
GRANT SELECT on V_$LOGMNR_CONTENTS to dms_user;
GRANT LOGMINING to dms_user; -– Required only if the Oracle version is 12c or higher.
```

### Privilégios de conta necessários ao usar o AWS DMS Binary Reader para acessar os redo logs
<a name="CHAP_Source.Oracle.Self-Managed.BinaryReaderPrivileges"></a>

Para acessar os redo logs usando o AWS DMS Binary Reader, conceda os seguintes privilégios ao usuário Oracle especificado nas configurações de conexão do endpoint Oracle.

```
GRANT SELECT on v_$transportable_platform to dms_user;   -– Grant this privilege if the redo logs are stored in Oracle Automatic Storage Management (ASM) and AWS DMS accesses them from ASM.
GRANT CREATE ANY DIRECTORY to dms_user;                  -– Grant this privilege to allow AWS DMS to use Oracle BFILE read file access in certain cases. This access is required when the replication instance does not have file-level access to the redo logs and the redo logs are on non-ASM storage.
GRANT EXECUTE on DBMS_FILE_TRANSFER to dms_user;         -– Grant this privilege to copy the redo log files to a temporary folder using the CopyToTempFolder method.
GRANT EXECUTE on DBMS_FILE_GROUP to dms_user;
```

O Binary Reader funciona com recursos de arquivo Oracle que incluem diretórios do Oracle. Cada objeto no diretório do Oracle inclui o nome da pasta que contém os arquivos de logs redo a serem processados. Esses diretórios do Oracle não são representados em nível de sistema de arquivos. Eles são diretórios lógicos criados no nível do banco de dados Oracle. É possível exibi-los na visualização `ALL_DIRECTORIES` do Oracle.

Se você quiser AWS DMS criar esses diretórios Oracle, conceda o `CREATE ANY DIRECTORY` privilégio especificado anteriormente. AWS DMS cria os nomes dos diretórios com o `DMS_` prefixo. Se você não conceder o privilégio `CREATE ANY DIRECTORY`, crie os diretórios correspondentes manualmente. Em alguns casos, ao criar os diretórios do Oracle manualmente, o usuário do Oracle especificado no endpoint de origem Oracle não é o usuário que criou esses diretórios. Nesses casos, também conceda o privilégio `READ on DIRECTORY`.

**nota**  
AWS DMS O CDC não oferece suporte ao Active Dataguard Standby que não está configurado para usar o serviço de transporte automático de redo.

Em alguns casos, é possível utilizar o Oracle Managed Files (OMF) para armazenar os logs. Ou endpoint de origem está no ADG e, portanto, o privilégio CREATE ANY DIRECTORY não pode ser concedido. Nesses casos, crie manualmente os diretórios com todos os locais de log possíveis antes de iniciar a tarefa de AWS DMS replicação. Se AWS DMS não encontrar o diretório pré-criado esperado, a tarefa será interrompida. Além disso, AWS DMS não exclui as entradas que criou na `ALL_DIRECTORIES` exibição, portanto, exclua-as manualmente.

### Privilégios adicionais de conta necessários ao utilizar o Binary Reader com o Oracle ASM
<a name="CHAP_Source.Oracle.Self-Managed.ASMBinaryPrivileges"></a>

Para acessar os redo logs no Automatic Storage Management (ASM) utilizando o Binary Reader, conceda os seguintes privilégios ao usuário do Oracle especificado nas configurações de conexão de endpoint do Oracle:

```
SELECT ON v_$transportable_platform
SYSASM -– To access the ASM account with Oracle 11g Release 2 (version 11.2.0.2) and higher, grant the Oracle endpoint user the SYSASM privilege. For older supported Oracle versions, it's typically sufficient to grant the Oracle endpoint user the SYSDBA privilege.
```

É possível validar o acesso à conta do ASM abrindo um prompt de comando e invocando uma das instruções a seguir, dependendo da versão do Oracle, conforme especificado anteriormente.

Se o privilégio `SYSDBA` for necessário, use o seguinte.

```
sqlplus asmuser/asmpassword@+asmserver as sysdba
```

Se o privilégio `SYSASM` for necessário, use o seguinte. 

```
sqlplus asmuser/asmpassword@+asmserver as sysasm
```

### Usando um Oracle Standby autogerenciado como fonte com o Binary Reader for CDC em AWS DMS
<a name="CHAP_Source.Oracle.Self-Managed.BinaryStandby"></a>

Para configurar uma instância do Oracle Standby como origem ao utilizar o Binary Reader para CDC, comece com os seguintes pré-requisitos:
+ AWS DMS atualmente suporta somente o Oracle Active Data Guard Standby.
+ Verifique se a configuração do Oracle Data Guard utiliza:
  + Serviços de transporte de refazer para transferências automatizadas de dados de refazer.
  + Aplique serviços para aplicar automaticamente refazer banco de dados em espera.

Para confirmar se esses requisitos foram atendidos, execute a consulta a seguir.

```
SQL> select open_mode, database_role from v$database;
```

Na saída dessa consulta, confirme se o banco de dados em espera está aberto no modo SOMENTE LEITURA e se refazer está sendo aplicado automaticamente. Por exemplo:

```
OPEN_MODE             DATABASE_ROLE
--------------------  ----------------
READ ONLY WITH APPLY  PHYSICAL STANDBY
```

**Como configurar uma instância do Oracle Standby como origem ao utilizar o Binary Reader para CDC**

1. Conceda privilégios adicionais necessários para acessar arquivos de log em espera.

   ```
   GRANT SELECT ON v_$standby_log TO dms_user;
   ```

1. Crie um endpoint de origem para o Oracle Standby utilizando o Console de gerenciamento da AWS ou a AWS CLI. Ao criar o endpoint, especifique os seguintes atributos de conexão adicionais.

   ```
   useLogminerReader=N;useBfile=Y;
   ```
**nota**  
Em AWS DMS, você pode usar atributos de conexão extras para especificar se deseja migrar dos registros de arquivamento em vez dos redo logs. Para obter mais informações, consulte [Configurações de endpoint ao usar o Oracle como fonte para AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib).

1. Configure o destino do log arquivado.

   O Binary Reader do DMS da origem do Oracle sem ASM utiliza diretórios do Oracle para acessar os redo logs arquivados. Se o banco de dados estiver configurado para utilizar Fast Recovery Area (FRA) como destino do log de arquivamento, a localização dos arquivos de refazer de arquivamento não é constante. Cada dia em que redo logs arquivados são gerados resulta em um novo diretório criado no FRA, utilizando o formato de nome de diretório AAAA\$1MM\$1DD. Por exemplo: 

   ```
   DB_RECOVERY_FILE_DEST/SID/archivelog/YYYY_MM_DD
   ```

   Quando o DMS precisa acessar arquivos de refazer arquivados no diretório FRA recém-criado, e o banco de dados primário de leitura e gravação está sendo utilizado como origem, o DMS cria um novo diretório Oracle ou substitui um existente, da seguinte forma. 

   ```
   CREATE OR REPLACE DIRECTORY dmsrep_taskid AS ‘DB_RECOVERY_FILE_DEST/SID/archivelog/YYYY_MM_DD’;
   ```

   Quando o banco de dados em espera está sendo utilizado como origem, o DMS não pode criar ou substituir o diretório Oracle porque o banco de dados está no modo somente leitura. Porém, é possível optar por executar uma dessas etapas adicionais: 

   1. Modificar `log_archive_dest_id_1` para utilizar um caminho real em vez do FRA em uma configuração que o Oracle não crie subdiretórios diariamente:

      ```
      ALTER SYSTEM SET log_archive_dest_1=’LOCATION=full directory path’
      ```

      Criar um objeto no diretório Oracle para ser utilizado pelo DMS:

      ```
      CREATE OR REPLACE DIRECTORY dms_archived_logs AS ‘full directory path’;
      ```

   1. Criar um destino adicional de log de arquivamento e um objeto no diretório Oracle apontando para esse destino. Por exemplo:

      ```
      ALTER SYSTEM SET log_archive_dest_3=’LOCATION=full directory path’; 
      CREATE DIRECTORY dms_archived_log AS ‘full directory path’;
      ```

      Adicionar um atributo de conexão adicional ao endpoint da origem da tarefa:

      ```
      archivedLogDestId=3
      ```

   1. Pré-crie manualmente objetos no diretório Oracle para serem utilizados pelo DMS.

      ```
      CREATE DIRECTORY dms_archived_log_20210301 AS ‘DB_RECOVERY_FILE_DEST/SID/archivelog/2021_03_01’;
      CREATE DIRECTORY dms_archived_log_20210302 AS ‘DB_RECOVERY_FILE_DEST>/SID>/archivelog/2021_03_02’; 
      ...
      ```

   1. Criar uma tarefa do programador do Oracle que seja executada diariamente e criar o diretório necessário.

1. Configure o destino do log on-line. 

   Crie um diretório Oracle que aponte para o diretório do sistema operacional com logs de redo em espera:

   ```
   CREATE OR REPLACE DIRECTORY STANDBY_REDO_DIR AS '<full directory path>';
   GRANT READ ON DIRECTORY STANDBY_REDO_DIR TO <dms_user>;
   ```

### Usando um banco de dados gerenciado pelo usuário no Oracle Cloud Infrastructure (OCI) como fonte para o CDC em AWS DMS
<a name="CHAP_Source.Oracle.Self-Managed.OCI"></a>

Um banco de dados gerenciado pelo usuário é um banco de dados que você configura e controla, como um banco de dados Oracle criado em uma máquina virtual (VM), bare metal ou servidor Exadata. Ou bancos de dados que você configura e controla que são executados em uma infraestrutura dedicada, como o Oracle Cloud Infrastructure (OCI). As informações a seguir descrevem os privilégios e as configurações necessárias ao utilizar um banco de dados Oracle gerenciado pelo usuário no OCI como origem para a captura de dados de alteração (CDC) no AWS DMS.

**Para configurar um banco de dados Oracle gerenciado pelo usuário hospedado pelo OCI como origem para a captura de dados de alteração**

1. Conceda os privilégios da conta de usuário necessários para utilizar um banco de dados de origem do Oracle gerenciado pelo usuário no OCI. Para obter mais informações, consulte [Privilégios de conta para um endpoint de origem do Oracle autogerenciado](#CHAP_Source.Oracle.Self-Managed.Privileges).

1. Conceda os privilégios da conta necessários ao utilizar o Binary Reader para acessar os redo logs. Para obter mais informações, consulte [Privilégios da conta necessários ao utilizar o Binary Reader](#CHAP_Source.Oracle.Self-Managed.BinaryReaderPrivileges).

1. Adicione os privilégios da conta necessários ao utilizar o Binary Reader com o Oracle Automatic Storage Management (ASM). Para obter mais informações, consulte [Privilégios adicionais da conta necessários ao utilizar o Binary Reader com o Oracle ASM](#CHAP_Source.Oracle.Self-Managed.ASMBinaryPrivileges).

1. Configure o registro em log suplementar. Para obter mais informações, consulte [Configuração do registro em log suplementar](#CHAP_Source.Oracle.Self-Managed.Configuration.SupplementalLogging).

1. Configure a criptografia de TDE. Para obter mais informações, consulte [Métodos de criptografia ao utilizar um banco de dados Oracle como um endpoint de origem](#CHAP_Source.Oracle.Encryption).

As limitações a seguir se aplicam ao replicar dados de um banco de dados de origem do Oracle no Oracle Cloud Infrastructure (OCI).

**Limitações**
+ O DMS não suporta o uso do Oracle LogMiner para acessar os redo logs.
+ O DMS não é compatível com bancos de dados autônomos.

## Trabalhando com um banco AWS de dados Oracle gerenciado como fonte para AWS DMS
<a name="CHAP_Source.Oracle.Amazon-Managed"></a>

Um banco de dados AWS gerenciado é um banco de dados que está em um serviço da Amazon, como Amazon RDS, Amazon Aurora ou Amazon S3. A seguir, você pode encontrar os privilégios e configurações que você precisa definir ao usar um banco de dados Oracle AWS gerenciado com o. AWS DMS

### Privilégios de conta de usuário necessários em uma fonte Oracle AWS gerenciada para AWS DMS
<a name="CHAP_Source.Oracle.Amazon-Managed.Privileges"></a>

Conceda os seguintes privilégios à conta de usuário do Oracle especificada na definição do endpoint de origem do Oracle.

**Importante**  
Para todos os valores de parâmetros, como `dms_user` e `any-replicated-table`, o Oracle pressupõe que o valor está todo em letras maiúsculas, a menos que você especifique o valor com um identificador que diferencia letras maiúsculas de minúsculas. Por exemplo, suponha que você crie um valor de `dms_user` sem utilizar aspas, como em `CREATE USER myuser` ou `CREATE USER MYUSER`. Nesse caso, o Oracle identifica e armazena o valor como todo em maiúsculas (`MYUSER`). Se você utilizar aspas, como em `CREATE USER "MyUser"` ou`CREATE USER 'MyUser'`, o Oracle identificará e armazenará o valor com distinção entre maiúsculas e minúsculas que você especificar (`MyUser`).

```
GRANT CREATE SESSION to dms_user;
GRANT SELECT ANY TRANSACTION to dms_user;
GRANT SELECT on DBA_TABLESPACES to dms_user;
GRANT SELECT ON any-replicated-table to dms_user;
GRANT EXECUTE on rdsadmin.rdsadmin_util to dms_user;
 -- For Oracle 12c or higher:
GRANT LOGMINING to dms_user; – Required only if the Oracle version is 12c or higher.
```

Além disso, conceda as permissões `SELECT` e `EXECUTE` em objetos `SYS` utilizando o procedimento do Amazon RDS `rdsadmin.rdsadmin_util.grant_sys_object` conforme mostrado. Para obter mais informações, consulte [Conceder privilégios SELECT ou EXECUTE a objetos SYS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.html#Appendix.Oracle.CommonDBATasks.TransferPrivileges).

```
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_VIEWS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TAB_PARTITIONS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_INDEXES', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_OBJECTS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TABLES', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_USERS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_CATALOG', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_CONSTRAINTS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_CONS_COLUMNS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TAB_COLS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_IND_COLUMNS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_LOG_GROUPS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOG', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGFILE', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$THREAD', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$PARAMETER', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$NLS_PARAMETERS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$TIMEZONE_NAMES', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$TRANSACTION', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$CONTAINERS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_REGISTRY', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('OBJ$', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_ENCRYPTED_COLUMNS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_LOGS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_CONTENTS','dms_user','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR', 'dms_user', 'EXECUTE');

-- (as of Oracle versions 12.1 and higher)
exec rdsadmin.rdsadmin_util.grant_sys_object('REGISTRY$SQLPATCH', 'dms_user', 'SELECT');

-- (for Amazon RDS Active Dataguard Standby (ADG))
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$STANDBY_LOG', 'dms_user', 'SELECT'); 

-- (for transparent data encryption (TDE))

exec rdsadmin.rdsadmin_util.grant_sys_object('ENC$', 'dms_user', 'SELECT'); 
               
-- (for validation with LOB columns)
exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_CRYPTO', 'dms_user', 'EXECUTE');
                    
-- (for binary reader)
exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_DIRECTORIES','dms_user','SELECT'); 
                    
-- Required when the source database is Oracle Data guard, and Oracle Standby is used in the latest release of DMS version 3.4.6, version 3.4.7, and higher.

exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATAGUARD_STATS', 'dms_user', 'SELECT');
```

Para obter mais informações sobre como utilizar o Amazon RDS Active Dataguard Standby (ADG) com o AWS DMS , consulte [Usando um Amazon RDS Oracle Standby (réplica de leitura) como fonte com o Binary Reader for CDC em AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.StandBy).

Para obter mais informações sobre como usar o Oracle TDE com AWS DMS, consulte[Métodos de criptografia suportados para usar o Oracle como fonte para AWS DMS](#CHAP_Source.Oracle.Encryption).

#### Pré-requisitos para tratar transações abertas do Oracle Standby
<a name="CHAP_Source.Oracle.Amazon-Managed.Privileges.Standby"></a>

Ao usar AWS DMS as versões 3.4.6 e superiores, execute as etapas a seguir para lidar com transações abertas para o Oracle Standby. 

1. Crie um link de banco de dados nomeado `AWSDMS_DBLINK` no banco de dados primário. O `DMS_USER` utilizará o link de banco de dados para conectar-se ao banco de dados primário. Observe que o link de banco de dados é executado na instância em espera para consultar as transações abertas em execução no banco de dados primário. Veja o exemplo a seguir. 

   ```
   CREATE PUBLIC DATABASE LINK AWSDMS_DBLINK 
      CONNECT TO DMS_USER IDENTIFIED BY DMS_USER_PASSWORD
      USING '(DESCRIPTION=
               (ADDRESS=(PROTOCOL=TCP)(HOST=PRIMARY_HOST_NAME_OR_IP)(PORT=PORT))
               (CONNECT_DATA=(SERVICE_NAME=SID))
             )';
   ```

1. Verifique se a conexão ao link de banco de dados que utiliza o `DMS_USER` está estabelecida conforme mostrado no exemplo a seguir.

   ```
   select 1 from dual@AWSDMS_DBLINK
   ```

### Configurando uma fonte Oracle AWS gerenciada para AWS DMS
<a name="CHAP_Source.Oracle.Amazon-Managed.Configuration"></a>

Antes de usar um banco AWS de dados Oracle gerenciado como fonte para AWS DMS, execute as seguintes tarefas para o banco de dados Oracle:
+ Ative backups automáticos. Para obter mais informações sobre como ativar backups automáticos, consulte [Ativar backups automáticos](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html#USER_WorkingWithAutomatedBackups.Enabling) no *Guia do usuário do Amazon RDS*.
+ Configure o registro em log suplementar.
+ Configure o arquivamento. O arquivamento dos redo logs da sua instância de banco de dados Amazon RDS for Oracle AWS DMS permite recuperar as informações de log usando o LogMiner Oracle ou o Binary Reader. 

**Como configurar o arquivamento**

1. Execute o comando `rdsadmin.rdsadmin_util.set_configuration` para configurar o arquivamento.

   Por exemplo, para reter os redo logs arquivados por 24 horas, execute o comando a seguir.

   ```
   exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',24);
   commit;
   ```
**nota**  
A confirmação é necessária para que uma alteração entre em vigor.

1. Verifique se o armazenamento tem espaço suficiente para os redo logs arquivados durante o período de retenção especificado. Por exemplo, se o período de retenção for de 24 horas, calcule o tamanho total dos redo logs arquivados acumulados em uma hora típica de processamento de transações e multiplique esse total por 24. Compare esse total calculado de 24 horas com o espaço de armazenamento disponível e decida se você tem espaço de armazenamento suficiente para tratar o processamento de transações de um total 24 horas.

**Como configurar o registro em log suplementar**

1. Execute o comando a seguir para ativar o registro em log suplementar no nível de banco de dados.

   ```
   exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
   ```

1. O exemplo a seguir ativa o registro em log suplementar de chave primária.

   ```
   exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','PRIMARY KEY');
   ```

1. (Opcional) Ative o registro em log suplementar em nível de chave no nível da tabela.

   O banco de dados de origem incorre em pequenos custos quando o registro em log suplementar em nível de chave está ativado. Portanto, se estiver migrando apenas um subconjunto das tabelas, ative o registro em log suplementar de nível de chave no nível da tabela. Para ativar o registro em log suplementar de nível de chave no nível da tabela, execute o seguinte comando.

   ```
   alter table table_name add supplemental log data (PRIMARY KEY) columns;
   ```

### Configurando uma tarefa do CDC para usar o Binary Reader com uma fonte do RDS for Oracle para AWS DMS
<a name="CHAP_Source.Oracle.Amazon-Managed.CDC"></a>

Você pode configurar AWS DMS para acessar os redo logs de origem da instância Amazon RDS for Oracle usando o Binary Reader for CDC. 

**nota**  
Para usar o Oracle LogMiner, os privilégios mínimos de conta de usuário necessários são suficientes. Para obter mais informações, consulte [Privilégios de conta de usuário necessários em uma fonte Oracle AWS gerenciada para AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Privileges).

Para usar o AWS DMS Binary Reader, especifique configurações adicionais e atributos de conexão extras para o endpoint de origem Oracle, dependendo da sua AWS DMS versão.

A compatibilidade com o Binary Reader está disponível nas seguintes versões do Amazon RDS para Oracle:
+ Oracle 11.2, versões 11.2.0.4V11 e superior
+ Oracle 12.1, versões 12.1.0.2.V7 e superior
+ Oracle 12.2, todas as versões
+ Oracle 18.0, todas as versões
+ Oracle 19.0, todas as versões

**Como configurar a CDC utilizando o Binary Reader**

1. Faça login no banco de dados de origem do Amazon RDS para Oracle como o usuário mestre e execute os seguintes procedimentos armazenados para criar os diretórios em nível de servidor.

   ```
   exec rdsadmin.rdsadmin_master_util.create_archivelog_dir;
   exec rdsadmin.rdsadmin_master_util.create_onlinelog_dir;
   ```

1. Conceda os seguintes privilégios à conta de usuário do Oracle utilizada para acessar o endpoint de origem do Oracle:

   ```
   GRANT READ ON DIRECTORY ONLINELOG_DIR TO dms_user;
   GRANT READ ON DIRECTORY ARCHIVELOG_DIR TO dms_user;
   ```

1. Defina os atributos de conexão adicionais a seguir no endpoint de origem Amazon RDS Oracle.
   + Para as versões 11.2 e 12.1 do RDS Oracle, defina o seguinte.

     ```
     useLogminerReader=N;useBfile=Y;accessAlternateDirectly=false;useAlternateFolderForOnline=true;
     oraclePathPrefix=/rdsdbdata/db/{$DATABASE_NAME}_A/;usePathPrefix=/rdsdbdata/log/;replacePathPrefix=true;
     ```
   + Para as versões 12.2, 18.0 e 19.0 do RDS Oracle, defina o seguinte.

     ```
     useLogminerReader=N;useBfile=Y;
     ```

**nota**  
Verifique se não há nenhum espaço em branco após o separador de ponto e vírgula (;) em várias configurações de atributo, por exemplo, `oneSetting;thenAnother`.

Para obter mais informações para configurar uma tarefa de CDC, consulte [Configuração da CDC em um banco de dados Oracle de origem](#CHAP_Source.Oracle.CDC.Configuration).

### Usando um Amazon RDS Oracle Standby (réplica de leitura) como fonte com o Binary Reader for CDC em AWS DMS
<a name="CHAP_Source.Oracle.Amazon-Managed.StandBy"></a>

Verifique os seguintes pré-requisitos para utilizar o Amazon RDS para Oracle Standby como origem ao utilizar o Binary Reader para CDC no AWS DMS:
+ Utilize o usuário mestre do Oracle para configurar o Binary Reader.
+ Certifique-se de que AWS DMS atualmente suporta o uso somente do Oracle Active Data Guard Standby.

Depois de fazer isso, utilize o procedimento a seguir para utilizar o RDS para Oracle Standby como origem ao utilizar o Binary Reader para CDC.

**Como configurar um RDS para Oracle Standby como origem ao utilizar o Binary Reader para CDC**

1. Faça login na instância primária do RDS para Oracle como usuário mestre.

1. Execute os seguintes procedimentos armazenados conforme documentado no Guia do usuário do Amazon RDS para criar os diretórios no nível do servidor.

   ```
   exec rdsadmin.rdsadmin_master_util.create_archivelog_dir;
   exec rdsadmin.rdsadmin_master_util.create_onlinelog_dir;
   ```

1. Identifique os diretórios criados na etapa 2.

   ```
   SELECT directory_name, directory_path FROM all_directories
   WHERE directory_name LIKE ( 'ARCHIVELOG_DIR_%' )
           OR directory_name LIKE ( 'ONLINELOG_DIR_%' )
   ```

   Por exemplo, o código anterior exibe uma lista de diretórios como a seguinte.  
![\[Table showing directory names and their corresponding paths for archive and online logs.\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/images/datarep-rds-server-level-directories.png)

1. Conceda o privilégio `Read` nos diretórios anteriores à conta de usuário Oracle utilizada para acessar o Oracle Standby.

   ```
   GRANT READ ON DIRECTORY ARCHIVELOG_DIR_A TO dms_user;
   GRANT READ ON DIRECTORY ARCHIVELOG_DIR_B TO dms_user;
   GRANT READ ON DIRECTORY ONLINELOG_DIR_A TO dms_user;
   GRANT READ ON DIRECTORY ONLINELOG_DIR_B TO dms_user;
   ```

1. Execute uma troca de log de arquivamento na instância primária. Isso garante que as alterações de `ALL_DIRECTORIES` também sejam transferidas para o Oracle Standby.

1. Execute uma consulta `ALL_DIRECTORIES` no Oracle Standby para confirmar se as alterações foram aplicadas.

1. Crie um endpoint de origem para o Oracle Standby usando o AWS DMS Management Console ou AWS Command Line Interface ()AWS CLI. Ao criar o endpoint, especifique os seguintes atributos de conexão adicionais.

   ```
   useLogminerReader=N;useBfile=Y;archivedLogDestId=1;additionalArchivedLogDestId=2
   ```

1. Depois de criar o endpoint, use **Testar conexão de endpoint** na página **Criar endpoint** do console ou o AWS CLI `test-connection` comando para verificar se a conectividade foi estabelecida.

## Limitações no uso da Oracle como fonte para AWS DMS
<a name="CHAP_Source.Oracle.Limitations"></a>

As seguintes limitações se aplicam quando um banco de dados Oracle é utilizado como origem do AWS DMS:
+ AWS DMS oferece suporte aos tipos de dados Oracle Extended na AWS DMS versão 3.5.0 e superior.
+ AWS DMS não suporta nomes de objetos longos (mais de 30 bytes).
+ AWS DMS não oferece suporte a índices baseados em funções.
+ Se você gerenciar o registro em log suplementar e realizar transformações em qualquer uma das colunas, verifique se o registro em log suplementar está ativado para todos os campos e colunas. Para obter mais informações sobre como configurar o registro em log suplementar, consulte os seguintes tópicos.
  + Para um banco de dados Oracle autogerenciado como origem, consulte [Configuração de registro em log suplementar](#CHAP_Source.Oracle.Self-Managed.Configuration.SupplementalLogging).
  + Para um banco AWS de dados de origem Oracle gerenciado, consulte[Configurando uma fonte Oracle AWS gerenciada para AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Configuration).
+ AWS DMS não oferece suporte ao banco de dados raiz de contêiner multilocatário (CDB\$1ROOT). Ele é compatível com um PDB utilizando o Binary Reader.
+ AWS DMS não suporta restrições diferidas.
+ AWS DMS a versão 3.5.3 e superior oferece suporte total à segurança. LOBs
+ AWS DMS suporta a `rename table table-name to new-table-name` sintaxe de todas as versões 11 e superiores do Oracle suportadas. Essa sintaxe não é compatível para nenhum banco de dados de origem Oracle versão 10.
+ AWS DMS não replica os resultados da instrução DDL. `ALTER TABLE ADD column data_type DEFAULT default_value` Em vez de replicar `default_value` para o destino, ele define a nova coluna como `NULL`.
+ Ao usar a AWS DMS versão 3.4.7 ou superior, para replicar as alterações resultantes das operações de partição ou subpartição, faça o seguinte antes de iniciar uma tarefa do DMS.
  + Crie manualmente a estrutura da tabela particionada (DDL); 
  + Verifique se a DDL é a mesma na origem e no destino do Oracle; 
  + Defina o atributo de conexão adicional `enableHomogenousPartitionOps=true`.

  Para obter mais informações sobre `enableHomogenousPartitionOps`, consulte [Configurações de endpoint ao usar o Oracle como fonte para AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib). Além disso, observe que em tarefas de CARGA MÁXIMA\$1CDC, o DMS não replica as alterações de dados capturadas como parte das alterações em cache. Nesse caso de uso, recrie a estrutura da tabela no destino do Oracle e recarregue as tabelas em questão.

  Antes da AWS DMS versão 3.4.7:

  O DMS não replica alterações de dados resultantes de operações de partição ou subpartição (`ADD`, `DROP`, `EXCHANGE` e `TRUNCATE`). Essas atualizações podem causar os seguintes erros durante a replicação:
  + Para operações `ADD`, atualizações e exclusões nos dados adicionados podem gerar um aviso de “0 linhas afetadas”.
  + Para operações `DROP` e `TRUNCATE`, novas inserções podem gerar erros de “duplicatas”.
  + Operações `EXCHANGE` podem gerar um aviso de “0 linhas afetadas” e erros de “duplicatas”.

  Para replicar alterações resultantes de operações de partição ou subpartição, recarregue as tabelas em questão. Depois de adicionar uma nova partição vazia, as operações na partição adicionada são replicadas para o destino como normais.
+ AWS DMS versões anteriores à 3.4 não suportam alterações de dados no destino que resultam da execução da `CREATE TABLE AS` instrução na fonte. No entanto, a nova tabela é criada no destino.
+ AWS DMS não captura as alterações feitas pelo `DBMS_REDEFINITION` pacote Oracle, por exemplo, os metadados da tabela e o `OBJECT_ID` campo.
+ Quando o modo LOB de tamanho limitado está ativado, BLOB/CLOB as colunas vazias na fonte Oracle são replicadas como valores NULL. Quando o modo LOB completo está habilitado, elas são replicadas como uma string vazia (‘ ’).
+ Ao capturar alterações com o Oracle 11 LogMiner, uma atualização em uma coluna CLOB com um comprimento de string maior que 1982 é perdida e o destino não é atualizado.
+ Durante a captura de dados de alteração (CDC), AWS DMS não oferece suporte a atualizações em lote em colunas numéricas definidas como chave primária.
+ AWS DMS não suporta determinados `UPDATE` comandos. O exemplo a seguir é um comando `UPDATE` não compatível.

  ```
  UPDATE TEST_TABLE SET KEY=KEY+1;
  ```

  Aqui, `TEST_TABLE` é o nome da tabela e `KEY` é uma coluna numérica definida como chave primária.
+ AWS DMS não suporta o modo LOB completo para carregar colunas LONG e LONG RAW. Em vez disso, é possível utilizar o modo LOB limitado para migrar esses tipos de dados para um destino do Oracle. No modo LOB limitado, AWS DMS trunca todos os dados de 64 KB definidos como colunas LONG ou LONG RAW com mais de 64 KB.
+ AWS DMS não suporta o modo LOB completo para carregar colunas XMLTYPE. Em vez disso, é possível utilizar o modo LOB limitado para migrar colunas XMLTYPE para um destino do Oracle. No modo LOB limitado, o DMS trunca todos os dados maiores que a variável “Tamanho máximo de LOB” definida pelo usuário. O valor máximo recomendado para “Tamanho máximo de LOB” é 100 MB.
+ AWS DMS não replica tabelas cujos nomes contêm apóstrofos.
+ AWS DMS suporta CDC a partir de visualizações materializadas. Mas o DMS não é compatível com CDC de nenhuma outra visualização.
+ AWS DMS não oferece suporte ao CDC para tabelas organizadas por índice com um segmento de estouro.
+ AWS DMS não suporta a `Drop Partition` operação para tabelas particionadas por referência com `enableHomogenousPartitionOps` definido como. `true`
+ Quando você usa o Oracle LogMiner para acessar os redo logs, AWS DMS tem as seguintes limitações:
  + Somente para o Oracle 12, AWS DMS não replica nenhuma alteração nas colunas LOB.
  + AWS DMS não suporta transações XA na replicação ao usar o Oracle LogMiner.
  +  LogMiner O Oracle não suporta conexões com um banco de dados conectável (PDB). Para conectar-se a um PDB, acesse os redo logs utilizando o Binary Reader.
  + As operações SHRINK SPACE não são compatíveis.
+ Quando você usa o Binary Reader, AWS DMS tem as seguintes limitações:
  + Ele não é compatível com clusters de tabela.
  + Ele é compatível somente com operações `SHRINK SPACE` em nível da tabela. Esse nível inclui a tabela completa, as partições e as subpartições.
  + Ele não é compatível com alterações em tabelas organizadas por índice com compactação de chaves.
  + Ele não é compatível com a implementação de logs redo on-line em dispositivos brutos.
  + O Binary Reader é compatível com TDE somente para bancos de dados Oracle autogerenciados, uma vez que o RDS para Oracle não é compatível com a recuperação de senha de carteira para chaves de criptografia de TDE.
+ AWS DMS não suporta conexões com uma fonte Oracle do Amazon RDS usando um proxy Oracle Automatic Storage Management (ASM).
+ AWS DMS não suporta colunas virtuais. 
+ AWS DMS não suporta o tipo de `ROWID` dados ou visualizações materializadas com base em uma coluna ROWID.

  AWS DMS tem suporte parcial para Oracle Materialized Views. Para cargas máximas, o DMS pode fazer uma cópia da carga máxima de uma visão materializada do Oracle. O DMS copia a visão materializada como uma tabela base para o sistema de destino e ignora todas as colunas ROWID na visão materializada. Para a replicação contínua (CDC), o DMS tenta replicar as alterações nos dados da visão materializada, mas os resultados podem não ser ideais. Especificamente, se a visão materializada estiver completamente atualizada, o DMS replica exclusões individuais de todas as linhas, seguidas por inserções individuais em todas as linhas. Esse é um exercício que consome muitos recursos e pode ter um desempenho inadequado em visões materializadas com um grande número de linhas. Para a replicação contínua em que as visões materializadas fazem uma atualização rápida, o DMS tenta processar e replicar as alterações de dados de atualização rápida. Em ambos os casos, o DMS ignora qualquer coluna ROWID na visão materializada.
+ AWS DMS não carrega nem captura tabelas temporárias globais.
+ Para destinos do S3 que utilizam a replicação, ative o registro em log suplementar em cada coluna para que as atualizações da linha de origem possam capturar cada valor da coluna. Veja a seguir um exemplo: `alter table yourtablename add supplemental log data (all) columns;`.
+ Uma atualização de uma linha com uma chave exclusiva composta que contém `null` não pode ser replicada no destino.
+ AWS DMS não suporta o uso de várias chaves de criptografia Oracle TDE no mesmo endpoint de origem. Cada endpoint pode ter somente um atributo para o nome da chave de criptografia da TDE "`securityDbEncryptionName`" e uma senha da TDE para essa chave.
+ Ao replicar do Amazon RDS for Oracle, o TDE é suportado somente com tablespace criptografado e usando Oracle. LogMiner
+ AWS DMS não suporta várias operações de renomeação de tabelas em rápida sucessão.
+ Ao usar o Oracle 19.0 como fonte, AWS DMS não oferece suporte aos seguintes recursos:
  + Redirecionamento de DML do Data-guard
  + Tabelas particionadas híbridas
  + Contas Oracle somente de esquemas
+ AWS DMS não suporta a migração de tabelas ou visualizações do tipo `BIN$` ou`DR$`.
+ A partir do Oracle 18.x, AWS DMS não oferece suporte à captura de dados de alteração (CDC) do Oracle Express Edition (Oracle Database XE).
+ Ao migrar dados de uma coluna CHAR, o DMS trunca todos os espaços à direita. 
+ AWS DMS não oferece suporte à replicação a partir de contêineres de aplicativos.
+ AWS DMS não suporta a execução do Oracle Flashback Database e dos pontos de restauração, pois essas operações afetam a consistência dos arquivos Oracle Redo Log.
+ Antes da AWS DMS versão 3.5.3, o procedimento de carregamento direto `INSERT` com a opção de execução paralela não era suportado nos seguintes casos:
  + Tabelas não compactadas com mais de 255 colunas
  + O tamanho da linha excede 8K
  + Tabelas do Exadata HCC
  + Banco de dados em execução na plataforma Big Endian
+ Uma tabela de origem sem chave primária ou exclusiva exige que o registro em log suplementar ALL COLUMN esteja ativado. Ele cria mais atividades no redo log e pode aumentar a latência da CDC do DMS.
+ AWS DMS não migra dados de colunas invisíveis em seu banco de dados de origem. Para incluir essas colunas no escopo da migração, utilize a instrução `ALTER TABLE` para tornar essas colunas visíveis.
+ Para todas as versões do Oracle, AWS DMS não replica o resultado das `UPDATE` operações em colunas `XMLTYPE` LOB.
+ AWS DMS não oferece suporte à replicação de tabelas com restrições de validade temporal.
+ Se a fonte Oracle ficar indisponível durante uma tarefa de carga total, AWS DMS poderá marcar a tarefa como concluída após várias tentativas de reconexão, mesmo que a migração de dados permaneça incompleta. Nesse cenário, as tabelas de destino contêm somente os registros migrados antes da perda da conexão, possivelmente criando inconsistências de dados entre os sistemas de origem e de destino. Para garantir a integridade dos dados, reinicie totalmente a tarefa de carga máxima ou recarregue as tabelas específicas afetadas pela interrupção da conexão.

## Suporte de SSL para um endpoint do Oracle
<a name="CHAP_Security.SSL.Oracle"></a>

AWS DMS Os endpoints Oracle oferecem suporte a SSL V3 para os modos `none` e `verify-ca` SSL. Para utilizar SSL com um endpoint do Oracle, carregue o Oracle Wallet para o endpoint, em vez de nos arquivos de certificado .pem. 

**Topics**
+ [Utilizar um certificado existente para SSL no Oracle](#CHAP_Security.SSL.Oracle.Existing)
+ [Utilizar um certificado autoassinado para SSL no Oracle](#CHAP_Security.SSL.Oracle.SelfSigned)

### Utilizar um certificado existente para SSL no Oracle
<a name="CHAP_Security.SSL.Oracle.Existing"></a>

Para utilizar uma instalação cliente existente do Oracle e criar o arquivo Oracle Wallet a partir de um arquivo de certificado CA, siga as seguintes etapas.

**Para usar uma instalação existente do cliente Oracle para Oracle SSL com AWS DMS**

1. Defina a variável do sistema `ORACLE_HOME` como local do seu diretório `dbhome_1`, executando o comando a seguir.

   ```
   prompt>export ORACLE_HOME=/home/user/app/user/product/12.1.0/dbhome_1                        
   ```

1. Anexe `$ORACLE_HOME/lib` ao sistema variável `LD_LIBRARY_PATH`.

   ```
   prompt>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib                        
   ```

1. Crie um diretório para o Oracle Wallet em `$ORACLE_HOME/ssl_wallet`.

   ```
   prompt>mkdir $ORACLE_HOME/ssl_wallet
   ```

1. Coloque o arquivo `.pem` de certificado da CA no diretório `ssl_wallet`. Se você utilizar o Amazon RDS, poderá baixar o arquivo raiz do certificado a CA `rds-ca-2015-root.pem` hospedado pelo Amazon RDS. Para obter mais informações sobre o download desse arquivo, consulte Como [usar SSL/TLS para criptografar uma conexão com uma instância](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html) de banco de dados no Guia do *usuário do Amazon RDS*.

1. Se o seu certificado CA contiver mais de um arquivo PEM (como o pacote global ou regional do Amazon RDS), divida-os em arquivos separados e adicione-os à carteira Oracle usando o script Bash a seguir. Esse script requer duas entradas de parâmetro: o caminho para o certificado CA e o caminho para a pasta da carteira Oracle criada anteriormente.

   ```
   #!/usr/bin/env bash
   
   certnum=$(grep -c BEGIN <(cat $1))
   
   cnt=0
   temp_cert=""
   while read line
   do
   if [ -n "$temp_cert" -a "$line" == "-----BEGIN CERTIFICATE-----" ]
   then
   cnt=$(expr $cnt + 1)
   printf "\rImporting certificate # $cnt of $certnum"
   orapki wallet add -wallet "$2" -trusted_cert -cert <(echo -n "${temp_cert}") -auto_login_only 1>/dev/null 2>/dev/null
   temp_cert=""
   fi
   temp_cert+="$line"$'\n'
   done < <(cat $1)
   
   cnt=$(expr $cnt + 1)
   printf "\rImporting certificate # $cnt of $certnum"
   orapki wallet add -wallet "$2" -trusted_cert -cert <(echo -n "${temp_cert}") -auto_login_only 1>/dev/null 2>/dev/null
   echo ""
   ```

Ao concluir as etapas anteriores, é possível importar o arquivo wallet com a chamada de API `ImportCertificate`, especificando o parâmetro certificate-wallet. Utilize o certificado wallet importado ao selecionar `verify-ca` como modo SSL ao criar ou modificar o seu endpoint do Oracle.

**nota**  
 As carteiras Oracle são arquivos binários. AWS O DMS aceita esses arquivos no estado em que se encontram. 

### Utilizar um certificado autoassinado para SSL no Oracle
<a name="CHAP_Security.SSL.Oracle.SelfSigned"></a>

Para utilizar um certificado autoassinado para SSL no Oracle, siga as etapas a seguir, pressupondo uma senha de carteira Oracle de `oracle123`.

**Para usar um certificado autoassinado para Oracle SSL com AWS DMS**

1. Crie um diretório que será utilizado para trabalhar com o certificado autoassinado.

   ```
   mkdir -p /u01/app/oracle/self_signed_cert
   ```

1. Altere para o diretório que você criou na etapa anterior.

   ```
   cd /u01/app/oracle/self_signed_cert
   ```

1. Crie uma chave raiz.

   ```
   openssl genrsa -out self-rootCA.key 2048
   ```

1. Autoassine um certificado raiz utilizando a chave criada na etapa anterior.

   ```
   openssl req -x509 -new -nodes -key self-rootCA.key 
           -sha256 -days 3650 -out self-rootCA.pem
   ```

   Utilize os parâmetros de entrada, como os seguintes:
   + `Country Name (2 letter code) [XX]`, por exemplo: `AU`
   + `State or Province Name (full name) []`, por exemplo: `NSW`
   + `Locality Name (e.g., city) [Default City]`, por exemplo: `Sydney`
   + `Organization Name (e.g., company) [Default Company Ltd]`, por exemplo: `AmazonWebService`
   + `Organizational Unit Name (e.g., section) []`, por exemplo: `DBeng`
   + `Common Name (e.g., your name or your server's hostname) []`, por exemplo: `aws`
   + `Email Address []`, por exemplo: abcd.efgh@amazonwebservice.com

1. Crie um diretório do Oracle Wallet para o banco de dados Oracle.

   ```
   mkdir -p /u01/app/oracle/wallet
   ```

1. Crie um novo Oracle Wallet.

   ```
   orapki wallet create -wallet "/u01/app/oracle/wallet" -pwd oracle123 -auto_login_local
   ```

1. Adicione o certificado raiz ao Oracle Wallet.

   ```
   orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd oracle123 -trusted_cert 
   -cert /u01/app/oracle/self_signed_cert/self-rootCA.pem
   ```

1. Liste os conteúdos do Oracle Wallet. A lista deve incluir o certificado raiz. 

   ```
   orapki wallet display -wallet /u01/app/oracle/wallet -pwd oracle123
   ```

   Por exemplo, isso pode ser exibido de forma semelhante à seguinte.

   ```
   Requested Certificates:
   User Certificates:
   Trusted Certificates:
   Subject:        CN=aws,OU=DBeng,O= AmazonWebService,L=Sydney,ST=NSW,C=AU
   ```

1. Gere o Certificate Signing Request (CSR - Solicitação de assinatura de certificado) utilizando o utilitário ORAPKI.

   ```
   orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd oracle123 
   -dn "CN=aws" -keysize 2048 -sign_alg sha256
   ```

1. Execute o comando a seguir.

   ```
   openssl pkcs12 -in /u01/app/oracle/wallet/ewallet.p12 -nodes -out /u01/app/oracle/wallet/nonoracle_wallet.pem
   ```

   Isso produz uma saída semelhante à seguinte.

   ```
   Enter Import Password:
   MAC verified OK
   Warning unsupported bag type: secretBag
   ```

1. Coloque "dms" como o nome comum.

   ```
   openssl req -new -key /u01/app/oracle/wallet/nonoracle_wallet.pem -out certdms.csr
   ```

   Utilize os parâmetros de entrada, como os seguintes:
   + `Country Name (2 letter code) [XX]`, por exemplo: `AU`
   + `State or Province Name (full name) []`, por exemplo: `NSW`
   + `Locality Name (e.g., city) [Default City]`, por exemplo: `Sydney`
   + `Organization Name (e.g., company) [Default Company Ltd]`, por exemplo: `AmazonWebService`
   + `Organizational Unit Name (e.g., section) []`, por exemplo: `aws`
   + `Common Name (e.g., your name or your server's hostname) []`, por exemplo: `aws`
   + `Email Address []`, por exemplo: abcd.efgh@amazonwebservice.com

   Verifique se isso não é o mesmo que a etapa 4. É possível fazer isso, por exemplo, alterando o nome da unidade organizacional para um nome diferente, conforme mostrado.

   Insira os atributos adicionais a seguir para serem enviados com a solicitação de certificado.
   + `A challenge password []`, por exemplo: `oracle123`
   + `An optional company name []`, por exemplo: `aws`

1. Obtenha a assinatura do certificado.

   ```
   openssl req -noout -text -in certdms.csr | grep -i signature
   ```

   A chave de assinatura desta postagem é `sha256WithRSAEncryption`.

1. Utilize o seguinte comando para gerar o arquivo de certificado (`.crt`):

   ```
   openssl x509 -req -in certdms.csr -CA self-rootCA.pem -CAkey self-rootCA.key 
   -CAcreateserial -out certdms.crt -days 365 -sha256
   ```

   Isso exibe uma saída semelhante à seguinte.

   ```
   Signature ok
   subject=/C=AU/ST=NSW/L=Sydney/O=awsweb/OU=DBeng/CN=aws
   Getting CA Private Key
   ```

1. Adicione o certificado à carteira.

   ```
   orapki wallet add -wallet /u01/app/oracle/wallet -pwd oracle123 -user_cert -cert certdms.crt
   ```

1. Visualize a carteira. Deve haver duas entradas. Consulte o seguinte código:

   ```
   orapki wallet display -wallet /u01/app/oracle/wallet -pwd oracle123
   ```

1. Configure o arquivo `sqlnet.ora` (`$ORACLE_HOME/network/admin/sqlnet.ora`).

   ```
   WALLET_LOCATION =
      (SOURCE =
        (METHOD = FILE)
        (METHOD_DATA =
          (DIRECTORY = /u01/app/oracle/wallet/)
        )
      ) 
   
   SQLNET.AUTHENTICATION_SERVICES = (NONE)
   SSL_VERSION = 1.0
   SSL_CLIENT_AUTHENTICATION = FALSE
   SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA)
   ```

1. Interrompa o receptor do Oracle.

   ```
   lsnrctl stop
   ```

1. Adicione entradas para SSL no arquivo `listener.ora` (`$ORACLE_HOME/network/admin/listener.ora`).

   ```
   SSL_CLIENT_AUTHENTICATION = FALSE
   WALLET_LOCATION =
     (SOURCE =
       (METHOD = FILE)
       (METHOD_DATA =
         (DIRECTORY = /u01/app/oracle/wallet/)
       )
     )
   
   SID_LIST_LISTENER =
    (SID_LIST =
     (SID_DESC =
      (GLOBAL_DBNAME = SID)
      (ORACLE_HOME = ORACLE_HOME)
      (SID_NAME = SID)
     )
    )
   
   LISTENER =
     (DESCRIPTION_LIST =
       (DESCRIPTION =
         (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
         (ADDRESS = (PROTOCOL = TCPS)(HOST = localhost.localdomain)(PORT = 1522))
         (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
       )
     )
   ```

1. Configure o arquivo `tnsnames.ora` (`$ORACLE_HOME/network/admin/tnsnames.ora`).

   ```
   <SID>=
   (DESCRIPTION=
           (ADDRESS_LIST = 
                   (ADDRESS=(PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
           )
           (CONNECT_DATA =
                   (SERVER = DEDICATED)
                   (SERVICE_NAME = <SID>)
           )
   )
   
   <SID>_ssl=
   (DESCRIPTION=
           (ADDRESS_LIST = 
                   (ADDRESS=(PROTOCOL = TCPS)(HOST = localhost.localdomain)(PORT = 1522))
           )
           (CONNECT_DATA =
                   (SERVER = DEDICATED)
                   (SERVICE_NAME = <SID>)
           )
   )
   ```

1. Reinicie o receptor do Oracle.

   ```
   lsnrctl start
   ```

1. Mostre o status do receptor do Oracle.

   ```
   lsnrctl status
   ```

1. Teste a conexão SSL ao banco de dados no host local, utilizando sqlplus e a a entrada SSL tnsnames.

   ```
   sqlplus -L ORACLE_USER@SID_ssl
   ```

1. Verifique se você se conectou com êxito utilizando SSL.

   ```
   SELECT SYS_CONTEXT('USERENV', 'network_protocol') FROM DUAL;
   
   SYS_CONTEXT('USERENV','NETWORK_PROTOCOL')
   --------------------------------------------------------------------------------
   tcps
   ```

1. Altere o diretório para o diretório com o certificado autoassinado.

   ```
   cd /u01/app/oracle/self_signed_cert
   ```

1. Crie uma nova carteira Oracle de cliente AWS DMS para usar.

   ```
   orapki wallet create -wallet ./ -auto_login_only
   ```

1. Adicione o certificado raiz autoassinado ao Oracle Wallet.

   ```
   orapki wallet add -wallet ./ -trusted_cert -cert self-rootCA.pem -auto_login_only
   ```

1. Liste o conteúdo da carteira Oracle AWS DMS para uso. A lista deve incluir o certificado raiz autoassinado.

   ```
   orapki wallet display -wallet ./
   ```

   Isso produz uma saída semelhante à seguinte.

   ```
   Trusted Certificates:
   Subject:        CN=aws,OU=DBeng,O=AmazonWebService,L=Sydney,ST=NSW,C=AU
   ```

1. Faça upload da carteira Oracle que você acabou de criar AWS DMS.

## Métodos de criptografia suportados para usar o Oracle como fonte para AWS DMS
<a name="CHAP_Source.Oracle.Encryption"></a>

Na tabela a seguir, você pode encontrar os métodos de criptografia de dados transparente (TDE) que são AWS DMS compatíveis ao trabalhar com um banco de dados de origem Oracle. 


| Método de acesso de logs redo | Espaço de tabela de TDE | Coluna de TDE | 
| --- | --- | --- | 
| Oráculo LogMiner | Sim | Sim | 
| Binary Reader | Sim | Sim | 

AWS DMS oferece suporte ao Oracle TDE ao usar o Binary Reader, tanto no nível da coluna quanto no nível do espaço de tabela. Para usar a criptografia TDE AWS DMS, primeiro identifique o local da carteira Oracle em que a chave de criptografia e a senha do TDE estão armazenadas. Identifique a chave de criptografia e a senha corretas da TDE para o endpoint de origem do Oracle.

**Para identificar e especificar a chave de criptografia e a senha para a criptografia da TDE**

1. Execute a consulta a seguir para encontrar a carteira de criptografia do Oracle no host do banco de dados Oracle.

   ```
   SQL> SELECT WRL_PARAMETER FROM V$ENCRYPTION_WALLET;
   
   WRL_PARAMETER
   --------------------------------------------------------------------------------
   /u01/oracle/product/12.2.0/dbhome_1/data/wallet/
   ```

   Aqui, `/u01/oracle/product/12.2.0/dbhome_1/data/wallet/` é a localização da carteira.

1. Obtenha o ID da chave principal para uma fonte não CDB ou CDB da seguinte forma:

   1. Para uma fonte que não CDB, execute a seguinte consulta para recuperar o ID da chave de criptografia principal:

      ```
      SQL>  select rownum, key_id, activation_time from v$encryption_keys;
      
      ROWNUM KEY_ID                                                 ACTIVATION_TIME
      ------ ------------------------------------------------------ ---------------
           1 AeKask0XZU+NvysflCYBEVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   04-SEP-24 10.20.56.605200 PM +00:00
           2 AV7WU9uhoU8rv8daE/HNnSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   10-AUG-21 07.52.03.966362 PM +00:00
           3 AckpoJ/f+k8xvzJ+gSuoVH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA   14-SEP-20 09.26.29.048870 PM +00:00
      ```

      O tempo de ativação é útil se você planeja iniciar a CDC em algum momento no passado. Por exemplo, usando os resultados acima, você pode iniciar a CDC a partir de algum ponto entre 10 de agosto de 2021 às 19h52m3s e 14 de setembro de 2020 às 21h26m29s usando o ID da chave principal na ROWNUM 2. Quando a tarefa atinge o redo gerado em ou após 14 de setembro de 2020, às 19h26m29s, ela falha. Você deve modificar o endpoint de origem, fornecer o ID da chave principal na ROWNUM 3 e, em seguida, retomar a tarefa.

   1. Para CDB, o DMS de origem requer a chave de criptografia principal CDB\$1ROOT. Conecte-se à CDB\$1ROOT e execute a seguinte consulta:

      ```
      SQL> select rownum, key_id, activation_time from v$encryption_keys where con_id = 1;
      
      ROWNUM KEY_ID                                               ACTIVATION_TIME
      ------ ---------------------------------------------------- -----------------------------------
           1 Aa2E/Vwb5U+zv5hCncS5ErMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 29-AUG-24 12.51.19.699060 AM +00:00
      ```

1. Na linha de comando, liste as entradas da carteira de criptografia no host do banco de dados Oracle de origem.

   ```
   $ mkstore -wrl /u01/oracle/product/12.2.0/dbhome_1/data/wallet/ -list
   Oracle Secret Store entries:
   ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   ORACLE.SECURITY.DB.ENCRYPTION.AY1mRA8OXU9Qvzo3idU4OH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   ORACLE.SECURITY.DB.ENCRYPTION.MASTERKEY
   ORACLE.SECURITY.ID.ENCRYPTION.
   ORACLE.SECURITY.KB.ENCRYPTION.
   ORACLE.SECURITY.KM.ENCRYPTION.AY1mRA8OXU9Qvzo3idU4OH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   ```

   Encontre a entrada que contém o ID da chave mestra que você encontrou na etapa 2 (`AWGDC9glSk8Xv+3bVveiVSg`). Essa entrada é o nome da chave de criptografia da TDE.

1. Visualize os detalhes da entrada que você localizou na etapa anterior.

   ```
   $ mkstore -wrl /u01/oracle/product/12.2.0/dbhome_1/data/wallet/ -viewEntry ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   Oracle Secret Store Tool : Version 12.2.0.1.0
   Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.
   Enter wallet password:
   ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA = AEMAASAASGYs0phWHfNt9J5mEMkkegGFiD4LLfQszDojgDzbfoYDEACv0x3pJC+UGD/PdtE2jLIcBQcAeHgJChQGLA==
   ```

   Digite a senha da carteira para ver o resultado.

   Aqui, o valor à direita de `'='` é a senha da TDE.

1. Especifique o nome da chave de criptografia da TDE para o endpoint de origem do Oracle definindo o atributo de conexão adicional `securityDbEncryptionName`.

   ```
   securityDbEncryptionName=ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   ```

1. Forneça a senha da TDE associada para essa chave no console como parte do valor da **Senha** da origem do Oracle. Utilize a ordem a seguir para formatar os valores de senha separados por vírgula, finalizados pelo valor da senha da TDE.

   ```
   Oracle_db_password,ASM_Password,AEMAASAASGYs0phWHfNt9J5mEMkkegGFiD4LLfQszDojgDzbfoYDEACv0x3pJC+UGD/PdtE2jLIcBQcAeHgJChQGLA==
   ```

   Especifique os valores de senha nessa ordem, independentemente da configuração do banco de dados Oracle. Por exemplo, se estiver utilizando a TDE, mas o banco de dados Oracle não estiver utilizando o ASM, especifique os valores de senha relevantes na ordem separada por vírgulas a seguir.

   ```
   Oracle_db_password,,AEMAASAASGYs0phWHfNt9J5mEMkkegGFiD4LLfQszDojgDzbfoYDEACv0x3pJC+UGD/PdtE2jLIcBQcAeHgJChQGLA==
   ```

Se as credenciais do TDE que você especificar estiverem incorretas, a tarefa de AWS DMS migração não falhará. No entanto, a tarefa também não lê nem aplica alterações contínuas de replicação ao banco de dados de destino. Depois de iniciar a tarefa, monitore as **Estatísticas da tabela** na página de tarefas de migração no console para garantir que as alterações sejam replicadas.

Se um DBA alterar os valores das credenciais da TDE para o banco de dados Oracle enquanto a tarefa estiver em execução, a tarefa falhará. A mensagem de erro contém o novo nome da chave de criptografia da TDE. Para especificar novos valores e reiniciar a tarefa, utilize o procedimento anterior.

**Importante**  
Não é possível manipular uma carteira da TDE criada em um local do Oracle Automatic Storage Management (ASM) porque comandos em nível do sistema operacional, como `cp`, `mv`, `orapki` e `mkstore`, corrompem os arquivos da carteira armazenados em um local do ASM. Essa restrição é específica de arquivos de carteira da TDE armazenados somente em um local do ASM, mas não para arquivos de carteira da TDE armazenados em um diretório local do sistema operacional.  
Para manipular uma carteira da TDE armazenada no ASM com comandos em nível do sistema operacional, crie um keystore local e mescle o keystore do ASM no keystore local da seguinte forma:   
Crie um keystore local.  

   ```
   ADMINISTER KEY MANAGEMENT create keystore file system wallet location identified by wallet password;
   ```
Mescle o keystore do ASM com o keystore local.  

   ```
   ADMINISTER KEY MANAGEMENT merge keystore ASM wallet location identified by wallet password into existing keystore file system wallet location identified by wallet password with backup;
   ```
Para listar as entradas da carteira de criptografia e a senha da TDE, execute as etapas 3 e 4 no keystore local.

## Métodos de compactação suportados para usar o Oracle como fonte para AWS DMS
<a name="CHAP_Source.Oracle.Compression"></a>

Na tabela a seguir, você pode descobrir quais métodos de compactação são AWS DMS compatíveis ao trabalhar com um banco de dados de origem Oracle. Como mostra a tabela, o suporte à compactação depende da versão do seu banco de dados Oracle e se o DMS está configurado para usar o Oracle LogMiner para acessar os redo logs.


| Versão | Básico | OLTP |  HCC (do Oracle 11g R2 ou mais recente)  | Outros | 
| --- | --- | --- | --- | --- | 
| Oracle 10 | Não | N/D | N/D | Não | 
| Oracle 11 ou mais recente — Oracle LogMiner | Sim | Sim | Sim  | Sim — Qualquer método de compactação suportado pela Oracle LogMiner. | 
| Oracle 11 ou mais recente: Binary Reader | Sim | Sim | Sim, para obter mais informações, consulte a observação a seguir. | Sim | 

**nota**  
Quando o endpoint de origem Oracle é configurado para utilizar o Binary Reader, o nível Query Low do método de compactação HCC tem suporte somente para tarefas de carga máxima.

## Replicando tabelas aninhadas usando o Oracle como fonte para AWS DMS
<a name="CHAP_Source.Oracle.NestedTables"></a>

AWS DMS suporta a replicação de tabelas Oracle contendo colunas que são tabelas aninhadas ou tipos definidos. Para ativar essa funcionalidade, adicione a seguinte configuração do atributo de conexão adicional ao endpoint de origem Oracle.

```
allowSelectNestedTables=true;
```

AWS DMS cria as tabelas de destino a partir de tabelas aninhadas da Oracle como tabelas pai e filho regulares no destino sem uma restrição exclusiva. Para acessar os dados corretos no destino, junte as tabelas pai e filho. Para fazer isso, primeiro crie manualmente um índice não exclusivo na coluna `NESTED_TABLE_ID` na tabela filho de destino. É possível utilizar a coluna `NESTED_TABLE_ID` na cláusula de junção `ON` juntamente com a coluna pai que corresponde ao nome da tabela filho. Além disso, a criação desse índice melhora o desempenho quando os dados da tabela secundária de destino são atualizados ou excluídos pelo AWS DMS. Para ver um exemplo, consulte [Exemplo de junção para tabelas pai e filho no destino](#CHAP_Source.Oracle.NestedTables.JoinExample).

É recomendável configurar a tarefa para ser interrompida após a conclusão de uma carga máxima. Crie esses índices não exclusivos para todas as tabelas filho replicadas no destino e retome a tarefa.

Se uma tabela aninhada capturada for adicionada a uma tabela principal existente (capturada ou não capturada), ela AWS DMS será tratada corretamente. No entanto, o índice não exclusivo para a tabela de destino correspondente não é criado. Nesse caso, se a tabela filho de destino se tornar extremamente grande, o desempenho pode ser afetado. Nesse caso, é recomendável interromper a tarefa, criar o índice e retomar a tarefa.

Depois que as tabelas aninhadas forem replicadas para o destino, solicite que o administrador de banco de dados execute uma junção nas tabelas pai e filho correspondentes para nivelar os dados.

### Pré-requisitos para replicação de tabelas aninhadas Oracle como origem
<a name="CHAP_Source.Oracle.NestedTables.Prerequisites"></a>

Replique tabelas pai para todas as tabelas aninhadas replicadas. Inclua as tabelas principais (as tabelas que contêm a coluna da tabela aninhada) e as tabelas secundárias (ou seja, aninhadas) nos mapeamentos da AWS DMS tabela.

### Tipos de tabela aninhada Oracle com suporte como origem
<a name="CHAP_Source.Oracle.NestedTables.Types"></a>

AWS DMS suporta os seguintes tipos de tabela aninhada Oracle como fonte:
+ Tipo de dados
+ Objeto definido pelo usuário

### Limitações do AWS DMS suporte para tabelas aninhadas da Oracle como fonte
<a name="CHAP_Source.Oracle.NestedTables.Limitations"></a>

AWS DMS tem as seguintes limitações em seu suporte às tabelas aninhadas da Oracle como fonte:
+ AWS DMS suporta somente um nível de aninhamento de tabelas.
+ AWS DMS o mapeamento de tabelas não verifica se a tabela ou tabelas principal e secundária estão selecionadas para replicação. Ou seja, é possível selecionar uma tabela pai sem uma tabela filho ou uma tabela filho sem pai.

### Como AWS DMS replica tabelas aninhadas da Oracle como fonte
<a name="CHAP_Source.Oracle.NestedTables.HowReplicated"></a>

AWS DMS replica tabelas principais e aninhadas para o destino da seguinte forma:
+ AWS DMS cria a tabela principal idêntica à fonte. Ele define a coluna aninhada no pai como `RAW(16)` e inclui uma referência às tabelas aninhadas do pai em sua coluna `NESTED_TABLE_ID`.
+ AWS DMS cria a tabela secundária idêntica à fonte aninhada, mas com uma coluna adicional chamada`NESTED_TABLE_ID`. Essa coluna tem o mesmo tipo e valor que a coluna aninhada pai correspondente e tem o mesmo significado.

### Exemplo de junção para tabelas pai e filho no destino
<a name="CHAP_Source.Oracle.NestedTables.JoinExample"></a>

Para nivelar a tabela pai, execute uma junção entre as tabelas pai e filho, conforme mostrado no exemplo a seguir:

1. Crie a tabela de `Type`.

   ```
   CREATE OR REPLACE TYPE NESTED_TEST_T AS TABLE OF VARCHAR(50);
   ```

1. Crie a tabela pai com uma coluna do tipo `NESTED_TEST_T`, conforme definido anteriormente.

   ```
   CREATE TABLE NESTED_PARENT_TEST (ID NUMBER(10,0) PRIMARY KEY, NAME NESTED_TEST_T) NESTED TABLE NAME STORE AS NAME_KEY;
   ```

1. Nivele a tabela `NESTED_PARENT_TEST` utilizando uma junção com a tabela filho `NAME_KEY` em que `CHILD.NESTED_TABLE_ID` corresponde a `PARENT.NAME`.

   ```
   SELECT … FROM NESTED_PARENT_TEST PARENT, NAME_KEY CHILD WHERE CHILD.NESTED_
   TABLE_ID = PARENT.NAME;
   ```

## Armazenando REDO no Oracle ASM ao usar o Oracle como fonte para AWS DMS
<a name="CHAP_Source.Oracle.REDOonASM"></a>

Para origens Oracle com alta geração de REDO, o armazenamento de REDO no Oracle ASM pode beneficiar o desempenho, especialmente em uma configuração RAC, pois é possível configurar o DMS para distribuir leituras de REDO do ASM em todos os nós do ASM.

Para utilizar essa configuração, utilize o atributo de conexão `asmServer`. Por exemplo, a seguinte string de conexão distribui leituras de REDO do DMS em três nós do ASM:

```
asmServer=(DESCRIPTION=(CONNECT_TIMEOUT=8)(ENABLE=BROKEN)(LOAD_BALANCE=ON)(FAILOVER=ON)
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=asm_node1_ip_address)(PORT=asm_node1_port_number))
(ADDRESS=(PROTOCOL=tcp)(HOST=asm_node2_ip_address)(PORT=asm_node2_port_number))
(ADDRESS=(PROTOCOL=tcp)(HOST=asm_node3_ip_address)(PORT=asm_node3_port_number)))
(CONNECT_DATA=(SERVICE_NAME=+ASM)))
```

Ao utilizar o NFS para armazenar o REDO do Oracle, é importante garantir que os patches de cliente DNFS (Direct NFS) aplicáveis sejam aplicados, especificamente qualquer patch que resolva o erro 25224242 do Oracle. Para obter informações adicionais, analise a seguinte publicação do Oracle sobre os patches relacionados ao cliente Direct NFS, [Patches recomendados para o cliente Direct NFS](https://support.oracle.com/knowledge/Oracle Cloud/1495104_1.html). 

Além disso, para melhorar o desempenho de leitura do NFS, é recomendável aumentar o valor de `rsize` e `wsize` em `fstab` para o volume NFS, conforme mostrado no exemplo a seguir. 

```
NAS_name_here:/ora_DATA1_archive /u09/oradata/DATA1 nfs rw,bg,hard,nointr,tcp,nfsvers=3,_netdev,
timeo=600,rsize=262144,wsize=262144
```

Além disso, ajuste o valor de `tcp-max-xfer-size` da seguinte forma:

```
vserver nfs modify -vserver vserver -tcp-max-xfer-size 262144
```

## Configurações de endpoint ao usar o Oracle como fonte para AWS DMS
<a name="CHAP_Source.Oracle.ConnectionAttrib"></a>

É possível utilizar as configurações de endpoint para configurar o banco de dados de origem Oracle de forma semelhante à utilização de atributos de conexão adicionais. Você especifica as configurações ao criar o endpoint de origem usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--oracle-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações de endpoint que podem ser utilizadas com o Oracle como origem.


| Name (Nome) | Description | 
| --- | --- | 
| AccessAlternateDirectly |  Defina esse atributo como falso para utilizar o Binary Reader para a captura de dados de alteração para um Amazon RDS para Oracle como origem. Isso informa a instância do DMS para não acessar logs de redo por meio de qualquer substituição de prefixo de caminho especificado utilizando o acesso direto a arquivos. Para obter mais informações, consulte [Configurando uma tarefa do CDC para usar o Binary Reader com uma fonte do RDS for Oracle para AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC). Valor padrão: verdadeiro  Valores válidos: verdadeiro/falso Exemplo: `--oracle-settings '{"AccessAlternateDirectly": false}'`  | 
|  `AdditionalArchivedLogDestId`  |  Defina esse atributo com `ArchivedLogDestId` em uma configuração primária em espera. Essa configuração é útil em uma transição quando o banco de dados Oracle Data Guard é utilizado como origem. Nesse caso, AWS DMS precisa saber de qual destino obter os redo logs de arquivamento para ler as alterações. Isso é porque a primária anterior agora é uma instância em espera depois da transição. Embora AWS DMS ofereça suporte ao uso da `RESETLOGS` opção Oracle para abrir o banco de dados, nunca use `RESETLOGS` a menos que seja necessário. Para obter informações adicionais sobre `RESETLOGS`, consulte [Conceitos de reparo do RMAN](https://docs.oracle.com/en/database/oracle/oracle-database/19/bradv/rman-data-repair-concepts.html#GUID-1805CCF7-4AF2-482D-B65A-998192F89C2B) no *Guia do usuário de backup e recuperação do banco de dados Oracle®*. Valores válidos: Ids de destino de arquivamento Exemplo: `--oracle-settings '{"AdditionalArchivedLogDestId": 2}'`  | 
|  `AddSupplementalLogging`  |  Defina este atributo para configurar a criação de logs complementares no nível da tabela para o banco de dados Oracle. Esse atributo habilita uma das seguintes opções em todas as tabelas selecionadas para uma tarefa de migração, dependendo dos respectivos metadados: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Source.Oracle.html) Valor padrão: falso  Valores válidos: true/false  Exemplo: `--oracle-settings '{"AddSupplementalLogging": false}'`  Se você utilizar essa opção, ainda precisará ativar a criação de registro em log suplementar no nível do banco de dados, conforme discutido anteriormente.    | 
|  `AllowSelectNestedTables`  |  Defina esse atributo como true para permitir a replicação de tabelas Oracle com colunas que são tabelas aninhadas ou tipos definidos. Para obter mais informações, consulte [Replicando tabelas aninhadas usando o Oracle como fonte para AWS DMS](#CHAP_Source.Oracle.NestedTables). Valor padrão: falso  Valores válidos: verdadeiro/falso Exemplo: `--oracle-settings '{"AllowSelectNestedTables": true}'`  | 
|  `ArchivedLogDestId`  |  Especifica o ID do destino para os logs redo de restauração arquivados. Esse valor deve ser o mesmo que um número na coluna dest\$1id da visualização v\$1archived\$1log. Se você trabalhar com um destino de redo log adicional, é recomendável utilizar o atributo `AdditionalArchivedLogDestId` para especificar o ID de destino adicional. Fazer isso aprimora o desempenho ao garantir que os logs corretos sejam acessados no início.  Valor padrão: 1 Valores válidos: número  Exemplo: `--oracle-settings '{"ArchivedLogDestId": 1}'`  | 
|  `ArchivedLogsOnly`  |  Quando esse campo é definido como Y, AWS DMS só acessa os redo logs arquivados. Se os redo logs arquivados forem armazenados somente no Oracle ASM, a conta do AWS DMS usuário precisará receber privilégios de ASM.  Valor padrão: N  Valores válidos: Y/N  Exemplo: `--oracle-settings '{"ArchivedLogsOnly": Y}'`  | 
|  `asmUsePLSQLArray` (Somente ECA)  |  Use esse atributo de conexão extra (ECA) ao capturar alterações na fonte com BinaryReader. Essa configuração permite que o DMS armazene 50 leituras em nível do ASM por thread de leitura único ao controlar o número de threads utilizando o atributo `parallelASMReadThreads`. Quando você define esse atributo, o leitor AWS DMS binário usa um PL/SQL bloco anônimo para capturar dados de redo e enviá-los de volta para a instância de replicação como um grande buffer. Isso reduz o número de viagens de ida e volta até a origem. Isso pode melhorar significativamente o desempenho da captura de origem, mas resulta em consumo de memória mais alto de PGA na instância do ASM. Poderão surgir problemas de estabilidade se o destino da memória não for suficiente. É possível utilizar a fórmula a seguir para estimar a utilização total da memória PGA da instância do ASM por uma única tarefa do DMS: `number_of_redo_threads * parallelASMReadThreads * 7 MB` Valor padrão: falso Valores válidos: verdadeiro/falso Exemplo de ECA: `asmUsePLSQLArray=true;`  | 
|  `ConvertTimestampWithZoneToUTC`  |  Defina esse atributo como `true` para converter o valor do timestamp das colunas 'TIMESTAMP WITH TIME ZONE' e 'TIMESTAMP WITH LOCAL TIME ZONE' em UTC. Por padrão, o valor desse atributo é "falso" e os dados serão replicados utilizando o fuso horário do banco de dados de origem. Valor padrão: falso Valores válidos: verdadeiro/falso Exemplo: `--oracle-settings '{"ConvertTimestampWithZoneToUTC": true}'`  | 
|  `EnableHomogenousPartitionOps`  |  Defina esse atributo como `true` ativar a replicação das operações DDL de partição e subpartição do Oracle para migração *homogênea* do Oracle. Observe que esse recurso e aprimoramento foram introduzidos na AWS DMS versão 3.4.7. Valor padrão: falso Valores válidos: verdadeiro/falso Exemplo: `--oracle-settings '{"EnableHomogenousPartitionOps": true}'`  | 
|  `EnableHomogenousTablespace`  |  Defina esse atributo para habilitar a replicação homogênea de tablespace e criar tabelas ou índices existentes no mesmo tablespace no destino. Valor padrão: falso Valores válidos: verdadeiro/falso Exemplo: `--oracle-settings '{"EnableHomogenousTablespace": true}'`  | 
|  `EscapeCharacter`  |  Defina esse atributo como um caractere de escape. Esse caractere de escape permite que um único caractere curinga se comporte como um caractere normal em expressões de mapeamento de tabela. Para obter mais informações, consulte [Curingas no mapeamento de tabela](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Wildcards.md). Valor padrão: nulo  Valores válidos: qualquer caractere que não seja um caractere curinga Exemplo: `--oracle-settings '{"EscapeCharacter": "#"}'` É possível utilizar `escapeCharacter` somente em nomes de tabelas. Ele não escapa caracteres dos nomes dos esquemas ou dos nomes das colunas.  | 
|  `ExposeViews`  |  É possível extrair dados uma vez de uma visualização, mas não é possível utilizá-los para replicação contínua. Ao extrair dados de uma visualização, a visualização aparece como uma tabela no esquema de destino. Valor padrão: falso Valores válidos: verdadeiro/falso Exemplo: `--oracle-settings '{"ExposeViews": true}'`  | 
|  `ExtraArchivedLogDestIds`  |  Especifica mais um destino para um ou mais redo logs arquivados. IDs Esses IDs são os valores da coluna dest\$1id na visualização v\$1archived\$1log. Use essa configuração com o atributo de conexão ArchivedLogDestId extra em uma primary-to-single configuração ou primary-to-multiple-standby configuração. Essa configuração é útil em uma transição quando você utiliza um banco de dados Oracle Data Guard como origem. Nesse caso, AWS DMS precisa de informações sobre de qual destino obter os redo logs arquivados para ler as alterações. AWS DMS precisa disso porque, após a transição, a primária anterior é uma instância em espera. Valores válidos: Ids de destino de arquivamento Exemplo: `--oracle-settings '{"ExtraArchivedLogDestIds": 1}'`  | 
|  `FailTasksOnLobTruncation`  |  Quando definido como `true`, esse atributo faz com que a tarefa falhe, caso o tamanho real de uma coluna LOB seja superior ao `LobMaxSize` especificado. Se a tarefa for definida como modo LOB limitado e essa opção estiver definida como `true`, a tarefa falhará em vez de truncar os dados de LOB. Valor padrão: falso  Valores válidos: booleano  Exemplo: `--oracle-settings '{"FailTasksOnLobTruncation": true}'`  | 
|  `filterTransactionsOfUser` (Somente ECA)  |  Use esse atributo de conexão extra (ECA) para permitir que o DMS ignore transações de um usuário especificado ao replicar dados do Oracle durante o uso. LogMiner É possível passar valores de nome de usuário separados por vírgula, mas eles devem estar em letras MAIÚSCULAS. Exemplo de ECA: `filterTransactionsOfUser=USERNAME;`  | 
|  `NumberDataTypeScale`  |  Especifica a escala de números. É possível selecionar um aumento da escala verticalmente para 38 ou selecionar -1 para FLOAT ou -2 para VARCHAR. Por padrão, o tipo de dados NUMBER é convertido para um valor com precisão 38 e escala 10. Valor padrão: 10  Valores válidos: de -2 a 38 (–2 para VARCHAR, -1 para FLOAT) Exemplo: `--oracle-settings '{"NumberDataTypeScale": 12}'`  Selecione uma combinação de escala de precisão, -1 (FLOAT) ou -2 (VARCHAR). O DMS é compatível com qualquer combinação de escala de precisão compatível com o Oracle. Se a precisão for 39 ou superior, selecione -2 (VARCHAR). A NumberDataTypeScale configuração do banco de dados Oracle é usada somente para o tipo de dados NUMBER (sem a precisão explícita e a definição de escala). Você deve observar que a perda de precisão pode ocorrer quando essa configuração é definida incorretamente.   | 
|  `OpenTransactionWindow`  |   Fornece o período em minutos para verificar se há transações abertas apenas para tarefas da CDC. Quando você define `OpenTransactionWindow` como 1 ou acima, o DMS usa `SCN_TO_TIMESTAMP` para converter valores de SCN em valores de carimbo de data/hora. Devido às limitações do banco de dados Oracle, se você especificar um SCN muito antigo como ponto inicial de CDC, SCN\$1TO\$1TIMESTAMP apresentará falha com um erro `ORA-08181`, e você não poderá iniciar tarefas somente de CDC. Valor padrão: 0  Valores válidos: um número inteiro de 0 a 240 Exemplo: `openTransactionWindow=15;`  | 
| OraclePathPrefix | Defina esse atributo de string como o valor exigido para usar o Binary Reader para capturar dados de alteração para um Amazon RDS for Oracle como origem. Esse valor especifica a raiz padrão do Oracle utilizada para acessar os logs redo. Para obter mais informações, consulte [Configurando uma tarefa do CDC para usar o Binary Reader com uma fonte do RDS for Oracle para AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC).Valor padrão: nenhum Valor válido:/rdsdbdata/db/ORCL\$1A/ Exemplo: `--oracle-settings '{"OraclePathPrefix": "/rdsdbdata/db/ORCL_A/"}'`  | 
| ParallelASMReadThreads |  Defina esse atributo para alterar o número de threads que o DMS configura para executar uma captura de dados de alteração (CDC) utilizando o Oracle Automatic Storage Management (ASM). É possível especificar um valor inteiro entre 2 (o padrão) e 8 (o máximo). Use esse atributo junto com o atributo `ReadAheadBlocks`. Para obter mais informações, consulte [Configurando uma tarefa do CDC para usar o Binary Reader com uma fonte do RDS for Oracle para AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC). Valor padrão: 2  Valores válidos: um número inteiro de 2 a 8 Exemplo: `--oracle-settings '{"ParallelASMReadThreads": 6;}'`  | 
| ReadAheadBlocks |  Defina esse atributo para alterar o número de blocos de leitura antecipada que o DMS configura para executar a CDC utilizando o Oracle Automatic Storage Management (ASM) o armazenamento não ASM NAS. Você pode especificar um valor inteiro entre 1000 (o padrão) e 2.000.000 (o máximo). Use esse atributo junto com o atributo `ParallelASMReadThreads`. Para obter mais informações, consulte [Configurando uma tarefa do CDC para usar o Binary Reader com uma fonte do RDS for Oracle para AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC). Valor padrão: 1000  Valores válidos: um número inteiro de 1000 a 2.000.000 Exemplo: `--oracle-settings '{"ReadAheadBlocks": 150000}'`  | 
|  `ReadTableSpaceName`  |  Quando definido como `true`, esse atributo é compatível com a replicação de espaço para tabela. Valor padrão: falso  Valores válidos: booleano  Exemplo: `--oracle-settings '{"ReadTableSpaceName": true}'`  | 
| ReplacePathPrefix | Defina esse atributo como true para usar o Binary Reader para capturar dados de alteração em um Amazon RDS for Oracle como a origem. Essa configuração informa a instância do DMS para substituir raiz padrão do Oracle pela configuração UsePathPrefix especificada para acessar os logs redo. Para obter mais informações, consulte [Configurando uma tarefa do CDC para usar o Binary Reader com uma fonte do RDS for Oracle para AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC).Valor padrão: falso Valores válidos: verdadeiro/falso Exemplo: `--oracle-settings '{"ReplacePathPrefix": true}'`  | 
|  `RetryInterval`  |  Especifica o número de segundos que o sistema espera antes de enviar novamente uma consulta.  Valor padrão: 5  Valores válidos: número a partir de 1  Exemplo: `--oracle-settings '{"RetryInterval": 6}'`  | 
|  `SecurityDbEncryptionName`  |  Especifica o nome de uma chave utilizada para a criptografia de dados transparente (TDE) das colunas e do espaço para tabela no banco de dados de origem Oracle. Para obter mais informações sobre como definir esse atributo e sua senha associada no endpoint de origem Oracle, consulte [Métodos de criptografia suportados para usar o Oracle como fonte para AWS DMS](#CHAP_Source.Oracle.Encryption). Valor padrão: ""  Valores válidos: string  Exemplo: `--oracle-settings '{"SecurityDbEncryptionName": "ORACLE.SECURITY.DB.ENCRYPTION.Adg8m2dhkU/0v/m5QUaaNJEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}'`  | 
|  `SpatialSdo2GeoJsonFunctionName`  |  Para origens Oracle versão 12.1 ou anterior migrando para destinos PostgreSQL, utilize esse atributo para converter SDO\$1GEOMETRY para o formato GEOJSON. Por padrão, AWS DMS chama a função `SDO2GEOJSON` personalizada que deve estar presente e acessível ao AWS DMS usuário. Ou é possível criar seu próprio perfil personalizado que imite a operação `SDOGEOJSON` e definir `SpatialSdo2GeoJsonFunctionName` para chamá-la.  Valor padrão: SDO2 GEOJSON Valores válidos: string  Exemplo: `--oracle-settings '{"SpatialSdo2GeoJsonFunctionName": "myCustomSDO2GEOJSONFunction"}'`  | 
|  `StandbyDelayTime`  |  Utilize esse atributo para especificar um tempo em minutos para o atraso na sincronização de espera. Se a origem for um banco de dados em espera do Active Data Guard, utilize esse atributo para especificar o atraso de tempo entre os bancos de dados primário e em espera. Em AWS DMS, você pode criar uma tarefa do Oracle CDC que usa uma instância standby do Active Data Guard como fonte para replicar as alterações em andamento. Isso elimina a necessidade de se conectar a um banco de dados ativo que pode estar em produção. Valor padrão: 0  Valores válidos: número  Exemplo: `--oracle-settings '{"StandbyDelayTime": 1}'` **Observação:** ao utilizar o DMS 3.4.6, 3.4.7 e superior, a utilização dessa configuração de conexão é opcional. Na versão mais recente do DMS 3.4.6 e na versão 3.4.7, `dms_user` deve ter a permissão `select` ativada em `V_$DATAGUARD_STATS`, permitindo que o DMS calcule o tempo de atraso em espera.  | 
| UseAlternateFolderForOnline | Defina esse atributo como true para usar o Binary Reader para capturar dados de alteração em um Amazon RDS for Oracle como a origem. Isso informa a instância do DMS para utilizar qualquer substituição do prefixo especificado para acessar todos os logs redo online, Para obter mais informações, consulte [Configurando uma tarefa do CDC para usar o Binary Reader com uma fonte do RDS for Oracle para AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC).Valor padrão: falso Valores válidos: verdadeiro/falso Exemplo: `--oracle-settings '{"UseAlternateFolderForOnline": true}'`  | 
| UseBfile |  Defina esse atributo como Y para capturar dados de alterações utilizando o utilitário Binary Reader. Defina `UseLogminerReader` como N para definir esse atributo como Y. Para utilizar o Binary Reader com o Amazon RDS para Oracle como a origem, defina atributos adicionais. Para obter mais informações sobre essa configuração e sobre como utilizar o Oracle Automatic Storage Management (ASM), consulte [Usando Oracle LogMiner ou AWS DMS Binary Reader para CDC](#CHAP_Source.Oracle.CDC). Observação: ao definir esse valor como um atributo de conexão adicional (ECA), os valores válidos são "S" e "N". Ao definir esse valor como uma configuração de endpoint, os valores válidos são `true` e `false`. Valor padrão: N  Valores válidos: Y/N (ao definir esse valor como ECA); true/false (ao definir esse valor como uma configuração de ponto final). Exemplo: `--oracle-settings '{"UseBfile": Y}'`  | 
|  `UseLogminerReader`  |  Defina esse atributo como Y para capturar dados de alteração usando o LogMiner utilitário (o padrão). Defina essa opção como N para que o AWS DMS acesse os logs redo como arquivos binários. Ao definir essa opção como N, adicione também a configuração useBfile=Y. Para obter mais informações sobre essa configuração e sobre a utilização do Oracle Automatic Storage Management (ASM), consulte [Usando Oracle LogMiner ou AWS DMS Binary Reader para CDC](#CHAP_Source.Oracle.CDC). Observação: ao definir esse valor como um atributo de conexão adicional (ECA), os valores válidos são "S" e "N". Ao definir esse valor como uma configuração de endpoint, os valores válidos são `true` e `false`. Valor padrão: Y  Valores válidos: Y/N (ao definir esse valor como ECA); true/false (ao definir esse valor como uma configuração de ponto final). Exemplo: `--oracle-settings '{"UseLogminerReader": Y}'`  | 
| UsePathPrefix | Defina esse atributo de string como o valor exigido para usar o Binary Reader para capturar dados de alteração para um Amazon RDS for Oracle como origem. Esse valor especifica o prefixo do caminho utilizado para substituir a raiz padrão do Oracle para acessar os redo logs. Para obter mais informações, consulte [Configurando uma tarefa do CDC para usar o Binary Reader com uma fonte do RDS for Oracle para AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC).Valor padrão: nenhum Valor válido: /rdsdbdata/log/ Exemplo: `--oracle-settings '{"UsePathPrefix": "/rdsdbdata/log/"}'`  | 

## Tipos de dados de origem do Oracle
<a name="CHAP_Source.Oracle.DataTypes"></a>

O endpoint Oracle para AWS DMS suporta a maioria dos tipos de dados Oracle. A tabela a seguir mostra os tipos de dados de origem Oracle que são suportados durante o uso AWS DMS e o mapeamento padrão para AWS DMS os tipos de dados.

**nota**  
Com exceção dos tipos de dados LONG e LONG RAW, ao replicar de uma origem Oracle para um destino Oracle (uma *replicação homogênea*), todos os tipos de dados de origem e de destino serão idênticos. Mas o tipo de dados LONG será mapeado para CLOB e o tipo de dados LONG RAW será mapeado para BLOB. 

Para obter informações sobre como visualizar o tipo de dados mapeado no destino, consulte a seção relativa ao endpoint de destino que você está usando.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  Tipo de dados do Oracle  |  AWS DMS tipo de dados  | 
| --- | --- | 
|  BINARY\$1FLOAT  |  REAL4  | 
|  BINARY\$1DOUBLE  |  REAL8  | 
|  BINARY  |  BYTES  | 
|  FLOAT (P)  |  Se a precisão for menor ou igual a 24, use REAL4. Se a precisão for maior que 24, use REAL8.  | 
|  NUMBER (P,S)  |  Quando a escala for maior que 0, utilize NUMERIC. Quando a escala for 0: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Source.Oracle.html) Quando a escala for menor que 0, use REAL8. | 
|  DATE  |  DATETIME  | 
|  INTERVAL YEAR TO MONTH  |  STRING (com indicação de intervalo de tempo em anos e meses)  | 
|  INTERVAL DAY TO SECOND  |  STRING (com indicação de intervalo de tempo em dias e segundos)  | 
|  TIMESTAMP  |  DATETIME  | 
|  TIMESTAMP WITH TIME ZONE  |  STRING (com indicação de time stamp com fuso horário)  | 
|  TIMESTAMP WITH LOCAL TIME ZONE  |  STRING (com indicação de time stamp com fuso horário local)  | 
|  CHAR  |  STRING  | 
|  VARCHAR2  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Source.Oracle.html)  | 
|  NCHAR  |  WSTRING  | 
|  NVARCHAR2  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Source.Oracle.html)  | 
|  RAW  |  BYTES  | 
|  REAL  |  REAL8  | 
|  BLOB  |  BLOB Para usar esse tipo de dados com AWS DMS, você deve habilitar o uso de tipos de dados BLOB para uma tarefa específica. AWS DMS suporta tipos de dados BLOB somente em tabelas que incluem uma chave primária.  | 
|  CLOB  |  CLOB Para usar esse tipo de dados com AWS DMS, você deve habilitar o uso de tipos de dados CLOB para uma tarefa específica. Durante o CDC, AWS DMS suporta tipos de dados CLOB somente em tabelas que incluem uma chave primária.  | 
|  NCLOB  |  NCLOB Para usar esse tipo de dados com AWS DMS, você deve habilitar o uso dos tipos de dados NCLOB para uma tarefa específica. Durante o CDC, AWS DMS suporta tipos de dados NCLOB somente em tabelas que incluem uma chave primária.  | 
|  LONG  |  CLOB O tipo de dados LONG não é suportado no modo de aplicação otimizado em lote (modo TurboStream CDC). Para usar esse tipo de dados com AWS DMS, habilite o uso de LOBs para uma tarefa específica. Durante o CDC ou com carga total, AWS DMS suporta tipos de dados LOB somente em tabelas que tenham uma chave primária. Além disso, AWS DMS não suporta o modo LOB completo para carregar colunas LONG. Em vez disso, é possível utilizar o modo LOB limitado para migrar colunas LONG para um destino Oracle. No modo LOB limitado, AWS DMS trunca todos os dados de 64 KB definidos como colunas LONG maiores que 64 KB. Para obter mais informações sobre o suporte a LOB em AWS DMS, consulte [Configurando o suporte LOB para bancos de dados de origem em uma tarefa AWS DMS](CHAP_Tasks.LOBSupport.md)  | 
|  LONG RAW  |  BLOB O tipo de dados LONG RAW não é suportado no modo de aplicação otimizado em lote (modo TurboStream CDC). Para usar esse tipo de dados com AWS DMS, habilite o uso de LOBs para uma tarefa específica. Durante o CDC ou com carga total, AWS DMS suporta tipos de dados LOB somente em tabelas que tenham uma chave primária. Além disso, AWS DMS não suporta o modo LOB completo para carregar colunas LONG RAW. Em vez disso, é possível utilizar o modo LOB limitado para migrar colunas LONG RAW para um destino Oracle. No modo LOB limitado, o AWS DMS trunca todos os dados de 64 KB definidos como colunas LONG RAW com mais de 64 KB. Para obter mais informações sobre o suporte a LOB em AWS DMS, consulte [Configurando o suporte LOB para bancos de dados de origem em uma tarefa AWS DMS](CHAP_Tasks.LOBSupport.md)  | 
|  XMLTYPE  |  CLOB  | 
| SDO\$1GEOMETRY | BLOB (quando é uma migração de Oracle para Oracle)CLOB (quando é uma migração de Oracle para PostgreSQL) | 

As tabelas de origem do Oracle que têm colunas com os tipos de dados relacionados a seguir não são compatíveis e não podem ser replicadas. A replicação de colunas com esses tipos de dados resultará em colunas nulas.
+ BFILE
+ ROWID
+ REF
+ UROWID
+ Tipos de dados definidos pelo usuário
+ ANYDATA
+ VARRAY

**nota**  
Colunas virtuais não são compatíveis.

### Migrar tipos de dados espaciais do Oracle
<a name="CHAP_Source.Oracle.DataTypes.Spatial"></a>

*Dados espaciais* identificam as informações de geometria de um objeto ou local no espaço. Em um banco de dados Oracle, a descrição geométrica de um objeto geográfico é armazenada em um objeto do tipo SDO\$1GEOMETRY. Dentro desse objeto, a descrição geométrica é armazenada em uma única linha em uma única coluna de uma tabela definida pelo usuário. 

AWS DMS suporta a migração do tipo Oracle SDO\$1GEOMETRY de uma fonte Oracle para um destino Oracle ou PostgreSQL.

Ao migrar tipos de dados espaciais Oracle usando AWS DMS, esteja ciente destas considerações:
+ Ao migrar para um destino Oracle, transfira manualmente as entradas USER\$1SDO\$1GEOM\$1METADATA que incluem informações de tipo. 
+ Ao migrar de um endpoint de origem Oracle para um endpoint de destino do PostgreSQL, cria colunas de destino. AWS DMS Essas colunas têm geometria padrão e informações de tipo geográfico com uma dimensão 2D e um identificador de referência espacial (SRID) igual a zero (0). Um exemplo é `GEOMETRY, 2, 0`.
+ Para origens Oracle versão 12.1 ou anterior migrando para destinos PostgreSQL, converta os objetos `SDO_GEOMETRY` para o formato `GEOJSON` utilizando o perfil `SDO2GEOJSON` ou o atributo de conexão adicional `spatialSdo2GeoJsonFunctionName`. Para obter mais informações, consulte [Configurações de endpoint ao usar o Oracle como fonte para AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib).
+ AWS DMS suporta migrações de colunas espaciais da Oracle somente para o modo LOB completo. AWS DMS não suporta os modos LOB limitado ou LOB embutido. Para obter mais informações sobre o modo LOB, consulte [Configurando o suporte LOB para bancos de dados de origem em uma tarefa AWS DMS](CHAP_Tasks.LOBSupport.md).
+ Como AWS DMS só oferece suporte ao modo LOB completo para migrar colunas espaciais do Oracle, a tabela das colunas precisa de uma chave primária e uma chave exclusiva. Se a tabela não tiver uma chave primária e uma chave exclusiva, a tabela será ignorada na migração.

# Usando um banco de dados Microsoft SQL Server como fonte para AWS DMS
<a name="CHAP_Source.SQLServer"></a>

Migre dados de um ou vários bancos de dados do Microsoft SQL Server usando o. AWS DMS Com um banco de dados do SQL Server como fonte, você pode migrar dados para outro banco de dados do SQL Server ou para um dos outros bancos de dados AWS DMS compatíveis. 

Para obter informações sobre as versões do SQL Server que oferecem AWS DMS suporte como fonte, consulte[Fontes para AWS DMS](CHAP_Introduction.Sources.md).

O banco de dados de origem SQL Server pode ser instalado em qualquer computador na rede. É necessário ter uma conta do SQL Server com os privilégios de acesso ao banco de dados de origem adequados ao tipo de tarefa escolhido para utilizar com o AWS DMS. Para obter mais informações, consulte [Permissões para tarefas do SQL Server](#CHAP_Source.SQLServer.Permissions).

AWS DMS oferece suporte à migração de dados de instâncias nomeadas do SQL Server. É possível utilizar a seguinte notação no nome do servidor ao criar o endpoint de origem.

```
IPAddress\InstanceName
```

Por exemplo, o seguinte é um nome do servidor do endpoint de origem correto. Aqui, a primeira parte do nome é o endereço IP do servidor e a segunda parte é o nome da instância do SQL Server (neste exemplo, SQLTest).

```
10.0.0.25\SQLTest
```

Além disso, obtenha o número da porta que sua instância nomeada do SQL Server escuta e use-o para configurar seu endpoint de AWS DMS origem. 

**nota**  
A porta 1433 é o padrão para o Microsoft SQL Server. No entanto, as portas dinâmicas que são alteradas a cada vez que o SQL Server é iniciado e os números de portas estáticas específicos utilizados para conexão ao SQL Server por meio de um firewall também são utilizados com frequência. Então, você quer saber o número real da porta da sua instância nomeada do SQL Server ao criar o endpoint de AWS DMS origem.

É possível utilizar SSL para criptografar conexões entre o endpoint do SQL Server e a instância de replicação. Para obter mais informações sobre como utilizar o SSL com um endpoint do SQL Server, consulte [Usando SSL com AWS Database Migration Service](CHAP_Security.SSL.md).

Você pode usar CDC para a migração contínua de um banco de dados do SQL Server. Para ter informações sobre como configurar o banco de dados do SQL Server de origem para CDC, consulte [Capturar alterações de dados para replicação contínua no SQL Server](CHAP_Source.SQLServer.CDC.md).

Para obter detalhes adicionais sobre como trabalhar com bancos de dados de origem do SQL Server e AWS DMS, consulte o seguinte.

**Topics**
+ [Limitações no uso do SQL Server como fonte para AWS DMS](#CHAP_Source.SQLServer.Limitations)
+ [Permissões para tarefas do SQL Server](#CHAP_Source.SQLServer.Permissions)
+ [Utilizar replicação contínua (CDC) a partir de uma origem do SQL Server](#CHAP_Source.SQLServer.Prerequisites)
+ [Métodos de compactação compatíveis com o SQL Server](#CHAP_Source.SQLServer.Compression)
+ [Trabalhando com grupos de AlwaysOn disponibilidade autogerenciados do SQL Server](#CHAP_Source.SQLServer.AlwaysOn)
+ [Configurações de endpoint ao usar o SQL Server como fonte para AWS DMS](#CHAP_Source.SQLServer.ConnectionAttrib)
+ [Tipos de dados de origem no SQL Server](#CHAP_Source.SQLServer.DataTypes)
+ [Capturar alterações de dados para replicação contínua no SQL Server](CHAP_Source.SQLServer.CDC.md)

## Limitações no uso do SQL Server como fonte para AWS DMS
<a name="CHAP_Source.SQLServer.Limitations"></a>

As seguintes limitações se aplicam ao utilizar um banco de dados SQL como origem do AWS DMS:
+ A propriedade identity de uma coluna não é migrada para uma coluna de banco de dados de destino.
+ O endpoint do SQL Server não é compatível com a utilização de tabelas com colunas esparsas.
+ A Autenticação do Windows não é compatível.
+ As alterações em campos computados em um SQL Server não são replicadas.
+ Tabelas temporais não são compatíveis.
+ A alternância de partições do SQL Server não é compatível.
+ Ao usar os utilitários WRITETEXT e UPDATETEXT, AWS DMS não captura eventos aplicados no banco de dados de origem.
+ O seguinte padrão da linguagem de manipulação de dados (DML) não é compatível: 

  ```
  SELECT * INTO new_table FROM existing_table
  ```
+ Ao utilizar o SQL Server como uma origem, a criptografia em nível de colunas não é compatível.
+ AWS DMS não oferece suporte a auditorias em nível de servidor no SQL Server 2008 ou no SQL Server 2008 R2 como fontes. Isso ocorre devido a um problema conhecido com o SQL Server 2008 e 2008 R2. Por exemplo, a execução do comando a seguir causa AWS DMS a falha.

  ```
  USE [master]
  GO 
  ALTER SERVER AUDIT [my_audit_test-20140710] WITH (STATE=on)
  GO
  ```
+ Não é possível usar geometria e colunas de geometria no modo LOB completo ao utilizar o SQL Server como origem. Em vez disso, utilize o modo LOB limitado ou defina a configuração da tarefa `InlineLobMaxSize` para utilizar o modo LOB em linha.
+ Ao utilizar um banco de dados de origem Microsoft SQL Server em uma tarefa de replicação, as definições do publicador de replicação do SQL Server não serão removidas se você remover a tarefa. Um administrador de sistema do Microsoft SQL Server deve excluir essas definições do Microsoft SQL Server.
+ A migração de dados de non-schema-bound visualizações e vinculados a esquemas é suportada somente para tarefas de carga total. 
+ A renomeação de tabelas não é compatível com a utilização de sp\$1rename (por exemplo, `sp_rename 'Sales.SalesRegion', 'SalesReg;)`)
+ A renomeação de colunas não é compatível com a utilização de sp\$1rename (por exemplo, `sp_rename 'Sales.Sales.Region', 'RegID', 'COLUMN';`)
+ AWS DMS não oferece suporte ao processamento de alterações para definir e desdefinir valores padrão da coluna (usando a `ALTER COLUMN SET DEFAULT` cláusula com `ALTER TABLE` instruções).
+ AWS DMS não oferece suporte ao processamento de alterações para definir a nulidade da coluna (usando a `ALTER COLUMN [SET|DROP] NOT NULL` cláusula com instruções). `ALTER TABLE`
+ Com o SQL Server 2012 e o SQL Server 2014, ao utilizar a replicação do DMS com grupos de disponibilidade, o banco de dados de distribuição não pode ser colocado em um grupo de disponibilidade. O SQL 2016 oferece suporte à colocação do banco de dados de distribuição em um grupo de disponibilidade, exceto para bancos de dados de distribuição usados em topologias de mesclagem, bidirecional ou peer-to-peer replicação.
+ Para tabelas particionadas, AWS DMS não oferece suporte a diferentes configurações de compactação de dados para cada partição.
+ Ao inserir um valor em tipos de dados espaciais (GEOGRAPHY e GEOMETRY) no SQL Server, é possível ignorar a propriedade de identificador de sistema de referência espacial (SRID) ou especificar outro número. Ao replicar tabelas com tipos de dados espaciais, AWS DMS substitui o SRID pelo SRID padrão (0 para GEOMETRIA e 4326 para GEOGRAFIA).
+ Se seu banco de dados não estiver configurado para MS-REPLICATION ou MS-CDC, você ainda poderá capturar tabelas que não tenham uma chave primária, mas somente eventos DML serão capturados. INSERT/DELETE Os eventos UPDATE e TRUNCATE TABLE são ignorados.
+ Os índices Columnstore não são compatíveis.
+ Tabelas otimizadas para memória (utilizando OLTP na memória) não são compatíveis.
+ Ao replicar uma tabela com uma chave primária que consiste em várias colunas, a atualização das colunas de chave primária durante a carga máxima não é compatível.
+ A durabilidade atrasada não é compatível.
+ A configuração do endpoint `readBackupOnly=true` (atributo de conexão adicional) não funciona em instâncias de origem do RDS para SQL Server devido à forma como o RDS executa backups.
+ O `EXCLUSIVE_AUTOMATIC_TRUNCATION` não funciona em instâncias de origem do Amazon RDS SQL Server porque os usuários do RDS não têm acesso para executar o procedimento armazenado do SQL Server, `sp_repldone`.
+ AWS DMS não captura comandos truncados.
+ AWS DMS não oferece suporte à replicação de bancos de dados com a recuperação acelerada de banco de dados (ADR) ativada.
+ AWS DMS não suporta a captura de instruções de linguagem de definição de dados (DDL) e linguagem de manipulação de dados (DML) em uma única transação.
+ AWS DMS não oferece suporte à replicação de pacotes de aplicativos de camada de dados (DACPAC).
+ As instruções UPDATE que envolvem chaves primárias ou índices exclusivos e atualizam várias linhas de dados podem causar conflitos ao aplicar alterações no banco de dados de destino. Isso pode acontecer, por exemplo, quando o banco de dados de destino aplica atualizações, como instruções INSERT e DELETE, em vez de uma única instrução UPDATE. Com o modo de aplicação otimizado em lote, a tabela pode ser ignorada. Com o modo de aplicação transacional, a operação UPDATE pode resultar em violações de restrições. Para evitar esse problema, recarregue a tabela relevante. Como alternativa, localize os registros problemáticos na tabela de controle Exceções da aplicação (`dmslogs.awsdms_apply_exceptions`) e edite-os manualmente no banco de dados de destino. Para obter mais informações, consulte [Configurações de ajuste de processamento de alterações](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md).
+ AWS DMS não suporta a replicação de tabelas e esquemas, em que o nome inclui um caractere especial do conjunto a seguir.

  `\\ -- \n \" \b \r ' \t ;` 
+ O mascaramento de dados não é suportado. AWS DMS migra dados mascarados sem mascarar.
+ AWS DMS replica até 32.767 tabelas com chaves primárias e até 1.000 colunas para cada tabela. Isso ocorre porque AWS DMS cria um artigo de replicação do SQL Server para cada tabela replicada, e os artigos de replicação do SQL Server têm essas limitações.
+ Ao utilizar a captura de dados de alteração (CDC), defina todas as colunas que compõem um índice exclusivo como `NOT NULL`. Se esse requisito não for atendido, ocorrerá o erro 22838 do sistema do SQL Server. 
+ É possível perder eventos se o SQL Server armazená-los do log de transações ativo para o log de backup ou truncá-los no log de transações ativo.

As seguintes limitações se aplicam ao acessar os logs de transação de backup:
+ Backups criptografados não são compatíveis.
+ Backups armazenados em um URL ou no Windows Azure não são compatíveis.
+ AWS DMS não suporta o processamento direto de backups de registros de transações no nível do arquivo a partir de pastas compartilhadas alternativas.
+ Para fontes do Cloud SQL Server que não sejam Amazon RDS para Microsoft SQL Server AWS DMS , o Amazon RDS for Microsoft SQL Server oferece suporte à replicação contínua (CDC) somente com o log de transações ativo. Não é possível utilizar o log de backup com a CDC. É possível perder eventos se o SQL Server armazená-los do log de transações ativo para o log de backup ou truncá-los no log de transações ativo antes que o DMS consiga lê-los. 
+ Para fontes do Amazon RDS for Microsoft SQL Server AWS DMS , a versão 3.5.2 e versões anteriores oferecem suporte à replicação contínua (CDC) somente com o log de transações ativo, porque o DMS não pode acessar o log de backup com o CDC. É possível perder eventos se o RDS para SQL Server armazená-los do log de transações ativo para o log de backup ou truncá-los no log de transações ativo antes que o DMS consiga lê-los. Essa limitação não se aplica à AWS DMS versão 3.5.3 e superior.
+ AWS DMS não oferece suporte ao CDC para Amazon RDS Proxy for SQL Server como fonte.
+ Se a origem do SQL Server ficar indisponível durante uma tarefa de carga máxima, o AWS DMS poderá marcar a tarefa como concluída após várias tentativas de reconexão, mesmo que a migração de dados permaneça incompleta. Nesse cenário, as tabelas de destino contêm somente os registros migrados antes da perda da conexão, possivelmente criando inconsistências de dados entre os sistemas de origem e de destino. Para garantir a integridade dos dados, você deve reiniciar totalmente a tarefa de carga máxima ou recarregar as tabelas específicas afetadas pela interrupção da conexão.

## Permissões para tarefas do SQL Server
<a name="CHAP_Source.SQLServer.Permissions"></a>

**Topics**
+ [Permissões para tarefas somente de carga máxima](#CHAP_Source.SQLServer.Permissions.FullLoad)
+ [Permissões para tarefas com replicação contínua](#CHAP_Source.SQLServer.Permissions.Ongoing)

### Permissões para tarefas somente de carga máxima
<a name="CHAP_Source.SQLServer.Permissions.FullLoad"></a>

As permissões a seguir são necessárias para realizar tarefas somente de carga máxima. Observe que o AWS DMS não cria o login `dms_user`. Para ter informações sobre como criar um login para o SQL Server, consulte o tópico [Create a database user](https://learn.microsoft.com/en-us/sql/relational-databases/security/authentication-access/create-a-database-user?view=sql-server-ver16) na *documentação da Microsoft*.

```
USE db_name;
                
                CREATE USER dms_user FOR LOGIN dms_user; 
                ALTER ROLE [db_datareader] ADD MEMBER dms_user; 
                GRANT VIEW DATABASE STATE to dms_user;
                GRANT VIEW DEFINITION to dms_user;
                
                USE master;
                
                GRANT VIEW SERVER STATE TO dms_user;
```

### Permissões para tarefas com replicação contínua
<a name="CHAP_Source.SQLServer.Permissions.Ongoing"></a>

As instâncias autogerenciadas do SQL Server podem ser configuradas para replicação contínua usando o DMS com ou sem o uso do perfil `sysadmin`. Para instâncias do SQL Server nas quais você não pode conceder o perfil `sysadmin`, garanta que o usuário do DMS tenha os privilégios descritos a seguir.

**Configurar permissões para replicação contínua a partir de um banco de dados autogerenciado do SQL Server**

1. Crie uma nova conta do SQL Server com autenticação por senha utilizando o SQL Server Management Studio (SSMS) ou conforme descrito anteriormente em [Permissões para tarefas somente de carga máxima](#CHAP_Source.SQLServer.Permissions.FullLoad), por exemplo `self_managed_user`.

1. Execute os seguintes comandos `GRANT`: 

   ```
   GRANT VIEW SERVER STATE TO self_managed_user;
   
   USE msdb;
       GRANT SELECT ON msdb.dbo.backupset TO self_managed_user;
       GRANT SELECT ON msdb.dbo.backupmediafamily TO self_managed_user;
       GRANT SELECT ON msdb.dbo.backupfile TO self_managed_user;
       
   USE db_name;
       CREATE USER self_managed_user FOR LOGIN self_managed_user;
       ALTER ROLE [db_owner] ADD MEMBER self_managed_user;
       GRANT VIEW DEFINITION to self_managed_user;
   ```

1. Além das permissões anteriores, o usuário precisa de uma das seguintes:
   + O usuário deve ser um membro do perfil `sysadmin` fixo do servidor
   + Configurações e permissões conforme descrito em [Configurar a replicação contínua em um SQL Server em um ambiente de grupo de disponibilidade: sem o perfil sysadmin](CHAP_Source.SQLServer.CDC.md#CHAP_SupportScripts.SQLServer.ag) ou [Configurar a replicação contínua em um SQL Server autônomo: sem o perfil sysadmin](CHAP_Source.SQLServer.CDC.md#CHAP_SupportScripts.SQLServer.standalone), dependendo da configuração da origem.

#### Configurar permissões para replicação contínua a partir de um banco de dados do SQL Server na nuvem
<a name="CHAP_Source.SQLServer.Permissions.Cloud"></a>

Uma instância do SQL Server hospedada na nuvem é uma instância em execução no Amazon RDS para Microsoft SQL Server, uma instância gerenciada do Azure SQL ou qualquer outra instância gerenciada do SQL Server na nuvem compatível com o DMS.

Crie uma nova conta do SQL Server com autenticação por senha utilizando o SQL Server Management Studio (SSMS) ou conforme descrito anteriormente em [Permissões para tarefas somente de carga máxima](#CHAP_Source.SQLServer.Permissions.FullLoad), por exemplo `rds_user`.

Execute os seguintes comandos de concessão:

```
GRANT VIEW SERVER STATE TO rds_user;
```

Para origens do Amazon RDS para Microsoft SQL Server, a versão 3.5.3 e superiores do DMS são compatíveis com leitura de backups de logs de transações. Para garantir que o DMS possa acessar os backups de log, além do descrito acima, conceda privilégios de usuário `master` ou os seguintes privilégios em uma origem do RDS para SQL Server:

```
USE msdb;
    GRANT EXEC ON msdb.dbo.rds_dms_tlog_download TO rds_user;
    GRANT EXEC ON msdb.dbo.rds_dms_tlog_read TO rds_user;
    GRANT EXEC ON msdb.dbo.rds_dms_tlog_list_current_lsn TO rds_user;
    GRANT EXEC ON msdb.dbo.rds_task_status TO rds_user;
    
USE db_name;
    CREATE USER rds_user FOR LOGIN rds_user;
    ALTER ROLE [db_owner] ADD MEMBER rds_user;
    GRANT VIEW DEFINITION to rds_user;
```

Para as instâncias gerenciadas de SQL do Amazon Azure, conceda os seguintes privilégios:

```
GRANT SELECT ON msdb.dbo.backupset TO rds_user;
GRANT SELECT ON msdb.dbo.backupmediafamily TO rds_user;
GRANT SELECT ON msdb.dbo.backupfile TO rds_user;
```

## Utilizar replicação contínua (CDC) a partir de uma origem do SQL Server
<a name="CHAP_Source.SQLServer.Prerequisites"></a>

É possível utilizar a replicação contínua (captura de dados de alteração, ou CDC) para um banco de dados SQL Server autogerenciado on-premises ou no Amazon EC2, ou um banco de dados de nuvem, como o Amazon RDS ou uma instância gerenciada pelo Microsoft Azure SQL.

Os seguintes requisitos se aplicam especificamente ao utilizar a replicação contínua com um banco de dados SQL Server como uma origem para o AWS DMS:
+ O SQL Server deve ser configurado para fazer backups completos e um backup deve ser feito antes do início da replicação dos dados.
+ O modelo de recuperação deve ser definido como **Bulk-logged** ou **Full**.
+ O backup do SQL Server para múltiplos discos não é compatível. Se o backup estiver definido para gravar o backup do banco de dados em vários arquivos em discos diferentes, não será AWS DMS possível ler os dados e a AWS DMS tarefa falhará.
+ Para origens do SQL Server autogerenciadas, as definições do SQL Server Replication Publisher para a origem utilizada em uma tarefa de CDC do DMS não são removidas quando você remove a tarefa. Um administrador de sistema do SQL Server deve excluir essas definições do SQL Server para origens autogerenciadas.
+ Durante o CDC, é AWS DMS necessário consultar os backups do log de transações do SQL Server para ler as alterações. AWS DMS não oferece suporte a backups de log de transações do SQL Server criados usando software de backup de terceiros que *não estejam* em formato nativo. Para compatibilidade com backups de logs de transações *que estão* em formato nativo e foram criados utilizando software de backup de terceiros, adicione o atributo de conexão `use3rdPartyBackupDevice=Y` ao endpoint de origem.
+ Para origens autogerenciadas do SQL Server, lembre-se de que o SQL Server não captura alterações em tabelas recém-criadas até que elas sejam publicadas. Quando as tabelas são adicionadas a uma fonte do SQL Server, AWS DMS gerencia a criação da publicação. No entanto, esse processo pode demorar alguns minutos. As operações feitas durante esse intervalo nas tabelas recentemente criadas não são capturadas ou replicadas no destino. 
+ AWS DMS a captura de dados de alteração exige que o registro completo de transações seja ativado no SQL Server. Para ativar o registro em log de transações completo no SQL Server, ative MS-REPLICATION ou CHANGE DATA CAPTURE (CDC).
+ As entradas *tlog* do SQL Server não serão marcadas para reutilização até que o trabalho de captura de MS CDC processe essas alterações.
+ As operações de CDC não são compatíveis com tabelas com otimização de memória. Essa limitação se aplica ao SQL Server 2014 (quando o recurso foi introduzido pela primeira vez) e posterior.
+ AWS DMS a captura de dados de alteração requer, por padrão, um banco de dados de distribuição no Amazon EC2 ou no servidor SQL On-Prem como fonte. Portanto, ative o distribuidor ao configurar a replicação de MS para tabelas com chaves primárias.

## Métodos de compactação compatíveis com o SQL Server
<a name="CHAP_Source.SQLServer.Compression"></a>

Observe o seguinte sobre os métodos de compactação compatíveis com o SQL Server no AWS DMS:
+ AWS DMS oferece suporte à Row/Page compactação no SQL Server versão 2008 e posterior.
+ AWS DMS não suporta o formato de armazenamento Vardecimal.
+ AWS DMS não suporta colunas esparsas e compressão de estrutura colunar.

## Trabalhando com grupos de AlwaysOn disponibilidade autogerenciados do SQL Server
<a name="CHAP_Source.SQLServer.AlwaysOn"></a>

A disponibilidade dos grupos de disponibilidade AlwaysOn do SQL Server fornece alta disponibilidade e recuperação de desastres como alternativa ao espelhamento do banco de dados no nível empresarial. 

Em AWS DMS, você pode migrar as alterações de uma única réplica primária ou secundária do grupo de disponibilidade.

### Como trabalhar com a réplica primária do grupo de disponibilidade
<a name="CHAP_Source.SQLServer.AlwaysOn.Primary"></a>

 

**Para usar o grupo de disponibilidade principal como fonte em AWS DMS, faça o seguinte:**

1. Ative a opção de distribuição em todas as instâncias do SQL Server em suas réplicas de disponibilidade. Para obter mais informações, consulte [Configurar a replicação contínua em um SQL Server autogerenciado](CHAP_Source.SQLServer.CDC.md#CHAP_Source.SQLServer.CDC.MSCDC).

1. No AWS DMS console, abra as configurações do banco de dados de origem do SQL Server. Em **Nome do servidor**, especifique o nome do serviço de nomes de domínio (DNS) ou o endereço IP configurado para o receptor do grupo de disponibilidade. 

Quando você inicia uma AWS DMS tarefa pela primeira vez, ela pode levar mais tempo do que o normal para ser iniciada. Essa lentidão ocorre porque a criação dos artigos da tabela está sendo duplicada pelo servidor de grupos de disponibilidade. 

### Como trabalhar com uma réplica do grupo de disponibilidade secundário
<a name="CHAP_Source.SQLServer.AlwaysOn.Secondary"></a>

**Para usar um grupo de disponibilidade secundário como origem em AWS DMS, faça o seguinte:**

1. Use as mesmas credenciais usadas pelo usuário do endpoint de AWS DMS origem para se conectar a réplicas individuais.

1. Certifique-se de que sua instância de AWS DMS replicação possa resolver os nomes DNS de todas as réplicas existentes e se conectar a elas. É possível utilizar a consulta SQL a seguir para obter os nomes DNS de todas as réplicas.

   ```
   select ar.replica_server_name, ar.endpoint_url from sys.availability_replicas ar
   JOIN sys.availability_databases_cluster adc
   ON adc.group_id = ar.group_id AND adc.database_name = '<source_database_name>';
   ```

1. Ao criar o endpoint de origem, especifique o nome DNS do receptor do grupo de disponibilidade do **Nome do servidor** do endpoint ou o **Endereço do servidor** do segredo do endpoint. Para obter mais informações sobre receptores de grupos de disponibilidade, consulte [O que é um receptor de grupos de disponibilidade?](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/availability-group-listener-overview?view=sql-server-ver15) na documentação do SQL Server.

   É possível utilizar um servidor DNS público ou um servidor DNS on-premises para resolver o receptor do grupo de disponibilidade, a réplica primária e as réplicas secundárias. Para utilizar um servidor DNS on-premises, configure o Amazon Route 53 Resolver. Para obter mais informações, consulte [Utilização do seu próprio servidor de nomes on-premises](CHAP_BestPractices.md#CHAP_BestPractices.Rte53DNSResolver).

1. Adicione os seguintes atributos de conexão adicional ao endpoint de origem.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Source.SQLServer.html)

1. Ative a opção de distribuição em todas as réplicas no grupo de disponibilidade. Adicione todos os nós à lista de distribuidores. Para obter mais informações, consulte [Como configurar a distribuição](CHAP_Source.SQLServer.CDC.md#CHAP_Source.SQLServer.CDC.MSCDC.Setup).

1. Execute a consulta a seguir na réplica primária de leitura e gravação para ativar a publicação do banco de dados. Você executa essa consulta somente uma vez para o banco de dados. 

   ```
   sp_replicationdboption @dbname = N'<source DB name>', @optname = N'publish', @value = N'true';
   ```



#### Limitações
<a name="CHAP_Source.SQLServer.AlwaysOn.Secondary.limitations"></a>

Veja a seguir as limitações ao trabalhar com uma réplica secundária do grupo de disponibilidade:
+ AWS DMS não oferece suporte ao Safeguard ao usar uma réplica de grupo de disponibilidade somente para leitura como fonte. Para obter mais informações, consulte [Configurações de endpoint ao usar o SQL Server como fonte para AWS DMS](#CHAP_Source.SQLServer.ConnectionAttrib).
+ AWS DMS não oferece suporte ao atributo de conexão `setUpMsCdcForTables` extra ao usar uma réplica de grupo de disponibilidade somente para leitura como fonte. Para obter mais informações, consulte [Configurações de endpoint ao usar o SQL Server como fonte para AWS DMS](#CHAP_Source.SQLServer.ConnectionAttrib).
+ AWS DMS pode usar uma réplica autogerenciada do grupo de disponibilidade secundário como banco de dados de origem para replicação contínua (captura de dados de alteração ou CDC) a partir da versão 3.4.7. As réplicas de leitura do Cloud SQL Server Multi-AZ não são compatíveis. Se você usa versões anteriores do AWS DMS, certifique-se de usar a réplica principal do grupo de disponibilidade como banco de dados de origem para o CDC.

#### Failover para outros nós
<a name="CHAP_Source.SQLServer.AlwaysOn.Secondary.failover"></a>

Se você definir o atributo de conexão `ApplicationIntent` extra para seu endpoint`ReadOnly`, sua AWS DMS tarefa se conectará ao nó somente leitura com a maior prioridade de roteamento somente para leitura. Ele executa failover para outros nós somente leitura no grupo de disponibilidade quando o nó somente leitura de prioridade mais alta não está disponível. Se você não definir`ApplicationIntent`, sua AWS DMS tarefa se conectará somente ao nó primário (leitura/gravação) em seu grupo de disponibilidade.

## Configurações de endpoint ao usar o SQL Server como fonte para AWS DMS
<a name="CHAP_Source.SQLServer.ConnectionAttrib"></a>

É possível utilizar as configurações de endpoint para configurar a origem do SQL Server de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de origem usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--microsoft-sql-server-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o SQL Server como origem.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Source.SQLServer.html)

## Tipos de dados de origem no SQL Server
<a name="CHAP_Source.SQLServer.DataTypes"></a>

A migração de dados que usa o SQL Server como fonte de AWS DMS suporte à maioria dos tipos de dados do SQL Server. A tabela a seguir mostra os tipos de dados de origem do SQL Server que são suportados durante o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados.

Para obter informações sobre como visualizar o tipo de dados mapeado no destino, consulte a seção relativa ao endpoint de destino que você está usando.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  Tipos de dados do SQL Server  |  AWS DMS tipos de dados  | 
| --- | --- | 
|  BIGINT  |  INT8  | 
|  BIT  |  BOOLEAN  | 
|  DECIMAL  |  NUMERIC  | 
|  INT  |  INT4  | 
|  MONEY  |  NUMERIC  | 
|  NUMERIC (p,s)  |  NUMERIC   | 
|  SMALLINT  |  INT2  | 
|  SMALLMONEY  |  NUMERIC  | 
|  TINYINT  |  UINT1  | 
|  REAL  |  REAL4  | 
|  FLOAT  |  REAL8  | 
|  DATETIME  |  DATETIME  | 
|  DATETIME2 (SQL Server 2008 e versões posteriores)  |  DATETIME  | 
|  SMALLDATETIME  |  DATETIME  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  DATETIMEOFFSET  |  WSTRING  | 
|  CHAR  |  STRING  | 
|  VARCHAR  |  STRING  | 
|  VARCHAR (máximo)  |  CLOB TEXT Para usar esse tipo de dados com AWS DMS, você deve habilitar o uso de tipos de dados CLOB para uma tarefa específica. Para tabelas do SQL Server, AWS DMS atualiza as colunas LOB no destino até mesmo para instruções UPDATE que não alteram o valor da coluna LOB no SQL Server. Durante o CDC, AWS DMS suporta tipos de dados CLOB somente em tabelas que incluem uma chave primária.  | 
|  NCHAR  |  WSTRING  | 
|  NVARCHAR (tamanho)  |  WSTRING  | 
|  NVARCHAR (máximo)  |  NCLOB NTEXT Para usar esse tipo de dados com AWS DMS, você deve habilitar o uso de SupportLobs para uma tarefa específica. Para obter mais informações sobre como ativar a compatibilidade com o LOB, consulte [Configurando o suporte LOB para bancos de dados de origem em uma tarefa AWS DMS](CHAP_Tasks.LOBSupport.md).  Para tabelas do SQL Server, AWS DMS atualiza as colunas LOB no destino até mesmo para instruções UPDATE que não alteram o valor da coluna LOB no SQL Server. Durante o CDC, AWS DMS suporta tipos de dados CLOB somente em tabelas que incluem uma chave primária.  | 
|  BINARY  |  BYTES  | 
|  VARBINARY  |  BYTES  | 
|  VARBINARY (máximo)  |  BLOB IMAGE Para tabelas do SQL Server, AWS DMS atualiza as colunas LOB no destino até mesmo para instruções UPDATE que não alteram o valor da coluna LOB no SQL Server. Para usar esse tipo de dados com AWS DMS, você deve habilitar o uso de tipos de dados BLOB para uma tarefa específica. AWS DMS suporta tipos de dados BLOB somente em tabelas que incluem uma chave primária.  | 
|  TIMESTAMP  |  BYTES  | 
|  UNIQUEIDENTIFIER  |  STRING  | 
|  HIERARCHYID   |  Utilize o tipo HIERARCHYID ao replicar para um endpoint de destino do SQL Server. Utilize WSTRING (250) ao replicar para os demais endpoints de destino.  | 
|  XML  |  NCLOB Para tabelas do SQL Server, AWS DMS atualiza as colunas LOB no destino até mesmo para instruções UPDATE que não alteram o valor da coluna LOB no SQL Server. Para usar esse tipo de dados com AWS DMS, você deve habilitar o uso dos tipos de dados NCLOB para uma tarefa específica. Durante o CDC, AWS DMS suporta tipos de dados NCLOB somente em tabelas que incluem uma chave primária.  | 
|  GEOMETRY  |  Utilize o tipo GEOMETRY ao replicar para endpoints de destino compatíveis com esse tipo de dados. Use o tipo CLOB ao replicar para endpoints de destino que não são compatíveis com esse tipo de dados.  | 
|  GEOGRAPHY  |  Utilize o tipo GEOGRAPHY ao replicar para endpoints de destino compatíveis com esse tipo de dados. Use o tipo CLOB ao replicar para endpoints de destino que não são compatíveis com esse tipo de dados.  | 

AWS DMS não oferece suporte a tabelas que incluam campos com os seguintes tipos de dados. 
+ CURSOR
+ SQL\$1VARIANT
+ TABLE

**nota**  
A existência de suporte para um tipo de dados definido pelo usuário vai depender do tipo base utilizado. Por exemplo, um tipo de dados definido pelo usuário baseado no tipo DATETIME é tratado como o tipo de dados DATETIME.

# Capturar alterações de dados para replicação contínua no SQL Server
<a name="CHAP_Source.SQLServer.CDC"></a>

Este tópico descreve como configurar a replicação de CDC em uma origem do SQL Server.

**Topics**
+ [Capturar dados alterados no SQL Server autogerenciado on-premises ou no Amazon EC2](#CHAP_Source.SQLServer.CDC.Selfmanaged)
+ [Configurar a replicação contínua em uma instância de banco de dados SQL Server na nuvem](#CHAP_Source.SQLServer.Configuration)

## Capturar dados alterados no SQL Server autogerenciado on-premises ou no Amazon EC2
<a name="CHAP_Source.SQLServer.CDC.Selfmanaged"></a>

Para capturar as alterações de um banco de dados de origem do Microsoft SQL Server, verifique se o banco de dados está configurado para backups completos. Configure o banco de dados no modo de recuperação total ou no modo de registro em log em massa.

Para uma fonte autogerenciada do SQL Server, AWS DMS use o seguinte:

**Replicação de MS**  
Para capturar alterações em tabelas com chaves primárias. Você pode configurar isso automaticamente concedendo privilégios de administrador de sistema ao usuário do AWS DMS endpoint na instância de origem do SQL Server. Ou você pode seguir as etapas desta seção para preparar a fonte e usar um usuário que não tenha privilégios de administrador de sistema para o endpoint. AWS DMS 

**MS-CDC**  
Para capturar alterações em tabelas sem chaves primárias. Ative a MS-CDC no nível do banco de dados e em todas as tabelas individualmente.

Ao configurar um banco de dados SQL Server para replicação contínua (CDC), é possível seguir um destes procedimentos:
+ Configurar a replicação contínua utilizando o perfil sysadmin.
+ Configurar a replicação contínua para não utilizar o perfil sysadmin.

**nota**  
Você pode usar o seguinte script para encontrar todas as tabelas sem uma chave primária ou exclusiva:  

```
USE [DBname]
SELECT SCHEMA_NAME(schema_id) AS schema_name, name AS table_name
FROM sys.tables
WHERE OBJECTPROPERTY(object_id, 'TableHasPrimaryKey') = 0
        AND  OBJECTPROPERTY(object_id, 'TableHasUniqueCnst') = 0
ORDER BY schema_name, table_name;
```

### Configurar a replicação contínua em um SQL Server autogerenciado
<a name="CHAP_Source.SQLServer.CDC.MSCDC"></a>

Esta seção contém informações sobre como configurar a replicação contínua em um servidor SQL autogerenciado com ou sem a utilização do perfil sysadmin.

**Topics**
+ [Configurar a replicação contínua em um SQL Server autogerenciado: utilizando o perfil sysadmin](#CHAP_Source.SQLServer.CDC.MSCDC.Sysadmin)
+ [Configurar a replicação contínua em um SQL Server autônomo: sem o perfil sysadmin](#CHAP_SupportScripts.SQLServer.standalone)
+ [Configurar a replicação contínua em um SQL Server em um ambiente de grupo de disponibilidade: sem o perfil sysadmin](#CHAP_SupportScripts.SQLServer.ag)

#### Configurar a replicação contínua em um SQL Server autogerenciado: utilizando o perfil sysadmin
<a name="CHAP_Source.SQLServer.CDC.MSCDC.Sysadmin"></a>

AWS DMS a replicação contínua para o SQL Server usa a replicação nativa do SQL Server para tabelas com chaves primárias e a captura de dados alterados (CDC) para tabelas sem chaves primárias.

Antes de configurar a replicação contínua, consulte [Utilizar replicação contínua (CDC) a partir de uma origem do SQL Server](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.Prerequisites). 

Para tabelas com chaves primárias, geralmente é AWS DMS possível configurar os artefatos necessários na fonte. No entanto, para instâncias de origem do SQL Server que são autogerenciadas, configure primeiro a distribuição do SQL Server manualmente. Depois de fazer isso, os usuários de AWS DMS origem com permissão de administrador de sistema podem criar automaticamente a publicação para tabelas com chaves primárias.

Para verificar se a distribuição já foi configurada, execute o comando a seguir.

```
sp_get_distributor
```

Se o resultado for `NULL` para a distribuição de colunas, a distribuição não estará configurada. É possível utilizar o procedimento a seguir para configurar a distribuição.<a name="CHAP_Source.SQLServer.CDC.MSCDC.Setup"></a>

**Como configurar a distribuição**

1. Conecte-se ao banco de dados de origem do SQL Server utilizando a ferramenta SQL Server Management Studio (SSMS).

1. Abra o menu de contexto (clique com o botão direito do mouse) da pasta **Replicação** e escolha **Configurar distribuição**. O assistente de configuração da distribuição é exibido. 

1. Siga o assistente para inserir os valores padrão e criar a distribuição.<a name="CHAP_Source.SQLServer.CDC.MSCDC.Setup.CDC"></a>

**Como configurar a CDC**

AWS DMS a versão 3.4.7 e superior pode configurar o MS CDC para seu banco de dados e todas as suas tabelas automaticamente se você não estiver usando uma réplica somente para leitura. Para utilizar esse recurso, defina o ECA `SetUpMsCdcForTables` como verdadeiro. Para obter informações sobre ECAs, consulte[Configurações de endpoint](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.ConnectionAttrib).

Para versões AWS DMS anteriores à 3.4.7 ou para uma réplica somente leitura como fonte, execute as seguintes etapas:

1. Para tabelas sem chaves primárias, configure a MS-CDC para o banco de dados. Para fazer isso, utilize uma conta que tenha o perfil sysadmin atribuído a ela e execute o comando a seguir.

   ```
   use [DBname]
   EXEC sys.sp_cdc_enable_db
   ```

1. Configure a MS-CDC para cada uma das tabelas de origem. Para cada tabela com chaves exclusivas, mas sem chave primária, execute a consulta a seguir para configurar a MS-CDC.

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @index_name = N'unique_index_name',
   @role_name = NULL,
   @supports_net_changes = 1
   GO
   ```

1. Para cada tabela sem chave primária nem chaves exclusivas, execute a consulta a seguir para configurar a MS-CDC.

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @role_name = NULL
   GO
   ```

Para obter mais informações sobre como configurar a MS-CDC para tabelas específicas, consulte a [Documentação do SQL Server](https://msdn.microsoft.com/en-us/library/cc627369.aspx). 

#### Configurar a replicação contínua em um SQL Server autônomo: sem o perfil sysadmin
<a name="CHAP_SupportScripts.SQLServer.standalone"></a>

Esta seção descreve como configurar a replicação contínua para uma origem de banco de dados SQL Server autônomo que não exige que a conta do usuário tenha privilégios de sysadmin.

**nota**  
Depois de executar as etapas desta seção, o usuário do DMS que não for administrador de sistema terá permissões para fazer o seguinte:  
Ler as alterações do arquivo de log de transações on-line.
Acessar o disco para ler as alterações dos arquivos de backup do log de transações.
Adicionar ou alterar a publicação que o DMS usa.
Adicionar artigos à publicação.

1. Configure o Microsoft SQL Server para replicação conforme descrito em [Capturar alterações de dados para replicação contínua no SQL Server](#CHAP_Source.SQLServer.CDC).

1. Ative MS-REPLICATION no banco de dados de origem. Isso pode ser feito manualmente ou executando a tarefa uma vez como usuário sysadmin.

1. Crie o esquema `awsdms` no banco de dados de origem utilizando o seguinte script:

   ```
   use master
   go
   create schema awsdms
   go
   
   
   -- Create the table valued function [awsdms].[split_partition_list] on the Master database, as follows:
   USE [master]
   GO
   
   set ansi_nulls on
   go
   
   set quoted_identifier on
   go
   
   if (object_id('[awsdms].[split_partition_list]','TF')) is not null
   
   drop function [awsdms].[split_partition_list];
   
   go
   
   create function [awsdms].[split_partition_list]
   
   (
   
   @plist varchar(8000), --A delimited list of partitions
   
   @dlm nvarchar(1) --Delimiting character
   
   )
   
   returns @partitionsTable table --Table holding the BIGINT values of the string fragments
   
   (
   
   pid bigint primary key
   
   )   
   
   as
   
   begin
   
   declare @partition_id bigint;
   
   declare @dlm_pos integer;
   
   declare @dlm_len integer;
   
   set @dlm_len = len(@dlm);
   
   while (charindex(@dlm,@plist)>0)
   
   begin
   
   set @dlm_pos = charindex(@dlm,@plist);
   
   set @partition_id = cast( ltrim(rtrim(substring(@plist,1,@dlm_pos-1))) as bigint);
   
   insert into @partitionsTable (pid) values (@partition_id)
   
   set @plist = substring(@plist,@dlm_pos+@dlm_len,len(@plist));
   
   end
   
   set @partition_id = cast (ltrim(rtrim(@plist)) as bigint);
   
   insert into @partitionsTable (pid) values ( @partition_id );
   
   return
   
   end
   
   GO
   ```

1. Crie o procedimento `[awsdms].[rtm_dump_dblog]` no banco de dados mestre utilizando o seguinte script:

   ```
   use [MASTER]
   
   go
   
   if (object_id('[awsdms].[rtm_dump_dblog]','P')) is not null drop procedure [awsdms].[rtm_dump_dblog];
   go
   
   
   set ansi_nulls on
   go
   
   set quoted_identifier on
   GO
   
   
   
   CREATE procedure [awsdms].[rtm_dump_dblog]
   
   (
   
   @start_lsn varchar(32),
   
   @seqno integer,
   
   @filename varchar(260),
   
   @partition_list varchar(8000), -- A comma delimited list: P1,P2,... Pn
   
   @programmed_filtering integer,
   
   @minPartition bigint,
   
   @maxPartition bigint
   
   )
   
   as begin
   
   declare @start_lsn_cmp varchar(32); -- Stands against the GT comparator
   
   SET NOCOUNT ON -- – Disable "rows affected display"
   
   set @start_lsn_cmp = @start_lsn;
   
   if (@start_lsn_cmp) is null
   
   set @start_lsn_cmp = '00000000:00000000:0000';
   
   if (@partition_list is null)
   
   begin
   
   RAISERROR ('Null partition list waspassed',16,1);
   
   return
   
   end
   
   if (@start_lsn) is not null
   
   set @start_lsn = '0x'+@start_lsn;
   
   if (@programmed_filtering=0)
   
   
   
   SELECT
   
   [Current LSN],
   
   [operation],
   
   [Context],
   
   [Transaction ID],
   
   [Transaction Name],
   
   [Begin Time],
   
   [End Time],
   
   [Flag Bits],
   
   [PartitionID],
   
   [Page ID],
   
   [Slot ID],
   
   [RowLog Contents 0],
   
   [Log Record],
   
   [RowLog Contents 1]
   
   FROM
   
   fn_dump_dblog (
   
   @start_lsn, NULL, N'DISK', @seqno, @filename,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default)
   
   where [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS
   
   and
   
   (
   
   ( [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') )
   
   or
   
   ( [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW')
   
   and
   
   ( ( [context] in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX' and (datalength([RowLog Contents 0]) in (0,1))))
   
   and [PartitionID] in ( select * from master.awsdms.split_partition_list (@partition_list,','))
   
   )
   
   or
   
   ([operation] = 'LOP_HOBT_DDL')
   
   )
   
   
   else
   
   
   SELECT
   
   [Current LSN],
   
   [operation],
   
   [Context],
   
   [Transaction ID],
   
   [Transaction Name],
   
   [Begin Time],
   
   [End Time],
   
   [Flag Bits],
   
   [PartitionID],
   
   [Page ID],
   
   [Slot ID],
   
   [RowLog Contents 0],
   
   [Log Record],
   
   [RowLog Contents 1] -- After Image
   
   FROM
   
   fn_dump_dblog (
   
   @start_lsn, NULL, N'DISK', @seqno, @filename,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default)
   
   where [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS
   
   and
   
   (
   
   ( [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') )
   
   or
   
   ( [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW')
   
   and
   
   ( ( [context] in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX' and (datalength([RowLog Contents 0]) in (0,1))))
   
   and ([PartitionID] is not null) and ([PartitionID] >= @minPartition and [PartitionID]<=@maxPartition)
   
   )
   
   or
   
   ([operation] = 'LOP_HOBT_DDL')
   
   )
   
   
   
   SET NOCOUNT OFF -- Re-enable "rows affected display"
   
   end
   
   GO
   ```

1. Crie o certificado no banco de dados mestre utilizando o seguinte script:

   ```
   Use [master]
   Go
   
   CREATE CERTIFICATE [awsdms_rtm_dump_dblog_cert] ENCRYPTION BY PASSWORD = N'@5trongpassword'
   
   WITH SUBJECT = N'Certificate for FN_DUMP_DBLOG Permissions';
   ```

1. Crie o login no certificado utilizando o seguinte script: 

   ```
   Use [master]
   Go
   
   CREATE LOGIN awsdms_rtm_dump_dblog_login FROM CERTIFICATE [awsdms_rtm_dump_dblog_cert];
   ```

1. Adicione o login ao perfil do servidor sysadmin utilizando o seguinte script:

   ```
   ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_dump_dblog_login];
   ```

1. Adicione a assinatura ao [master].[awsdms].[rtm\$1dump\$1dblog] utilizando o certificado e o seguinte script: 

   ```
   Use [master]
   GO
   ADD SIGNATURE
   TO [master].[awsdms].[rtm_dump_dblog] BY CERTIFICATE [awsdms_rtm_dump_dblog_cert] WITH PASSWORD = '@5trongpassword';
   ```
**nota**  
Se você recriar o procedimento armazenado, será necessário adicionar a assinatura novamente.

1. Crie o [awsdms].[rtm\$1position\$11st\$1timestamp] no banco de dados principal usando o seguinte script:

   ```
   use [master]
       if object_id('[awsdms].[rtm_position_1st_timestamp]','P') is not null
       DROP PROCEDURE [awsdms].[rtm_position_1st_timestamp];
       go
       create procedure [awsdms].[rtm_position_1st_timestamp]
       (
       @dbname                sysname,      -- Database name
       @seqno                 integer,      -- Backup set sequence/position number within file
       @filename              varchar(260), -- The backup filename
       @1stTimeStamp          varchar(40)   -- The timestamp to position by
       ) 
       as begin
   
       SET NOCOUNT ON       -- Disable "rows affected display"
   
       declare @firstMatching table
       (
       cLsn varchar(32),
       bTim datetime
       )
   
       declare @sql nvarchar(4000)
       declare @nl                       char(2)
       declare @tb                       char(2)
       declare @fnameVar                 nvarchar(254) = 'NULL'
   
       set @nl  = char(10); -- New line
       set @tb  = char(9)   -- Tab separator
   
       if (@filename is not null)
       set @fnameVar = ''''+@filename +''''
   
       set @sql='use ['+@dbname+'];'+@nl+
       'select top 1 [Current LSN],[Begin Time]'+@nl+
       'FROM fn_dump_dblog (NULL, NULL, NULL, '+ cast(@seqno as varchar(10))+','+ @fnameVar+','+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default)'+@nl+
       'where operation=''LOP_BEGIN_XACT''' +@nl+
       'and [Begin Time]>= cast('+''''+@1stTimeStamp+''''+' as datetime)'+@nl
   
       --print @sql
       delete from  @firstMatching 
       insert into @firstMatching  exec sp_executesql @sql    -- Get them all
   
       select top 1 cLsn as [matching LSN],convert(varchar,bTim,121) as [matching Timestamp] from @firstMatching;
   
       SET NOCOUNT OFF      -- Re-enable "rows affected display"
   
       end
       GO
   ```

1. Crie o certificado no banco de dados mestre utilizando o seguinte script:

   ```
   Use [master]
   Go
   CREATE CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert]
   ENCRYPTION BY PASSWORD = '@5trongpassword'
   WITH SUBJECT = N'Certificate for FN_POSITION_1st_TIMESTAMP Permissions';
   ```

1. Crie o login no certificado utilizando o seguinte script:

   ```
   Use [master]
   Go
   CREATE LOGIN awsdms_rtm_position_1st_timestamp_login FROM CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert];
   ```

1. Adicione o login ao perfil sysadmin utilizando o seguinte script:

   ```
   ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_position_1st_timestamp_login];
   ```

1. Adicione a assinatura ao [master].[awsdms].[rtm\$1position\$11st\$1timestamp] utilizando o certificado e o seguinte script:

   ```
   Use [master]
       GO
       ADD SIGNATURE
       TO [master].[awsdms].[rtm_position_1st_timestamp]
       BY CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert]
       WITH PASSWORD = '@5trongpassword';
   ```

1. Conceda ao usuário do DMS acesso de execução ao novo procedimento armazenado usando o seguinte script:

   ```
   use master
   go
   GRANT execute on [awsdms].[rtm_position_1st_timestamp] to dms_user;
   ```

1. Crie um usuário com as seguintes permissões e perfis em cada um dos seguintes bancos de dados:
**nota**  
Crie a conta de usuário dmsnosysadmin com o mesmo SID em cada réplica. A consulta SQL a seguir pode ajudar a verificar o valor do SID da conta dmsnosysadmin em cada réplica. Para obter mais informações sobre como criar um usuário, consulte [CREATE USER (Transact-SQL) ](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-user-transact-sql) na [Documentação do Microsoft SQL Server](https://learn.microsoft.com/en-us/sql/). Para obter mais informações sobre a criação de contas de usuário do SQL para o banco de dados SQL do Azure, consulte [Replicação geográfica ativa](https://learn.microsoft.com/en-us/azure/azure-sql/database/active-geo-replication-overview).

   ```
   use master
   go
   grant select on sys.fn_dblog to [DMS_user]
   grant view any definition to [DMS_user]
   grant view server state to [DMS_user]--(should be granted to the login).
   grant execute on sp_repldone to [DMS_user]
   grant execute on sp_replincrementlsn to [DMS_user]
   grant execute on sp_addpublication to [DMS_user]
   grant execute on sp_addarticle to [DMS_user]
   grant execute on sp_articlefilter to [DMS_user]
   grant select on [awsdms].[split_partition_list] to [DMS_user]
   grant execute on [awsdms].[rtm_dump_dblog] to [DMS_user]
   ```

   ```
   use msdb
   go
   grant select on msdb.dbo.backupset to self_managed_user
   grant select on msdb.dbo.backupmediafamily to self_managed_user
   grant select on msdb.dbo.backupfile to self_managed_user
   ```

   Execute o seguinte script no banco de dados de origem:

   ```
   use Source_DB
       Go
       EXEC sp_addrolemember N'db_owner', N'DMS_user'
   ```

1. Por fim, adicione um atributo de conexão extra (ECA) ao endpoint do SQL Server de origem:

   ```
   enableNonSysadminWrapper=true;
   ```

#### Configurar a replicação contínua em um SQL Server em um ambiente de grupo de disponibilidade: sem o perfil sysadmin
<a name="CHAP_SupportScripts.SQLServer.ag"></a>

Esta seção descreve como configurar a replicação contínua para uma origem de banco de dados SQL Server em um ambiente de grupo de disponibilidade que não exige que a conta do usuário tenha privilégios de sysadmin.

**nota**  
Depois de executar as etapas desta seção, o usuário do DMS que não for administrador de sistema terá permissões para fazer o seguinte:  
Ler as alterações do arquivo de log de transações on-line.
Acessar o disco para ler as alterações dos arquivos de backup do log de transações.
Adicionar ou alterar a publicação que o DMS usa.
Adicionar artigos à publicação.

**Como configurar a replicação contínua sem utilizar o usuário sysadmin em um ambiente de grupo de disponibilidade**

1. Configure o Microsoft SQL Server para replicação conforme descrito em [Capturar alterações de dados para replicação contínua no SQL Server](#CHAP_Source.SQLServer.CDC).

1. Ative MS-REPLICATION no banco de dados de origem. Isso pode ser feito manualmente ou executando a tarefa uma vez utilizando um usuário sysadmin.
**nota**  
Configure o distribuidor MS-REPLICATION como local ou de uma forma que permita acesso a usuários que não sejam administradores de sistema por meio do servidor vinculado associado.

1. Se a opção do endpoint **Usar exclusivamente sp\$1repldone em uma única tarefa** estiver ativada, interrompa o trabalho do MS-REPLICATION Log Reader.

1. Execute as seguintes etapas em cada réplica:

   1. Crie o esquema `[awsdms]`[awsdms] no banco de dados mestre:

      ```
      CREATE SCHEMA [awsdms]
      ```

   1. Crie o perfil com valor de tabela `[awsdms].[split_partition_list]` no banco de dados mestre:

      ```
      USE [master]
      GO
      
      SET ansi_nulls on
      GO
        
      SET quoted_identifier on
      GO
      
      IF (object_id('[awsdms].[split_partition_list]','TF')) is not null
        DROP FUNCTION [awsdms].[split_partition_list];
      GO
      
      CREATE FUNCTION [awsdms].[split_partition_list] 
      ( 
        @plist varchar(8000),    --A delimited list of partitions    
        @dlm nvarchar(1)    --Delimiting character
      ) 
      RETURNS @partitionsTable table --Table holding the BIGINT values of the string fragments
      (
        pid bigint primary key
      ) 
      AS 
      BEGIN
        DECLARE @partition_id bigint;
        DECLARE @dlm_pos integer;
        DECLARE @dlm_len integer;  
        SET @dlm_len = len(@dlm);
        WHILE (charindex(@dlm,@plist)>0)
        BEGIN 
          SET @dlm_pos = charindex(@dlm,@plist);
          SET @partition_id = cast( ltrim(rtrim(substring(@plist,1,@dlm_pos-1))) as bigint);
          INSERT into @partitionsTable (pid) values (@partition_id)
          SET @plist = substring(@plist,@dlm_pos+@dlm_len,len(@plist));
        END 
        SET @partition_id = cast (ltrim(rtrim(@plist)) as bigint);
        INSERT into @partitionsTable (pid) values (  @partition_id  );
        RETURN
      END
      GO
      ```

   1. Crie o procedimento `[awsdms].[rtm_dump_dblog]` no banco de dados mestre:

      ```
      USE [MASTER] 
      GO
      
      IF (object_id('[awsdms].[rtm_dump_dblog]','P')) is not null
        DROP PROCEDURE [awsdms].[rtm_dump_dblog]; 
      GO
      
      SET ansi_nulls on
      GO 
      
      SET quoted_identifier on 
      GO
                                          
      CREATE PROCEDURE [awsdms].[rtm_dump_dblog]
      (
        @start_lsn            varchar(32),
        @seqno                integer,
        @filename             varchar(260),
        @partition_list       varchar(8000), -- A comma delimited list: P1,P2,... Pn
        @programmed_filtering integer,
        @minPartition         bigint,
        @maxPartition         bigint
      ) 
      AS 
      BEGIN
      
        DECLARE @start_lsn_cmp varchar(32); -- Stands against the GT comparator
      
        SET NOCOUNT ON  -- Disable "rows affected display"
      
        SET @start_lsn_cmp = @start_lsn;
        IF (@start_lsn_cmp) is null
          SET @start_lsn_cmp = '00000000:00000000:0000';
      
        IF (@partition_list is null)
          BEGIN
            RAISERROR ('Null partition list was passed',16,1);
            return
            --set @partition_list = '0,';    -- A dummy which is never matched
          END
      
        IF (@start_lsn) is not null
          SET @start_lsn = '0x'+@start_lsn;
      
        IF (@programmed_filtering=0)
          SELECT
            [Current LSN],
            [operation],
            [Context],
            [Transaction ID],
            [Transaction Name],
            [Begin Time],
            [End Time],
            [Flag Bits],
            [PartitionID],
            [Page ID],
            [Slot ID],
            [RowLog Contents 0],
            [Log Record],
            [RowLog Contents 1] -- After Image
          FROM
            fn_dump_dblog (
              @start_lsn, NULL, N'DISK', @seqno, @filename,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default)
          WHERE 
            [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS -- This aims for implementing FN_DBLOG based on GT comparator.
            AND
            (
              (  [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') )
              OR
              (  [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW')
                AND
                ( ( [context]   in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX') )
                AND       
                [PartitionID] in ( select * from master.awsdms.split_partition_list (@partition_list,','))
              )
            OR
            ([operation] = 'LOP_HOBT_DDL')
          )
          ELSE
            SELECT
              [Current LSN],
              [operation],
              [Context],
              [Transaction ID],
              [Transaction Name],
              [Begin Time],
              [End Time],
              [Flag Bits],
              [PartitionID],
              [Page ID],
              [Slot ID],
              [RowLog Contents 0],
              [Log Record],
              [RowLog Contents 1] -- After Image
            FROM
              fn_dump_dblog (
                @start_lsn, NULL, N'DISK', @seqno, @filename,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default)
            WHERE [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS -- This aims for implementing FN_DBLOG based on GT comparator.
            AND
            (
              (  [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') )
              OR
              (  [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW')
                AND
                ( ( [context]   in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX') )
                AND ([PartitionID] is not null) and ([PartitionID] >= @minPartition and [PartitionID]<=@maxPartition)
              )
              OR
              ([operation] = 'LOP_HOBT_DDL')
            )
            SET NOCOUNT OFF -- Re-enable "rows affected display"
      END
      GO
      ```

   1. Crie um certificado no banco de dados mestre:

      ```
      USE [master]
      GO
      CREATE CERTIFICATE [awsdms_rtm_dump_dblog_cert]
        ENCRYPTION BY PASSWORD = N'@hardpassword1'
        WITH SUBJECT = N'Certificate for FN_DUMP_DBLOG Permissions'
      ```

   1. Crie um login no certificado:

      ```
      USE [master]
      GO
      CREATE LOGIN awsdms_rtm_dump_dblog_login FROM CERTIFICATE
        [awsdms_rtm_dump_dblog_cert];
      ```

   1. Adicione o login ao perfil do servidor sysadmin:

      ```
      ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_dump_dblog_login];
      ```

   1. Adicione a assinatura ao procedimento [master].[awsdms].[rtm\$1dump\$1dblog] utilizando o certificado:

      ```
      USE [master]
      GO
      
      ADD SIGNATURE
        TO [master].[awsdms].[rtm_dump_dblog]
        BY CERTIFICATE [awsdms_rtm_dump_dblog_cert]
        WITH PASSWORD = '@hardpassword1';
      ```
**nota**  
Se você recriar o procedimento armazenado, será necessário adicionar a assinatura novamente.

   1. Crie o procedimento `[awsdms].[rtm_position_1st_timestamp]` no banco de dados mestre:

      ```
      USE [master]
      IF object_id('[awsdms].[rtm_position_1st_timestamp]','P') is not null
        DROP PROCEDURE [awsdms].[rtm_position_1st_timestamp];
      GO
      CREATE PROCEDURE [awsdms].[rtm_position_1st_timestamp]
      (
        @dbname                sysname,      -- Database name
        @seqno                 integer,      -- Backup set sequence/position number within file
        @filename              varchar(260), -- The backup filename
        @1stTimeStamp          varchar(40)   -- The timestamp to position by
      ) 
      AS 
      BEGIN
        SET NOCOUNT ON       -- Disable "rows affected display"
      
        DECLARE @firstMatching table
        (
          cLsn varchar(32),
          bTim datetime
        )
        DECLARE @sql nvarchar(4000)
        DECLARE @nl                       char(2)
        DECLARE @tb                       char(2)
        DECLARE @fnameVar                 sysname = 'NULL'
      
        SET @nl  = char(10); -- New line
        SET @tb  = char(9)   -- Tab separator
      
        IF (@filename is not null)
          SET @fnameVar = ''''+@filename +''''
        SET @filename = ''''+@filename +''''
        SET @sql='use ['+@dbname+'];'+@nl+
          'SELECT TOP 1 [Current LSN],[Begin Time]'+@nl+
          'FROM fn_dump_dblog (NULL, NULL, NULL, '+ cast(@seqno as varchar(10))+','+ @filename +','+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default)'+@nl+
          'WHERE operation=''LOP_BEGIN_XACT''' +@nl+
          'AND [Begin Time]>= cast('+''''+@1stTimeStamp+''''+' as datetime)'+@nl
      
          --print @sql
          DELETE FROM @firstMatching 
          INSERT INTO @firstMatching  exec sp_executesql @sql    -- Get them all
          SELECT TOP 1 cLsn as [matching LSN],convert(varchar,bTim,121) AS[matching Timestamp] FROM @firstMatching;
      
          SET NOCOUNT OFF      -- Re-enable "rows affected display"
      
      END
      GO
      ```

   1. Crie um certificado no banco de dados mestre:

      ```
      USE [master]
      GO
      CREATE CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert]
        ENCRYPTION BY PASSWORD = N'@hardpassword1'
        WITH SUBJECT = N'Certificate for FN_POSITION_1st_TIMESTAMP Permissions';
      ```

   1. Crie um login no certificado:

      ```
      USE [master]
      GO
      CREATE LOGIN awsdms_rtm_position_1st_timestamp_login FROM CERTIFICATE
        [awsdms_rtm_position_1st_timestamp_cert];
      ```

   1. Adicione o login ao perfil do servidor sysadmin:

      ```
      ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_position_1st_timestamp_login];
      ```

   1. Adicione a assinatura ao procedimento `[master].[awsdms].[rtm_position_1st_timestamp]` utilizando o certificado:

      ```
      USE [master]
      GO
      ADD SIGNATURE
        TO [master].[awsdms].[rtm_position_1st_timestamp]
        BY CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert]
        WITH PASSWORD = '@hardpassword1';
      ```
**nota**  
Se você recriar o procedimento armazenado, será necessário adicionar a assinatura novamente.

   1. Crie um usuário com o seguinte permissions/roles em cada um dos seguintes bancos de dados:
**nota**  
Crie a conta de usuário dmsnosysadmin com o mesmo SID em cada réplica. A consulta SQL a seguir pode ajudar a verificar o valor do SID da conta dmsnosysadmin em cada réplica. Para obter mais informações sobre como criar um usuário, consulte [CREATE USER (Transact-SQL) ](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-user-transact-sql) na [Documentação do Microsoft SQL Server](https://learn.microsoft.com/en-us/sql/). Para obter mais informações sobre a criação de contas de usuário do SQL para o banco de dados SQL do Azure, consulte [Replicação geográfica ativa](https://learn.microsoft.com/en-us/azure/azure-sql/database/active-geo-replication-overview).

      ```
      SELECT @@servername servername, name, sid, create_date, modify_date
        FROM sys.server_principals
        WHERE name = 'dmsnosysadmin';
      ```

   1. Conceda permissões no banco de dados mestre em cada réplica:

      ```
      USE master
      GO 
      
      GRANT select on sys.fn_dblog to dmsnosysadmin;
      GRANT view any definition to dmsnosysadmin;
      GRANT view server state to dmsnosysadmin -- (should be granted to the login).
      GRANT execute on sp_repldone to dmsnosysadmin;
      GRANT execute on sp_replincrementlsn to dmsnosysadmin;
      GRANT execute on sp_addpublication to dmsnosysadmin;
      GRANT execute on sp_addarticle to dmsnosysadmin;
      GRANT execute on sp_articlefilter to dmsnosysadmin;
      GRANT select on [awsdms].[split_partition_list] to dmsnosysadmin;
      GRANT execute on [awsdms].[rtm_dump_dblog] to dmsnosysadmin;
      GRANT execute on [awsdms].[rtm_position_1st_timestamp] to dmsnosysadmin;
      ```

   1. Conceda permissões no banco de dados msdb em cada réplica:

      ```
      USE msdb
      GO
      GRANT select on msdb.dbo.backupset TO self_managed_user
      GRANT select on msdb.dbo.backupmediafamily TO self_managed_user
      GRANT select on msdb.dbo.backupfile TO self_managed_user
      ```

   1. Adicione o perfil `db_owner` ao `dmsnosysadmin` no banco de dados de origem. Como o banco de dados é sincronizado, é possível adicionar o perfil somente na réplica primária.

      ```
      use <source DB>
      GO 
      EXEC sp_addrolemember N'db_owner', N'dmsnosysadmin'
      ```

## Configurar a replicação contínua em uma instância de banco de dados SQL Server na nuvem
<a name="CHAP_Source.SQLServer.Configuration"></a>

Esta seção descreve como configurar a CDC em uma instância de banco de dados SQL Server hospedada na nuvem. Uma instância do SQL Server hospedada na nuvem é uma instância em execução no Amazon RDS para SQL Server, uma instância gerenciada do Azure SQL ou qualquer outra instância gerenciada do SQL Server na nuvem. Para obter informações sobre as limitações da replicação contínua para cada tipo de banco de dados, consulte [Limitações no uso do SQL Server como fonte para AWS DMS](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.Limitations). 

Antes de configurar a replicação contínua, consulte [Utilizar replicação contínua (CDC) a partir de uma origem do SQL Server](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.Prerequisites). 

Ao contrário das origens autogerenciadas do SQL Server, o Amazon RDS para SQL Server não é compatível com a MS-Replication. Portanto, AWS DMS precisa usar o MS-CDC para tabelas com ou sem chaves primárias.

O Amazon RDS não concede privilégios de administrador de sistema para definir artefatos de replicação AWS DMS usados para alterações contínuas em uma instância de origem do SQL Server. Ative a MS-CDC na instância do Amazon RDS (utilizando privilégios de usuário mestre) como no procedimento a seguir.

**Para ativar a MS-CDC em uma instância de banco de dados do SQL Server na nuvem**

1. Execute as consultas a seguir no nível do banco de dados.

   Para uma instância de banco de dados RDS para SQL Server, utilize essa consulta.

   ```
   exec msdb.dbo.rds_cdc_enable_db 'DB_name'
   ```

   Para uma instância de banco de dados gerenciada do Azure SQL, utilize essa consulta.

   ```
   USE DB_name 
   GO 
   EXEC sys.sp_cdc_enable_db 
   GO
   ```

1. Para cada tabela com uma chave primária, execute a consulta a seguir para ativar a MS-CDC.

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @role_name = NULL,
   @supports_net_changes = 1
   GO
   ```

   Para cada tabela com chaves exclusivas, mas sem chave primária, execute a consulta a seguir para ativar a MS-CDC.

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @index_name = N'unique_index_name',
   @role_name = NULL,
   @supports_net_changes = 1
   GO
   ```

    Para cada tabela sem chave primária e sem chaves exclusivas, execute a consulta a seguir para habilitar a MS-CDC.

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @role_name = NULL
   GO
   ```

1. Defina o período de retenção:
   + Para instâncias do RDS para SQL Server que estão sendo replicadas usando o DMS versão 3.5.3 e superiores, garanta que o período de retenção esteja definido com o valor padrão de 5 segundos. Se você estiver atualizando ou migrando do DMS 3.5.2 e versões anteriores para o DMS 3.5.3 e versões posteriores, altere o valor do intervalo de sondagem depois que as tarefas estiverem em execução na instância nova ou atualizada. O script a seguir define o período de retenção como 5 segundos:

     ```
     use dbname
     EXEC sys.sp_cdc_change_job @job_type = 'capture' ,@pollinginterval = 5
     exec sp_cdc_stop_job 'capture'
     exec sp_cdc_start_job 'capture'
     ```
   + O parâmetro `@pollinginterval` é medido em segundos com um valor recomendado definido como 86399. Isso significa que o log de transações retém as alterações por 86.399 segundos (um dia) quando `@pollinginterval = 86399`. O procedimento `exec sp_cdc_start_job 'capture'` inicia as configurações.
**nota**  
Com algumas versões do SQL Server, se o valor de `pollinginterval` for definido como mais de 3599 segundos, o valor será redefinido para os cinco segundos padrão. Quando isso acontece, as entradas do T-Log são removidas antes que AWS DMS você possa lê-las. Para determinar quais versões do SQL Server são afetadas por esse problema conhecido, consulte [este artigo da Microsoft KB](https://support.microsoft.com/en-us/topic/kb4459220-fix-incorrect-results-occur-when-you-convert-pollinginterval-parameter-from-seconds-to-hours-in-sys-sp-cdc-scan-in-sql-server-dac8aefe-b60b-7745-f987-582dda2cfa78).

     Se estiver utilizando o Amazon RDS com multi-AZ, defina também o secundário para ter os valores corretos em caso de failover.

     ```
     exec rdsadmin..rds_set_configuration 'cdc_capture_pollinginterval' , <5 or preferred value>
     ```

**Para manter o período de retenção quando uma tarefa de AWS DMS replicação é interrompida por mais de uma hora**
**nota**  
As etapas a seguir não são necessárias para replicação de uma origem do RDS para SQL Server usando o DMS 3.5.3 e superiores.

1. Interrompa o trabalho que está truncando os logs de transações utilizando este comando: 

   ```
   exec sp_cdc_stop_job 'capture'
   ```

1. Encontre sua tarefa no AWS DMS console e continue a tarefa.

1. Escolha a guia **Monitoramento** e marque a métrica `CDCLatencySource`. 

1. Quando a métrica `CDCLatencySource` for igual a 0 (zero) e permanecer nesse valor, reinicie o trabalho truncando os logs de transações com o seguinte comando:

   ```
   exec sp_cdc_start_job 'capture'
   ```

Lembre-se de iniciar o trabalho que trunca os logs de transações do SQL Server. Caso contrário, o armazenamento na instância do SQL Server poderá ficar cheio.

### Configurações recomendadas ao usar o RDS para SQL Server como fonte para AWS DMS
<a name="CHAP_Source.SQLServer.Configuration.Settings"></a>

#### Para AWS DMS 3.5.3 e superior
<a name="CHAP_Source.SQLServer.Configuration.Settings.353"></a>

**nota**  
A versão inicial do recurso de backup de log do RDS para SQL Server está habilitada por padrão para endpoints que você criou ou modificou após o lançamento do DMS versão 3.5.3. Para usar esse recurso para endpoints existentes, modifique o endpoint sem fazer nenhuma alteração.

AWS DMS a versão 3.5.3 introduz suporte para leitura de backups de log. O DMS depende principalmente da leitura dos logs de transações ativos para replicar eventos. Se o backup de uma transação for feito antes que o DMS possa lê-la no log ativo, a tarefa acessará os backups do RDS sob demanda e lerá os logs de backup subsequentes até alcançar o log de transações ativo. Para garantir que o DMS tenha acesso aos backups de log, defina o período de retenção de backup automatizado do RDS para pelo menos um dia. Para ter informações sobre como configurar o período de retenção de backup automatizado, consulte [Período de retenção de backup](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ManagingAutomatedBackups.html#USER_WorkingWithAutomatedBackups.BackupRetention) no *Guia do usuário do Amazon RDS*.

Uma tarefa do DMS que acessa os backups de log utiliza o armazenamento na instância do RDS. Observe que a tarefa só acessa os backups de log necessários para a replicação. O Amazon RDS remove esses backups baixados em algumas horas. Essa remoção não afeta os backups do Amazon RDS retidos no Amazon S3 ou a funcionalidade `RESTORE DATABASE` do Amazon RDS. É recomendável alocar armazenamento adicional em sua origem do RDS para SQL Server, se pretender replicar usando o DMS. Uma forma de estimar a quantidade de armazenamento necessária é identificar o backup a partir do qual o DMS iniciará ou retomará a replicação e somar os tamanhos dos arquivos de todos os backups subsequentes usando a função de metadados `tlog backup` do RDS. Para ter mais informações sobre a função `tlog backup`, consulte [Listar os backups de logs de transações disponíveis](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER.SQLServer.AddlFeat.TransactionLogAccess.html#USER.SQLServer.AddlFeat.TransactionLogAccess.Listing) no *Guia do usuário do Amazon RDS*. 

Como alternativa, você pode optar por ativar o escalonamento automático de armazenamento e/ou acionar o escalonamento de armazenamento com base na métrica CloudWatch `FreeStorageSpace` da sua instância do Amazon RDS.

É altamente recomendável que você não inicie ou retome a partir de um ponto muito distante nos backups do log de transações, pois isso pode fazer com que o armazenamento em sua instância do SQL Server fique cheio. Nesses casos, é aconselhável iniciar uma carga máxima. A replicação do backup do log de transações é mais lenta do que a leitura dos logs de transações ativos. Para obter mais informações, consulte [Processamento de backup do log de transações do RDS para SQL Server](CHAP_Troubleshooting_Latency_Source_SQLServer.md#CHAP_Troubleshooting_Latency_Source_SQLServer_backup).

Observe que o acesso aos backups de log requer privilégios adicionais. Para ter mais informações, consulte os detalhes em [Configurar permissões para replicação contínua a partir de um banco de dados do SQL Server na nuvem](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.Permissions.Cloud). Conceda esses privilégios antes que a tarefa comece a ser replicada.

#### Para AWS DMS 3.5.2 e versões anteriores
<a name="CHAP_Source.SQLServer.Configuration.Settings.352"></a>

Quando você trabalha com o Amazon RDS para SQL Server como origem, o trabalho de captura do MS-CDC depende dos parâmetros `maxscans` e `maxtrans`. Esses parâmetros governam o número máximo de verificações que a captura do MS-CDC faz no log de transações e o número de transações que são processadas para cada verificação.

Para bancos de dados, em que o número de transações é maior que `maxtrans*maxscans`, aumentar o valor de `polling_interval` pode causar um acúmulo de registros no log de transações. Por sua vez, esse acúmulo pode levar a um aumento no tamanho do log de transações.

Observe que AWS DMS não depende da tarefa de captura do MS-CDC. A tarefa de captura da MS-CDC marca as entradas do log de transações como processadas. Isso permite que a tarefa de backup do log de transações remova as entradas do log de transações.

É recomendável monitorar o tamanho do log de transações e o sucesso das tarefas da MS-CDC. Se as tarefas do MS-CDC falharem, o registro de transações poderá crescer excessivamente e causar falhas na replicação. AWS DMS É possível monitorar erros do trabalho de captura da MS-CDC utilizando a visualização de gerenciamento dinâmico `sys.dm_cdc_errors` no banco de dados de origem. É possível monitorar o tamanho do log de transações utilizando o comando de gerenciamento `DBCC SQLPERF(LOGSPACE)`.

**Como abordar o aumento do log de transações causado pela MS-CDC**

1. Verifique de onde `Log Space Used %` o banco de dados AWS DMS está sendo replicado e valide se ele aumenta continuamente.

   ```
   DBCC SQLPERF(LOGSPACE)
   ```

1. Identifique o que está bloqueando o processo de backup do log de transações.

   ```
   Select log_reuse_wait, log_reuse_wait_desc, name from sys.databases where name = db_name();
   ```

   Se o valor de `log_reuse_wait_desc` for igual a `REPLICATION`, a retenção do backup do log será causada pela latência na MS-CDC.

1. Aumente o número de eventos processados pelo trabalho de captura aumentando os valores dos parâmetros `maxtrans` e `maxscans`.

   ```
   EXEC sys.sp_cdc_change_job @job_type = 'capture' ,@maxtrans = 5000, @maxscans = 20 
   exec sp_cdc_stop_job 'capture'
   exec sp_cdc_start_job 'capture'
   ```

Para resolver esse problema, defina os valores de `maxscans` e para que `maxtrans` `maxtrans*maxscans` sejam iguais ao número médio de eventos gerados para tabelas que são AWS DMS replicadas do banco de dados de origem para cada dia.

Se você definir esses parâmetros acima do valor recomendado, os trabalhos de captura processarão todos os eventos nos logs de transações. Se você definir esses parâmetros abaixo do valor recomendado, a latência da MS-CDC aumentará e o log de transações também.

A identificação dos valores apropriados para `maxscans` e `maxtrans` pode ser difícil porque as alterações na workload produzem um número variável de eventos. Nesse caso, é recomendável configurar o monitoramento na latência da MS-CDC. Para obter mais informações, consulte [Monitorar o processo](https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/administer-and-monitor-change-data-capture-sql-server?view=sql-server-ver15#Monitor) na documentação do SQL Server. Configure `maxtrans` e `maxscans` dinamicamente com base nos resultados do monitoramento.

Se a AWS DMS tarefa não conseguir encontrar os números de sequência de log (LSNs) necessários para retomar ou continuar a tarefa, a tarefa poderá falhar e exigir uma recarga completa.

**nota**  
Ao usar AWS DMS para replicar dados de uma fonte do RDS para SQL Server, você pode encontrar erros ao tentar retomar a replicação após um evento de stop-start da instância do Amazon RDS. Isso ocorre porque o processo do SQL Server Agent reinicia o processo da tarefa de captura quando ele é reiniciado após o evento de interrupção-inicialização. Isso ignora o intervalo de pesquisa da MS-CDC.  
Por esse motivo, em bancos de dados com volumes de transações menores do que o processamento da tarefa de captura do MS-CDC, isso pode fazer com que os dados sejam processados ou marcados como replicados e copiados antes AWS DMS de serem retomados de onde pararam, resultando no seguinte erro:  

```
[SOURCE_CAPTURE ]E: Failed to access LSN '0000dbd9:0006f9ad:0003' in the backup log sets since BACKUP/LOG-s are not available. [1020465] (sqlserver_endpoint_capture.c:764)
```
Para mitigar esse problema, defina os valores de `maxtrans` e de `maxscans` conforme recomendado anteriormente.

# Usando o banco de dados SQL do Microsoft Azure como fonte para AWS DMS
<a name="CHAP_Source.AzureSQL"></a>

Com AWS DMS, você pode usar o Banco de Dados SQL do Microsoft Azure como fonte da mesma forma que usa o SQL Server. AWS DMS suporta, como fonte, a mesma lista de versões de banco de dados que são compatíveis com o SQL Server executado localmente ou em uma instância do Amazon EC2. 

Para obter mais informações, consulte [Usando um banco de dados Microsoft SQL Server como fonte para AWS DMS](CHAP_Source.SQLServer.md).

**nota**  
AWS DMS não oferece suporte a operações de captura de dados de alteração (CDC) com o Banco de Dados SQL do Azure.

# Usando a Instância Gerenciada SQL do Microsoft Azure como fonte para AWS DMS
<a name="CHAP_Source.AzureMgd"></a>

Com AWS DMS, você pode usar a Instância Gerenciada SQL do Microsoft Azure como fonte da mesma forma que usa o SQL Server. AWS DMS suporta, como fonte, a mesma lista de versões de banco de dados que são compatíveis com o SQL Server executado localmente ou em uma instância do Amazon EC2. 

Para obter mais informações, consulte [Usando um banco de dados Microsoft SQL Server como fonte para AWS DMS](CHAP_Source.SQLServer.md).

# Usando o servidor flexível do Banco de Dados Microsoft Azure para PostgreSQL como fonte para AWS DMS
<a name="CHAP_Source.AzureDBPostgreSQL"></a>

Com AWS DMS, você pode usar o servidor flexível do Banco de Dados do Microsoft Azure para PostgreSQL como fonte da mesma forma que usa com o PostgreSQL.

Para obter informações sobre as versões do servidor flexível do Banco de Dados Microsoft Azure para PostgreSQL AWS DMS que oferecem suporte como fonte, consulte. [Fontes para AWS DMS](CHAP_Introduction.Sources.md)

## Configurar o servidor flexível do Microsoft Azure para PostgreSQL para replicação lógica e decodificação
<a name="CHAP_Source.AzureDBPostgreSQL.setup"></a>

É possível utilizar os recursos de replicação lógica e decodificação no servidor flexível do Microsoft Azure Database para PostgreSQL durante a migração do banco de dados.

Para decodificação lógica, o DMS utiliza o plug-in `test_decoding` ou `pglogical`. Se o plug-in `pglogical` estiver disponível em um banco de dados PostgreSQL de origem, o DMS criará um slot de replicação utilizando o `pglogical`, caso contrário, o plug-in `test_decoding` será utilizado. 

Para configurar o servidor flexível do Microsoft Azure para PostgreSQL como um endpoint de origem para o DMS, execute as seguintes etapas: 

1. Abra a página Parâmetros do servidor no portal.

1. Defina o parâmetro `wal_level` do servidor como `LOGICAL`.

1. Se quiser utilizar a extensão `pglogical`, defina os parâmetros `shared_preload_libraries` e `azure.extensions` como`pglogical`.

1. Defina o parâmetro `max_replication_slots` como o número máximo de tarefas do DMS que você planeja executar simultaneamente. No Microsoft Azure, o valor padrão desse parâmetro é 10. O valor máximo desse parâmetro depende da memória disponível na instância do PostgreSQL, permitindo entre 2 e 8 slots de replicação por GB de memória.

1. Defina o parâmetro `max_wal_senders` como um valor maior que 1. O parâmetro `max_wal_senders` define o número de tarefas simultâneas que podem ser executadas. O valor padrão é 10.

1. Defina o valor do parâmetro `max_worker_processes` como pelo menos 16. Caso contrário, você poderá ver erros como os seguintes:

   ```
   WARNING: out of background worker slots.
   ```

1. Salve as alterações. Reinicie o servidor para aplicar as alterações.

1. Confirme se a instância do PostgreSQL permite tráfego de rede no recurso de conexão.

1. Conceda permissões de replicação a um usuário existente ou crie um novo usuário com permissões de replicação utilizando os comandos a seguir. 
   + Conceda as permissões de replicação a um usuário existente utilizando o seguinte comando:

     ```
     ALTER USER <existing_user> WITH REPLICATION;
     ```
   + Crie um novo usuário com permissões de replicação utilizando o seguinte comando: 

     ```
     CREATE USER aws_dms_user PASSWORD 'aws_dms_user_password';
     GRANT azure_pg_admin to aws_dms_user;
     ALTER ROLE aws_dms_user REPLICATION LOGIN;
     ```

Para obter mais informações sobre a replicação lógica com o PostgreSQL, consulte os tópicos a seguir:
+ [Ativar a captura de dados de alteração (CDC) utilizando replicação lógica](CHAP_Source.PostgreSQL.md#CHAP_Source.PostgreSQL.Security)
+ [Utilizar pontos de início nativos da CDC para configurar uma carga de CDC de uma origem PostgreSQL](CHAP_Source.PostgreSQL.md#CHAP_Source.PostgreSQL.v10)
+ [Replicação lógica e decodificação lógica no Azure Database for PostgreSQL: servidor flexível](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/concepts-logical) na [Documentação do Azure Database para PostgreSQL](https://learn.microsoft.com/en-us/azure/postgresql/).

# Usando o servidor flexível do Banco de Dados do Microsoft Azure para MySQL como fonte para AWS DMS
<a name="CHAP_Source.AzureDBMySQL"></a>

Com AWS DMS, você pode usar o servidor flexível do Banco de Dados do Microsoft Azure para MySQL como fonte da mesma forma que usa o MySQL.

Para obter informações sobre as versões do servidor flexível do Banco de Dados do Microsoft Azure para MySQL que AWS DMS oferecem suporte como fonte, consulte. [Fontes para AWS DMS](CHAP_Introduction.Sources.md) 

Para obter mais informações sobre como usar um banco de dados compatível com MySQL gerenciado pelo cliente, consulte. AWS DMS[Usando um banco de dados autogerenciado compatível com MySQL como fonte para AWS DMS](CHAP_Source.MySQL.md#CHAP_Source.MySQL.CustomerManaged)

## Limitações ao usar o Azure MySQL como fonte para AWS Database Migration Service
<a name="CHAP_Source.AzureDBMySQL.limitations"></a>
+ O valor padrão da variável de sistema do servidor flexível MySQL do Azure `sql_generate_invisible_primary_key` é`ON`, e o servidor adiciona automaticamente uma chave primária invisível (GIPK) gerada a qualquer tabela criada sem uma chave primária explícita. AWS DMS não oferece suporte à replicação contínua de tabelas MySQL com restrições GIPK.

# Usando o OCI MySQL Heatwave como fonte para AWS DMS
<a name="CHAP_Source.heatwave"></a>

Com AWS DMS, você pode usar o OCI MySQL Heatwave como fonte da mesma forma que usa o MySQL. A utilização do OCI MySQL Heatwave como origem requer algumas mudanças adicionais na configuração.

Para obter informações sobre as versões do OCI MySQL Heatwave AWS DMS que oferecem suporte como fonte, consulte. [Fontes para AWS DMS](CHAP_Introduction.Sources.md)

## Configurar o OCI MySQL Heatwave para replicação lógica
<a name="CHAP_Source.heatwave.setup"></a>

Para configurar a instância do OCI MySQL Heatwave como um endpoint de origem do DMS, faça o seguinte:

1. Faça login no console do OCI e abra o menu principal de hambúrguer (≡) no canto superior esquerdo.

1. Escolha **Bancos de dados**, **Sistemas de banco de dados**.

1. Abra o menu **Configurações**.

1. Escolha **Criar configuração**.

1. Insira um nome da configuração, como **dms\$1configuration**.

1. Escolha a forma da instância do OCI MySQL Heatwave atual. É possível encontrar a forma da **Configuração do sistema de banco de dados** da instância, na seção **Configuração do sistema de banco de dados: forma**.

1. Na seção **Variáveis do usuário**, escolha a variável `binlog_row_value_options` do sistema. O valor padrão é `PARTIAL_JSON`. Limpe o valor.

1. Escolha o botão **Criar**.

1. Abra sua SQLHeatwave instância OCI My e escolha o botão **Editar**.

1. Na seção **Configuração**, escolha o botão **Alterar configuração** e escolha a configuração da forma que você criou na etapa 4.

1. Depois que as alterações estiverem em vigor, a instância estará pronta para a replicação lógica.

# Usando o Google Cloud para MySQL como fonte para AWS DMS
<a name="CHAP_Source.GC"></a>

Com AWS DMS, você pode usar o Google Cloud para MySQL como fonte da mesma forma que usa o MySQL. 

Para obter informações sobre as versões do GCP MySQL AWS DMS compatíveis como fonte, consulte. [Fontes para AWS DMS](CHAP_Introduction.Sources.md) 

Para obter mais informações, consulte [Usando um banco de dados compatível com MySQL como fonte para AWS DMS](CHAP_Source.MySQL.md).

**nota**  
O suporte para o GCP MySQL 8.0 como fonte está disponível AWS DMS na versão 3.4.6.  
AWS DMS não é compatível com o modo SSL `verify-full` para instâncias do GCP para MySQL.  
A `Allow only SSL connections` configuração de segurança do GCP MySQL não é compatível porque exige a verificação do certificado do servidor e do cliente. AWS DMS só oferece suporte à verificação do certificado do servidor.  
AWS DMS suporta o valor padrão do GCP CloudSQL para MySQL de para o sinalizador de banco de `CRC32` dados. `binlog_checksum`

# Usando o Google Cloud para PostgreSQL como fonte para AWS DMS
<a name="CHAP_Source.GCPostgres"></a>

Com AWS DMS, você pode usar o Google Cloud para PostgreSQL como fonte da mesma forma que usa bancos de dados PostgreSQL autogerenciados.

Para obter informações sobre as versões do GCP PostgreSQL compatíveis como fonte AWS DMS , consulte. [Fontes para AWS DMS](CHAP_Introduction.Sources.md) 

Para obter mais informações, consulte [Usando um banco de dados PostgreSQL como fonte AWS DMS](CHAP_Source.PostgreSQL.md).

## Configurar o Google Cloud para PostgreSQL para replicação lógica e decodificação
<a name="CHAP_Source.GCPostgres.setup"></a>

É possível utilizar os recursos lógicos de replicação e de decodificação no Google Cloud SQL para PostgreSQL durante a migração do banco de dados.

Para decodificação lógica, o DMS utiliza um dos seguintes plug-ins:
+ `test_decoding`
+ `pglogical`

Se o plug-in `pglogical` estiver disponível em um banco de dados PostgreSQL de origem, o DMS criará um slot de replicação utilizando o `pglogical`, caso contrário, o plug-in `test_decoding` será utilizado. 

Observe o seguinte sobre o uso da decodificação lógica com AWS DMS:

1. Com o Google Cloud SQL para PostgreSQL, ative a decodificação lógica definindo a sinalização `cloudsql.logical_decoding` como `on`.

1. Para ativar o `pglogical`, defina o sinalizador `cloudsql.enable_pglogical` como `on` e reinicie o banco de dados.

1. Para utilizar os recursos de decodificação lógica, crie um usuário do PostgreSQL com o atributo `REPLICATION`. Ao utilizar a extensão do `pglogical`, o usuário deve ter o perfil `cloudsqlsuperuser`. Para criar um usurário com o perfil `cloudsqlsuperuser`, faça o seguinte:

   ```
   CREATE USER new_aws_dms_user WITH REPLICATION
   IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'new_aws_dms_user_password';
   ```

   Para definir esse atributo em um usuário existente, faça o seguinte:

   ```
   ALTER USER existing_user WITH REPLICATION;
   ```

1. Defina o parâmetro `max_replication_slots` como o número máximo de tarefas do DMS que você planeja executar simultaneamente. No Google Cloud SQL, o valor padrão desse parâmetro é 10. O valor máximo desse parâmetro depende da memória disponível na instância do PostgreSQL, permitindo entre 2 e 8 slots de replicação por GB de memória.

Para obter mais informações sobre a replicação lógica com o PostgreSQL, consulte os tópicos a seguir:
+ [Ativar a captura de dados de alteração (CDC) utilizando replicação lógica](CHAP_Source.PostgreSQL.md#CHAP_Source.PostgreSQL.Security)
+ [Utilizar pontos de início nativos da CDC para configurar uma carga de CDC de uma origem PostgreSQL](CHAP_Source.PostgreSQL.md#CHAP_Source.PostgreSQL.v10)
+ [Configurar a replicação lógica e a decodificação](https://cloud.google.com/sql/docs/postgres/replication/configure-logical-replication) na [Documentação do Cloud SQL para PostgreSQL](https://cloud.google.com/sql/docs/postgres).

# Usando um banco de dados PostgreSQL como fonte AWS DMS
<a name="CHAP_Source.PostgreSQL"></a>

Você pode migrar dados de um ou vários bancos de dados PostgreSQL usando o. AWS DMS Com um banco de dados PostgreSQL como origem, é possível migrar dados para outro banco de dados PostgreSQL ou para um dos outros bancos de dados compatíveis. 

Para obter informações sobre as versões do PostgreSQL AWS DMS que oferecem suporte como fonte, consulte. [Fontes para AWS DMS](CHAP_Introduction.Sources.md) 

AWS DMS oferece suporte ao PostgreSQL para esses tipos de bancos de dados: 
+ Bancos de dados on-premises
+ Bancos de dados em uma instância do Amazon EC2
+ Bancos de dados em uma instância de banco de dados Amazon RDS
+ Bancos de dados em uma instância de banco de dados com base na edição do Amazon Aurora compatível com PostgreSQL
+ Bancos de dados em uma instância de banco de dados com base na edição Tecnologia Sem Servidor do Amazon Aurora compatível com o PostgreSQL

**nota**  
O DMS é compatível com o Amazon Aurora PostgreSQL—com Tecnologia Sem Servidor V1 como origem somente para carga máxima. Mas é possível utilizar o Amazon Aurora PostgreSQL—com Tecnologia Sem Servidor V2 como origem para tarefas de carga máxima, carga máxima \$1 CDC e CDC somente.

É possível utilizar o Secure Socket Layers (SSL) para criptografar conexões entre o endpoint do PostgreSQL e a instância de replicação. Para obter mais informações sobre como utilizar o SSL com um endpoint do PostgreSQL, consulte [Usando SSL com AWS Database Migration Service](CHAP_Security.SSL.md).

O único requisito de segurança ao utilizar o PostgreSQL como origem é que a conta de usuário especificada deve ser de um usuário registrado no banco de dados PostgreSQL.

Para configurar um banco de dados PostgreSQL como AWS DMS um endpoint de origem, faça o seguinte:
+ Crie um usuário do PostgreSQL com as permissões apropriadas para AWS DMS fornecer acesso ao seu banco de dados de origem do PostgreSQL.
**nota**  
Se o banco de dados de origem PostgreSQL for autogerenciado, consulte [Trabalhando com bancos de dados PostgreSQL autogerenciados como fonte em AWS DMS](#CHAP_Source.PostgreSQL.Prerequisites) para obter mais informações.
Se o banco de dados de origem PostgreSQL for gerenciado pelo Amazon RDS, consulte [Trabalhando com bancos AWS de dados PostgreSQL gerenciados como fonte de DMS](#CHAP_Source.PostgreSQL.RDSPostgreSQL) para obter mais informações.
+ Crie um endpoint de origem do PostgreSQL que esteja em conformidade com a configuração do banco do dados PostgreSQL escolhida.
+ Crie uma tarefa ou um conjunto de tarefas para migrar as tabelas.

  Para criar uma full-load-only tarefa, nenhuma configuração adicional de endpoint é necessária.

  Antes de criar uma tarefa de captura de dados de alteração (uma tarefa de CDC somente ou de carga máxima e CDC), consulte [Habilitando o CDC usando um banco de dados PostgreSQL autogerenciado como fonte AWS DMS](#CHAP_Source.PostgreSQL.Prerequisites.CDC) ou [Habilitando o CDC com uma instância de banco AWS de dados PostgreSQL gerenciada com AWS DMS](#CHAP_Source.PostgreSQL.RDSPostgreSQL.CDC).

**Topics**
+ [Trabalhando com bancos de dados PostgreSQL autogerenciados como fonte em AWS DMS](#CHAP_Source.PostgreSQL.Prerequisites)
+ [Trabalhando com bancos AWS de dados PostgreSQL gerenciados como fonte de DMS](#CHAP_Source.PostgreSQL.RDSPostgreSQL)
+ [Ativar a captura de dados de alteração (CDC) utilizando replicação lógica](#CHAP_Source.PostgreSQL.Security)
+ [Utilizar pontos de início nativos da CDC para configurar uma carga de CDC de uma origem PostgreSQL](#CHAP_Source.PostgreSQL.v10)
+ [Migrando do PostgreSQL para o PostgreSQL usando AWS DMS](#CHAP_Source.PostgreSQL.Homogeneous)
+ [Migração do Babelfish para o Amazon Aurora PostgreSQL usando AWS DMS](#CHAP_Source.PostgreSQL.Babelfish)
+ [Removendo AWS DMS artefatos de um banco de dados de origem do PostgreSQL](#CHAP_Source.PostgreSQL.CleanUp)
+ [Definições de configuração adicionais ao utilizar um banco de dados PostgreSQL como origem do DMS](#CHAP_Source.PostgreSQL.Advanced)
+ [Ler a réplica como origem do PostgreSQL](#CHAP_Source.PostgreSQL.ReadReplica)
+ [Utilizar a configuração de endpoint `MapBooleanAsBoolean` do PostgreSQL](#CHAP_Source.PostgreSQL.ConnectionAttrib.Endpointsetting)
+ [Configurações de endpoint e atributos extras de conexão (ECAs) ao usar o PostgreSQL como fonte de DMS](#CHAP_Source.PostgreSQL.ConnectionAttrib)
+ [Limitações ao utilizar um banco de dados PostgreSQL como origem do DMS](#CHAP_Source.PostgreSQL.Limitations)
+ [Tipos de dados de origem para o PostgreSQL](#CHAP_Source-PostgreSQL-DataTypes)

## Trabalhando com bancos de dados PostgreSQL autogerenciados como fonte em AWS DMS
<a name="CHAP_Source.PostgreSQL.Prerequisites"></a>

Com um banco de dados PostgreSQL autogerenciado como fonte, você pode migrar dados para outro banco de dados PostgreSQL ou para um dos outros bancos de dados de destino suportados pelo. AWS DMS A origem do banco de dados pode ser um banco de dados on-premises ou um mecanismo autogerenciado em execução em uma instância do Amazon EC2. É possível utilizar uma instância de banco de dados para tarefas de carga máxima e de captura de dados de alteração (CDC).

### Pré-requisitos para usar um banco de dados PostgreSQL autogerenciado como fonte AWS DMS
<a name="CHAP_Source.PostgreSQL.Prerequisites.SelfManaged"></a>

Antes de migrar dados de um banco de dados PostgreSQL de origem autogerenciado, faça o seguinte: 
+ Utilize um banco de dados PostgreSQL com a versão 9.4.x ou superior.
+ Para tarefas de carga máxima mais CDC ou tarefas de somente CDC, conceda permissões de superusuário para a conta de usuário especificada para o banco de dados de origem do PostgreSQL. A conta de usuário precisa de permissões de superusuário para acessar perfis específicos de replicação na origem. A conta de usuário do DMS precisa de permissões SELECT em todas as colunas para migrar tabelas com êxito. No caso de perda de permissões nas colunas, o DMS cria uma tabela de destino usando mapeamentos regulares de tipos de dados do DMS, o que provoca diferenças nos metadados e falhas nas tarefas.
+ Adicione o endereço IP do servidor de AWS DMS replicação ao arquivo de `pg_hba.conf` configuração e habilite a replicação e as conexões de soquete. Veja a seguir um exemplo.

  ```
              # Replication Instance
              host all all 12.3.4.56/00 md5
              # Allow replication connections from localhost, by a user with the
              # replication privilege.
              host replication dms 12.3.4.56/00 md5
  ```

  O arquivo de configuração `pg_hba.conf` do PostgreSQL controla a autenticação do cliente. (HBA significa autenticação baseada em host.) O arquivo é tradicionalmente armazenado no diretório de dados do cluster de banco de dados. 
+ Se você estiver configurando um banco de dados como fonte para replicação lógica usando consulte AWS DMS [Habilitando o CDC usando um banco de dados PostgreSQL autogerenciado como fonte AWS DMS](#CHAP_Source.PostgreSQL.Prerequisites.CDC)

**nota**  
Algumas AWS DMS transações ficam inativas por algum tempo antes que o mecanismo do DMS as use novamente. Com a utilização do parâmetro `idle_in_transaction_session_timeout` no PostgreSQL versões 9.6 e superior é possível fazer com que as transações ociosas atinjam o tempo limite e falhem. Não encerre transações ociosas quando você usar o AWS DMS. 

### Habilitando o CDC usando um banco de dados PostgreSQL autogerenciado como fonte AWS DMS
<a name="CHAP_Source.PostgreSQL.Prerequisites.CDC"></a>

AWS DMS suporta captura de dados de alteração (CDC) usando replicação lógica. Para ativar a replicação lógica de um banco de dados de origem do PostgreSQL autogerenciado, defina os seguintes parâmetros e valores no arquivo de configuração `postgresql.conf`:
+ Defina `wal_level = logical`.
+ Defina `max_replication_slots` como um valor maior que 1.

  Defina o valor de `max_replication_slots` de acordo com o número de tarefas a serem executadas. Por exemplo, para executar cinco tarefas, defina no mínimo cinco slots. Os slots são abertos automaticamente assim que uma tarefa é iniciada e permanecem abertos até mesmo quando a tarefa não está mais em execução. Exclua manualmente os slots abertos. Observe que o DMS descarta automaticamente os slots de replicação quando a tarefa é excluída, se o DMS tiver criado o slot.
+ Defina `max_wal_senders` como um valor maior que 1.

  O parâmetro `max_wal_senders` define o número de tarefas simultâneas que podem ser executadas.
+ O parâmetro `wal_sender_timeout` encerra as conexões de replicação que estão inativas por mais tempo do que o número de milissegundos especificado. O padrão para um banco de dados PostgreSQL on-premises é 60000 milissegundos (60 segundos). A definição do valor como 0 (zero) desativa o mecanismo de tempo limite e é uma configuração válida para o DMS.

  Ao definir `wal_sender_timeout` como um valor diferente de zero, uma tarefa do DMS com CDC requer um mínimo de 10000 milissegundos (10 segundos) e falha se o valor for menor que 10000. Mantenha o valor em menos de 5 minutos para evitar provocar um atraso durante um failover de multi-AZ de uma instância de replicação do DMS.

Alguns parâmetros são estáticos, e você só pode defini-los na inicialização do servidor. Quaisquer alterações nas entradas do arquivo de configuração (para um banco de dados autogerenciado) ou no grupo de parâmetros do banco de dados (para um banco de dados RDS para PostgreSQL) são ignoradas até que o servidor seja reiniciado. Para obter mais informações, consulte a [Documentação do PostgreSQL](https://www.postgresql.org/docs/current/intro-whatis.html).

Para obter mais informações sobre como ativar a CDC, consulte [Ativar a captura de dados de alteração (CDC) utilizando replicação lógica](#CHAP_Source.PostgreSQL.Security).

## Trabalhando com bancos AWS de dados PostgreSQL gerenciados como fonte de DMS
<a name="CHAP_Source.PostgreSQL.RDSPostgreSQL"></a>

Você pode usar uma instância AWS de banco de dados PostgreSQL gerenciada como fonte para. AWS DMSÉ possível executar tarefas de carga máxima e tarefas de captura de dados de alteração (CDC) utilizando uma origem PostgreSQL gerenciado pela AWS. 

### Pré-requisitos para usar um banco de dados AWS PostgreSQL gerenciado como fonte de DMS
<a name="CHAP_Source.PostgreSQL.RDSPostgreSQL.Prerequisites"></a>

Antes de migrar dados de um banco de dados de origem AWS PostgreSQL gerenciado, faça o seguinte:
+ Recomendamos que você use uma conta de AWS usuário com as permissões mínimas necessárias para a instância de banco de dados PostgreSQL como a conta de usuário para o endpoint de origem do PostgreSQL. AWS DMS A utilização de uma conta mestre não é recomendada. A conta deve ter o perfil `rds_superuser` e o perfil `rds_replication`. O perfil `rds_replication` concede permissões para gerenciar slots lógicos e transmitir dados utilizando slots lógicos.

  Crie vários objetos da conta do usuário mestre para a conta que você utiliza. Para obter mais informações sobre como criar esses objetos, consulte [Migrar um banco de dados Amazon RDS para PostgreSQL sem utilizar a conta de usuário mestre](#CHAP_Source.PostgreSQL.RDSPostgreSQL.NonMasterUser).
+ Se o banco de dados de origem estiver em uma nuvem privada virtual (VPC), selecione o grupo de segurança da VPC que fornece acesso à instância de banco de dados em que o banco de dados reside. Isso é necessário para que a instância de replicação do DMS se conecte com êxito à instância de banco de dados de origem. Quando o banco de dados e a instância de replicação do DMS estiverem na mesma VPC, adicione o grupo de segurança apropriado às suas próprias regras de entrada.

**nota**  
Algumas AWS DMS transações ficam inativas por algum tempo antes que o mecanismo do DMS as use novamente. Com a utilização do parâmetro `idle_in_transaction_session_timeout` no PostgreSQL versões 9.6 e superior é possível fazer com que as transações ociosas atinjam o tempo limite e falhem. Não encerre transações ociosas quando você usar o AWS DMS.

### Habilitando o CDC com uma instância de banco AWS de dados PostgreSQL gerenciada com AWS DMS
<a name="CHAP_Source.PostgreSQL.RDSPostgreSQL.CDC"></a>

AWS DMS oferece suporte ao CDC nos bancos de dados PostgreSQL do Amazon RDS quando a instância de banco de dados está configurada para usar a replicação lógica. A tabela a seguir resume a compatibilidade de replicação lógica de cada versão AWS gerenciada do PostgreSQL. 


|  Versão do PostgreSQL  |  AWS DMS suporte de carga total   |  AWS DMS Suporte CDC  | 
| --- | --- | --- | 
|  Aurora PostgreSQL versão 2.1 compatível com o PostgreSQL 10.5 (ou inferior)  |  Sim  |  Não  | 
|  Compatibilidade do Aurora PostgreSQL versão 2.2 com o PostgreSQL 10.6 (ou superior)   |  Sim  |  Sim  | 
|  Compatibilidade do RDS para PostgreSQL com o PostgreSQL 10.21 (ou superior)  |  Sim  |  Sim  | 

**Como ativar a replicação lógica para uma instância de banco de dados RDS PostgreSQL**

1. Use a conta de usuário AWS principal para a instância de banco de dados PostgreSQL como a conta de usuário para o endpoint de origem do PostgreSQL. A conta de usuário mestra tem as funções necessárias para permitir a configuração da captura de dados de alteração (CDC). 

   Se você utilizar uma conta diferente da conta de usuário mestre, deverá criar vários objetos da conta mestre para a conta utilizada. Para obter mais informações, consulte [Migrar um banco de dados Amazon RDS para PostgreSQL sem utilizar a conta de usuário mestre](#CHAP_Source.PostgreSQL.RDSPostgreSQL.NonMasterUser).

1. Defina o parâmetro `rds.logical_replication` no grupo de parâmetros do CLUSTER do banco de dados como 1. Esse parâmetro estático requer uma reinicialização da instância de banco de dados para entrar em vigor. Como parte da aplicação desse parâmetro, o AWS DMS define os parâmetros `wal_level`, `max_wal_senders`, `max_replication_slots` e `max_connections`. Essas alterações de parâmetros podem aumentar o log de gravação antecipada (WAL), portanto, só defina `rds.logical_replication` ao utilizar slots de replicação lógica.

1. O parâmetro `wal_sender_timeout` encerra as conexões de replicação que estão inativas por mais tempo do que o número de milissegundos especificado. O padrão para um banco AWS de dados PostgreSQL gerenciado é 30.000 milissegundos (30 segundos). A definição do valor como 0 (zero) desativa o mecanismo de tempo limite e é uma configuração válida para o DMS.

   Ao definir `wal_sender_timeout` como um valor diferente de zero, uma tarefa do DMS com CDC requer um mínimo de 10000 milissegundos (10 segundos) e falhará se o valor estiver entre 0 e 10000. Mantenha o valor em menos de 5 minutos para evitar provocar um atraso durante um failover de multi-AZ de uma instância de replicação do DMS.

1.  Verifique se o valor do parâmetro `max_worker_processes` no grupo de parâmetros do cluster do banco de dados é igual ou superior aos valores totais combinados de `max_logical_replication_workers``autovacuum_max_workers` e `max_parallel_workers`. Um alto número de processos de trabalho em segundo plano pode impactar as workloads das aplicações em instâncias pequenas. Portanto, monitore o desempenho do banco de dados se você definir um valor de `max_worker_processes` mais alto que o padrão.

1.  Ao usar o Aurora PostgreSQL como origem com CDC, defina `synchronous_commit` como `ON`.

**Como utilizar a réplica de leitura do cluster de banco de dados multi-AZ do PostgreSQL para CDC (replicação contínua)**

1. Defina os parâmetros `rds.logical_replication` e `sync_replication_slots` no grupo de parâmetros do CLUSTER de banco de dados como 1. Esses parâmetros estáticos requerem a reinicialização da instância de banco de dados para entrar em vigor.

1. Execute o seguinte comando para criar a tabela `awsdms_ddl_audit` no Gravador e substituir o `objects_schema` pelo nome do esquema a ser utilizado:

   ```
   CREATE TABLE objects_schema.awsdms_ddl_audit
   (
     c_key    bigserial primary key,
     c_time   timestamp,    -- Informational
     c_user   varchar(64),  -- Informational: current_user
     c_txn    varchar(16),  -- Informational: current transaction
     c_tag    varchar(24),  -- Either 'CREATE TABLE' or 'ALTER TABLE' or 'DROP TABLE'
     c_oid    integer,      -- For future use - TG_OBJECTID
     c_name   varchar(64),  -- For future use - TG_OBJECTNAME
     c_schema varchar(64),  -- For future use - TG_SCHEMANAME. For now - holds current_schema
     c_ddlqry  text         -- The DDL query associated with the current DDL event
   );
   ```

1. Execute o seguinte comando para criar uma função `awsdms_intercept_ddl` e substituir o `objects_schema` pelo nome do esquema a ser utilizado:

   ```
   CREATE OR REPLACE FUNCTION objects_schema.awsdms_intercept_ddl()
     RETURNS event_trigger
   LANGUAGE plpgsql
   SECURITY DEFINER
     AS $$
     declare _qry text;
   BEGIN
     if (tg_tag='CREATE TABLE' or tg_tag='ALTER TABLE' or tg_tag='DROP TABLE' or tg_tag = 'CREATE TABLE AS') then
            SELECT current_query() into _qry;
            insert into objects_schema.awsdms_ddl_audit
            values
            (
            default,current_timestamp,current_user,cast(TXID_CURRENT()as varchar(16)),tg_tag,0,'',current_schema,_qry
            );
            delete from objects_schema.awsdms_ddl_audit;
   end if;
   END;
   $$;
   ```

1. Execute o seguinte comando para criar o gatilho de eventos `awsdms_intercept_ddl`:

   ```
   CREATE EVENT TRIGGER awsdms_intercept_ddl ON ddl_command_end EXECUTE PROCEDURE objects_schema.awsdms_intercept_ddl();
   ```

   Verifique se todos os usuários e perfis que acessam esses eventos têm as permissões de DDL necessárias. Por exemplo:

   ```
   grant all on public.awsdms_ddl_audit to public;
   grant all on public.awsdms_ddl_audit_c_key_seq to public;
   ```

1. Crie um slot de replicação no Gravador:

   ```
   SELECT * FROM pg_create_logical_replication_slot('dms_read_replica_slot', 'test_decoding', false, true);
   ```

1. Verifique se o slot de replicação está disponível no Leitor:

   ```
   select * from pg_catalog.pg_replication_slots where slot_name = 'dms_read_replica_slot';
   
   slot_name            |plugin       |slot_type|datoid|database|temporary|active|active_pid|xmin|catalog_xmin|restart_lsn|confirmed_flush_lsn|wal_status|safe_wal_size|two_phase|inactive_since               |conflicting|invalidation_reason|failover|synced|
   ---------------------+-------------+---------+------+--------+---------+------+----------+----+------------+-----------+-------------------+----------+-------------+---------+-----------------------------+-----------+-------------------+--------+------+
   dms_read_replica_slot|test_decoding|logical  |     5|postgres|false    |false |          |    |3559        |0/180011B8 |0/180011F0         |reserved  |             |true     |2025-02-10 15:45:04.083 +0100|false      |                   |false   |false |
   ```

1. Crie um endpoint de origem do DMS para a réplica de leitura e defina o nome do slot de replicação lógica por meio do atributo de conexão adicional:

   ```
   slotName=dms_read_replica_slot;
   ```

1. Crie e inicie a tarefa CDC/FL\$1CDC.
**nota**  
Para migrações CDC/FL\$1CDC, o DMS considera o horário de início da tarefa como uma posição inicial da CDC. Todos os mais antigos LSNs do slot de replicação são ignorados.

### Migrar um banco de dados Amazon RDS para PostgreSQL sem utilizar a conta de usuário mestre
<a name="CHAP_Source.PostgreSQL.RDSPostgreSQL.NonMasterUser"></a>

Em alguns casos, é possível não utilizar a conta de usuário mestre para a instância de banco de dados Amazon RDS PostgreSQL que você está utilizando como origem. Nesses casos, crie vários objetos para capturar os eventos da linguagem de definição de dados (DDL). Crie esses objetos utilizando uma conta diferente da conta mestrr e, depois, crie um acionador na conta de usuário mestre.

**nota**  
Se você definir a configuração do endpoint `CaptureDdls` como `false` no endpoint de origem, não precisará criar a tabela e o acionador a seguir no banco de dados de origem.

Utilize o procedimento a seguir para criar esses objetos.

**Como criar objetos**

1. Escolha um esquema onde os objetos serão criados. O esquema padrão é `public`. Verifique se o esquema existe e pode ser acessado pela conta `OtherThanMaster`. 

1. Faça login na instância de banco de dados PostgreSQL utilizando uma conta de usuário diferente da conta mestre, aqui a conta `OtherThanMaster`.

1. Crie a tabela `awsdms_ddl_audit` executando o comando a seguir, substituindo `objects_schema` no código seguinte pelo nome do esquema a ser utilizado.

   ```
   CREATE TABLE objects_schema.awsdms_ddl_audit
   (
     c_key    bigserial primary key,
     c_time   timestamp,    -- Informational
     c_user   varchar(64),  -- Informational: current_user
     c_txn    varchar(16),  -- Informational: current transaction
     c_tag    varchar(24),  -- Either 'CREATE TABLE' or 'ALTER TABLE' or 'DROP TABLE'
     c_oid    integer,      -- For future use - TG_OBJECTID
     c_name   varchar(64),  -- For future use - TG_OBJECTNAME
     c_schema varchar(64),  -- For future use - TG_SCHEMANAME. For now - holds current_schema
     c_ddlqry  text         -- The DDL query associated with the current DDL event
   );
   ```

1. Crie o perfil `awsdms_intercept_ddl` executando o comando a seguir, substituindo `objects_schema` no código seguinte pelo nome do esquema a ser utilizado.

   ```
   CREATE OR REPLACE FUNCTION objects_schema.awsdms_intercept_ddl()
     RETURNS event_trigger
   LANGUAGE plpgsql
   SECURITY DEFINER
     AS $$
     declare _qry text;
   BEGIN
     if (tg_tag='CREATE TABLE' or tg_tag='ALTER TABLE' or tg_tag='DROP TABLE' or tg_tag = 'CREATE TABLE AS') then
            SELECT current_query() into _qry;
            insert into objects_schema.awsdms_ddl_audit
            values
            (
            default,current_timestamp,current_user,cast(TXID_CURRENT()as varchar(16)),tg_tag,0,'',current_schema,_qry
            );
            delete from objects_schema.awsdms_ddl_audit;
   end if;
   END;
   $$;
   ```

1. Faça logout da conta `OtherThanMaster` e faça login com uma conta que tenha o perfil `rds_superuser` atribuído.

1. Crie o trigger de evento `awsdms_intercept_ddl` executando o comando a seguir.

   ```
   CREATE EVENT TRIGGER awsdms_intercept_ddl ON ddl_command_end 
   EXECUTE PROCEDURE objects_schema.awsdms_intercept_ddl();
   ```

1. Verifique se todos os usuários e perfis que acessam esses eventos têm as permissões de DDL necessárias. Por exemplo:

   ```
   grant all on public.awsdms_ddl_audit to public;
   grant all on public.awsdms_ddl_audit_c_key_seq to public;
   ```

Ao concluir o procedimento anterior, você poderá criar o endpoint de origem do AWS DMS utilizando a conta `OtherThanMaster`.

**nota**  
Esses eventos são acionados pelas instruções `CREATE TABLE`, `ALTER TABLE` e `DROP TABLE`.

## Ativar a captura de dados de alteração (CDC) utilizando replicação lógica
<a name="CHAP_Source.PostgreSQL.Security"></a>

É possível utilizar o recurso de replicação lógica nativa do PostgreSQL para ativar a captura de dados de alteração (CDC) durante a migração do banco de dados de origens do PostgreSQL. É possível utilizar esse recurso com o PostgreSQL autogerenciado e também com uma instância do banco de dados Amazon RDS para PostgreSQL. Essa abordagem reduz o tempo de inatividade e ajuda a garantir que o banco de dados de destino esteja sincronizado com o banco de dados PostgreSQL de origem.

AWS DMS suporta CDC para tabelas PostgreSQL com chaves primárias. Se uma tabela não tiver uma chave primária, os logs de gravação antecipada (WAL) não incluirão uma imagem anterior da linha do banco de dados. Nesse caso, o DMS não pode atualizar a tabela. Aqui, é possível utilizar configurações adicionais e utilizar a identidade da réplica da tabela como uma solução alternativa. No entanto, essa abordagem pode gerar logs adicionais. É recomendável utilizar a identidade da réplica da tabela como solução alternativa somente após testes cuidadosos. Para obter mais informações, consulte [Definições de configuração adicionais ao utilizar um banco de dados PostgreSQL como origem do DMS](#CHAP_Source.PostgreSQL.Advanced).

**nota**  
A REPLICA IDENTITY FULL é compatível com um plug-in de decodificação lógica, mas não com um plug-in pglogical. Para obter mais informações, consulte a [Documentação do pglogical](https://github.com/2ndQuadrant/pglogical#primary-key-or-replica-identity-required).

Para tarefas de carga total e somente CDC e CDC, AWS DMS usa slots de replicação lógica para reter os registros do WAL para replicação até que os registros sejam decodificados. Ao reiniciar (não ao retomar) para uma carga máxima e uma tarefa de CDC ou uma tarefa de somente de CDC, o slot de replicação é recriado.

**nota**  
Para decodificação lógica, o DMS utiliza o plug-in test\$1decoding ou pglogical. Se o plug-in pglogical estiver disponível em um banco de dados PostgreSQL de origem, o DMS criará um slot de replicação utilizando pglogical, caso contrário, um plug-in test\$1decoding será utilizado. Para obter mais informações sobre o plug-in test\$1decoding, consulte a [Documentação do PostgreSQL](https://www.postgresql.org/docs/9.4/test-decoding.html).  
Se o parâmetro `max_slot_wal_keep_size` do banco de dados for definido como um valor não padrão e o `restart_lsn` de um slot de replicação ficar atrás do LSN atual em mais do que esse tamanho, a tarefa do DMS falhará devido à remoção dos arquivos WAL necessários.

### Configurar o plug-in pglogical
<a name="CHAP_Source.PostgreSQL.Security.Pglogical"></a>

Implementado como uma extensão do PostgreSQL, o plug-in pglogical é um sistema de replicação lógica e um modelo para replicação seletiva de dados. A tabela a seguir identifica as versões de origem do banco de dados PostgreSQL que são compatíveis com o plug-in pglogical.


|  Origem PostgreSQL   |  Compatível com o pglogical  | 
| --- | --- | 
|  PostgreSQL 9.4 autogerenciado ou superior  |  Sim  | 
|  Amazon RDS PostgreSQL 9.5 ou inferior  |  Não  | 
|  Amazon RDS PostgreSQL 9.6 ou superior  |  Sim  | 
|  Aurora PostgreSQL 1.x até 2.5.x  |  Não  | 
|  Aurora PostgreSQL 2.6.x ou superior  |  Sim  | 
|  Aurora PostgreSQL 3.3.x ou superior  |  Sim  | 

Antes de configurar o pglogical para uso com AWS DMS, primeiro habilite a replicação lógica para captura de dados de alteração (CDC) em seu banco de dados de origem do PostgreSQL. 
+ Para obter informações sobre como ativar a replicação lógica para CDC em bancos de dados de origem PostgreSQL *autogerenciados*, consulte [Habilitando o CDC usando um banco de dados PostgreSQL autogerenciado como fonte AWS DMS](#CHAP_Source.PostgreSQL.Prerequisites.CDC)
+ Para obter informações sobre como ativar a replicação lógica para CDC em bancos de dados de origem PostgreSQL *gerenciado pela AWS*, consulte [Habilitando o CDC com uma instância de banco AWS de dados PostgreSQL gerenciada com AWS DMS](#CHAP_Source.PostgreSQL.RDSPostgreSQL.CDC).

Depois que a replicação lógica estiver ativada no banco de dados de origem PostgreSQL, utilize as etapas a seguir para configurar o pglogical para utilização com o DMS.

**Para usar o plug-in pglogical para replicação lógica em um banco de dados de origem PostgreSQL com AWS DMS**

1. Crie uma extensão de pglogical no banco de dados de origem PostgreSQL:

   1. Defina o parâmetro correto:
      + Para bancos de dados PostgreSQL autogerenciados, defina o parâmetro `shared_preload_libraries= 'pglogical'` do banco de dados.
      + Para o PostgreSQL nos bancos de dados Amazon RDS e Amazon Aurora edição compatível com o PostgreSQL, defina o parâmetro `shared_preload_libraries` como `pglogical` no mesmo grupo de parâmetros do RDS.

   1. Reinicie o banco de dados de origem PostgreSQL.

   1. No banco de dados PostgreSQL, execute o comando `create extension pglogical;`.

1. Execute o comando a seguir para verificar se a instalação do pglogical foi bem-sucedida:

   `select * FROM pg_catalog.pg_extension`

Agora você pode criar uma AWS DMS tarefa que realiza a captura de dados de alteração para o endpoint do banco de dados de origem do PostgreSQL.

**nota**  
Se você não ativar o pglogical no banco de dados de origem PostgreSQL, o AWS DMS utilizará o plug-in `test_decoding` por padrão. Quando pglogical está habilitado para decodificação lógica, AWS DMS usa pglogical por padrão. Mas é possível definir o atributo de conexão adicional, para que o `PluginName` utilize o plug-in `test_decoding` em vez disso.

## Utilizar pontos de início nativos da CDC para configurar uma carga de CDC de uma origem PostgreSQL
<a name="CHAP_Source.PostgreSQL.v10"></a>

Para ativar os pontos de início nativos da CDC com o PostgreSQL como origem, defina o atributo de conexão adicional `slotName` como o nome de um slot de replicação lógica existente ao criar o endpoint. Esse slot de replicação lógica mantém as alterações contínuas desde a hora da criação do endpoint, portanto, ele é compatível com a replicação de um ponto no tempo. 

O PostgreSQL grava as alterações do banco de dados em arquivos WAL que são descartados somente depois que o AWS DMS faz a leitura das alterações do slot de replicação lógica com êxito. O uso de slots de replicação lógica pode impedir que as alterações registradas sejam excluídas antes de serem consumidas pelo mecanismo de replicação. 

No entanto, dependendo da taxa de alteração e consumo, as alterações mantidas em um slot de replicação lógica podem causar a utilização elevado do disco. É recomendável definir alarmes de utilização de espaço na instância de origem PostgreSQL ao utilizar slots de replicação lógica. Para obter mais informações sobre como definir o atributo de conexão adicional `slotName`, consulte [Configurações de endpoint e atributos extras de conexão (ECAs) ao usar o PostgreSQL como fonte de DMS](#CHAP_Source.PostgreSQL.ConnectionAttrib).

O procedimento a seguir demonstra essa abordagem com mais detalhes.

**Como utilizar um ponto inide início nativo da CDC para configurar uma carga de CDC de um endpoint de origem PostgreSQL**

1. Identifique o slot de replicação lógica utilizado por uma tarefa de replicação anterior (uma tarefa pai) que você queira utilizar como ponto de partida. Consulte a visualização `pg_replication_slots` no banco de dados de origem para se certificar de que esse slot não tenha conexões ativas. Se isso acontecer, resolva-os e feche-os antes de continuar.

   Para as etapas a seguir, vamos supor que o slot de replicação lógica seja `abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef`. 

1. Crie um novo endpoint de origem que inclua a configuração de atributo de conexão adicional a seguir.

   ```
   slotName=abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef;
   ```

1. Crie uma nova tarefa somente para CDC usando o console AWS CLI ou AWS DMS a API. Por exemplo, utilizando a CLI, é possível executar o seguinte comando `create-replication-task`. 

   ```
   aws dms create-replication-task --replication-task-identifier postgresql-slot-name-test 
   --source-endpoint-arn arn:aws:dms:us-west-2:012345678901:endpoint:ABCD1EFGHIJK2LMNOPQRST3UV4 
   --target-endpoint-arn arn:aws:dms:us-west-2:012345678901:endpoint:ZYX9WVUTSRQONM8LKJIHGF7ED6 
   --replication-instance-arn arn:aws:dms:us-west-2:012345678901:rep:AAAAAAAAAAA5BB4CCC3DDDD2EE 
   --migration-type cdc --table-mappings "file://mappings.json" --cdc-start-position "4AF/B00000D0" 
   --replication-task-settings "file://task-pg.json"
   ```

   No comando anterior, as seguintes opções são definidas:
   + A opção `source-endpoint-arn` é definida como o valor criado na etapa 2.
   + A opção `replication-instance-arn` é definida como o mesmo valor da tarefa pai da etapa 1.
   + As opções `table-mappings` e `replication-task-settings` são definidas como os mesmos valores da tarefa pai na etapa 1.
   + A opção `cdc-start-position` é definida como um valor de posição de início. Para localizar essa posição de início, consulte a visualização `pg_replication_slots` no banco de dados de origem ou visualize os detalhes do console da tarefa pai na etapa 1. Para obter mais informações, consulte [Determinar um ponto de início de CDC nativo](CHAP_Task.CDC.md#CHAP_Task.CDC.StartPoint.Native).

   Para ativar o modo de início personalizado do CDC ao criar uma nova tarefa somente para CDC usando o AWS DMS console, faça o seguinte:
   + Na seção **Configurações da tarefa**, em **Modo de início da CDC para transações de origem**, escolha **Ativar o modo de início da CDC personalizado**.
   + Em **Ponto de início da CDC personalizado para transações de origem**, escolha **Especificar um número de sequência de log**. Especifique o número de alteração do sistema ou escolha **Especificar um ponto de verificação de recuperação** e forneça um ponto de verificação de recuperação.

   Quando essa tarefa do CDC é AWS DMS executada, gera um erro se o slot de replicação lógica especificado não existir. Ele também gerará um erro se a tarefa não for criada com uma configuração válida para `cdc-start-position`.

Ao utilizar pontos de início nativos da CDC com o plug-in pglogical e quiser utilizar um novo slot de replicação, conclua as etapas de configuração a seguir antes de criar uma tarefa de CDC. 

**Como utilizar um novo slot de replicação não criado anteriormente como parte de outra tarefa do DMS**

1. Crie um slot de replicação, conforme mostrado a seguir:

   ```
   SELECT * FROM pg_create_logical_replication_slot('replication_slot_name', 'pglogical');
   ```

1. Depois que o banco de dados criar o slot de replicação, obtenha e anote os valores de **restart\$1lsn** e de **confirmed\$1flush\$1lsn** do slot:

   ```
   select * from pg_replication_slots where slot_name like 'replication_slot_name';
   ```

   Observe que a posição de início da CDC nativo para uma tarefa de CDC criada após o slot de replicação não pode ser mais antiga do que o valor de **confirmed\$1flush\$1lsn**.

   Para obter informações sobre os valores de **restart\$1lsn** e de **confirmed\$1flush\$1lsn**, consulte [pg\$1replication\$1slots](https://www.postgresql.org/docs/14/view-pg-replication-slots.html) 

1. Crie um nó pglogical.

   ```
   SELECT pglogical.create_node(node_name := 'node_name', dsn := 'your_dsn_name');
   ```

1. Crie dois conjuntos de replicação utilizando o perfil `pglogical.create_replication_set`. O primeiro conjunto de replicação rastreia as atualizações e as exclusões das tabelas que têm chaves primárias. O segundo conjunto de replicação rastreia somente inserções e tem o mesmo nome do primeiro conjunto de replicação, com o prefixo 'i' adicionado.

   ```
   SELECT pglogical.create_replication_set('replication_slot_name', false, true, true, false);
   SELECT pglogical.create_replication_set('ireplication_slot_name', true, false, false, true);
   ```

1. Adicione uma tabela ao conjunto de réplicas.

   ```
   SELECT pglogical.replication_set_add_table('replication_slot_name', 'schemaname.tablename', true);
   SELECT pglogical.replication_set_add_table('ireplication_slot_name', 'schemaname.tablename', true);
   ```

1. Defina o atributo de conexão adicional (ECA) a seguir ao criar o endpoint de origem.

   ```
   PluginName=PGLOGICAL;slotName=slot_name;
   ```

Agora é possível criar uma tarefa somente de CDC com um ponto de início nativo do PostgreSQL utilizando o novo slot de replicação. Para obter mais informações sobre o plug-in pglogical, consulte a [Documentação do pglogical 3.7](https://www.enterprisedb.com/docs/pgd/3.7/pglogical/)

## Migrando do PostgreSQL para o PostgreSQL usando AWS DMS
<a name="CHAP_Source.PostgreSQL.Homogeneous"></a>

Quando você migra de um mecanismo de banco de dados diferente do PostgreSQL para um banco de dados PostgreSQL, é quase sempre a melhor ferramenta AWS DMS de migração a ser usada. No entanto, ao migrar de um banco de dados PostgreSQL para um banco de dados PostgreSQL, as ferramentas do PostgreSQL podem ser mais eficazes.

### Utilize ferramentas nativas do PostgreSQL para migrar dados
<a name="CHAP_Source.PostgreSQL.Homogeneous.Native"></a>

É recomendável utilizar ferramentas nativas de migração do banco de dados PostgreSQL, como `pg_dump`, nas seguintes condições: 
+ Quando há uma migração homogênea, na qual você migra de um banco de dados PostgreSQL de origem para um banco de dados PostgreSQL de destino. 
+ Quando for migrar um banco de dados inteiro.
+ As ferramentas nativas permitem que você migre os dados com um tempo mínimo de inatividade. 

O utilitário pg\$1dump utiliza o comando COPY para criar um esquema e um despejo de dados de um banco de dados PostgreSQL. O script de despejo gerado pelo pg\$1dump carrega os dados em um banco de dados com o mesmo nome e recria as tabelas, os índices e as chaves estrangeiras. Para restaurar os dados para um banco de dados com outro nome, utilize o comando `pg_restore` e o parâmetro `-d`.

Se estiver migrando dados de um banco de dados de origem PostgreSQL sendo executado no EC2 para um destino Amazon RDS para PostgreSQL, você poderá utilizar o plug-in pglogical.

Para obter mais informações sobre como importar de um banco de dados PostgreSQL para o Amazon RDS para PostgreSQL ou para a edição do Amazon Aurora compatível com PostgreSQL, consulte [https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html).

### Utilizar o DMS para migrar dados do PostgreSQL para o PostgreSQL
<a name="CHAP_Source.PostgreSQL.Homogeneous.DMS"></a>

 AWS DMS pode migrar dados, por exemplo, de um banco de dados PostgreSQL de origem que está no local para uma instância de destino do Amazon RDS for PostgreSQL ou do Aurora PostgreSQL. Os tipos de dados do PostgreSQL fundamentais ou básicos geralmente migram com êxito.

**nota**  
Ao replicar tabelas particionadas de uma origem PostgreSQL para o destino PostgreSQL, você não precisa mencionar a tabela pai como parte dos critérios de seleção na tarefa do DMS. Mencionar a tabela principal faz com que os dados sejam duplicados nas tabelas filho no destino, possivelmente causando uma violação de PK. Ao selecionar apenas as tabelas filho nos critérios de seleção do mapeamento de tabelas, a tabela pai é preenchida automaticamente.

Os tipos de dados compatíveis com o banco de dados de origem, mas que não são compatíveis com o destino, podem não ser migrados com êxito. AWS DMS transmite alguns tipos de dados como cadeias de caracteres se o tipo de dados for desconhecido. Alguns tipos de dados, como XML e JSON, podem ser migrados com êxito como arquivos pequenos, mas podem falhar se forem documentos grandes. 

Ao executar a migração do tipo de dados, lembre-se de que:
+ Em alguns casos, o tipo de dados PostgreSQL NUMERIC(p,s) não especifica nenhuma precisão e escala. Nas versões 3.4.2 e anteriores do DMS, o DMS utiliza uma precisão de 28 e uma escala de 6 por padrão, NUMERIC(28,6). Por exemplo, o valor 0,611111104488373 da origem é convertido em 0,611111 no destino do PostgreSQL.
+ Uma tabela com o tipo de dados ARRAY deve ter uma chave primária. Uma tabela com um tipo de dados ARRAY sem uma chave primária é suspensa durante a carga máxima.

A tabela a seguir mostra os tipos de dados do PostgreSQL de origem e se podem ser migrados com êxito.


| Tipo de dados | Será migrado com êxito | Migra parcialmente | Não migra | Comentários | 
| --- | --- | --- | --- | --- | 
| INTEGER | X |  |  |  | 
| SMALLINT | X |  |  |  | 
| BIGINT | X |  |  |  | 
| NUMERIC/DECIMAL(p,s) |  | X |  | Em que 0<p<39 e 0<s | 
| NUMERIC/DECIMAL |  | X |  | Em que p>38 ou p=s=0 | 
| REAL | X |  |  |  | 
| DOUBLE | X |  |  |  | 
| SMALLSERIAL | X |  |  |  | 
| SERIAL | X |  |  |  | 
| BIGSERIAL | X |  |  |  | 
| MONEY | X |  |  |  | 
| CHAR |  | X |  | Sem precisão especificada | 
| CHAR(n) | X |  |  |  | 
| VARCHAR |  | X |  | Sem precisão especificada | 
| VARCHAR(n) | X |  |  |  | 
| TEXT | X |  |  |  | 
| BYTEA | X |  |  |  | 
| TIMESTAMP | X |  |  | Os valores infinitos positivos e negativos são truncados para '9999-12-31 23:59:59' e '4713-01-01 00:00:00 BC', respectivamente. | 
| TIMESTAMP WITH TIME ZONE |  | X |  |  | 
| DATE | X |  |  |  | 
| TIME | X |  |  |  | 
| TIME WITH TIME ZONE | X |  |  |  | 
| INTERVAL |  | X |  |  | 
| BOOLEAN | X |  |  |  | 
| ENUM |  |  | X |  | 
| CIDR | X |  |  |  | 
| INET |  |  | X |  | 
| MACADDR |  |  | X |  | 
| TSVECTOR |  |  | X |  | 
| TSQUERY |  |  | X |  | 
| XML |  | X |  |  | 
| POINT | X |  |  | Tipo de dados espaciais do PostGIS | 
| LINE |  |  | X |  | 
| LSEG |  |  | X |  | 
| BOX |  |  | X |  | 
| PATH |  |  | X |  | 
| POLYGON | X |  |  | Tipo de dados espaciais do PostGIS | 
| CIRCLE |  |  | X |  | 
| JSON |  | X |  |  | 
| ARRAY | X |  |  | Requer chave primária | 
| COMPOSITE |  |  | X |  | 
| RANGE |  |  | X |  | 
| LINESTRING | X |  |  | Tipo de dados espaciais do PostGIS | 
| MULTIPOINT | X |  |  | Tipo de dados espaciais do PostGIS | 
| MULTILINESTRING | X |  |  | Tipo de dados espaciais do PostGIS | 
| MULTIPOLYGON | X |  |  | Tipo de dados espaciais do PostGIS | 
| GEOMETRYCOLLECTION | X |  |  | Tipo de dados espaciais do PostGIS | 

### Migrar tipos de dados espaciais do PostGIS
<a name="CHAP_Source.PostgreSQL.DataTypes.Spatial"></a>

*Dados espaciais* identificam a informação de geometria de um objeto ou local no espaço. Os bancos de dados relacionais de objetos PostgreSQL são compatíveis com os tipos de dados espaciais do PostGIS. 

Antes de migrar objetos de dados espaciais do PostgreSQL, verifique se o plug-in PostGIS está ativado no nível global. Isso garante a AWS DMS criação exata das colunas de dados espaciais de origem para a instância de banco de dados de destino do PostgreSQL.

Para AWS DMS migrações homogêneas de PostgreSQL para PostgreSQL, suporta a migração de tipos e subtipos de objetos de dados geométricos e geográficos (coordenadas geodésicas) PostGIS, como os seguintes:
+  POINT 
+  LINESTRING 
+  POLYGON 
+  MULTIPOINT 
+  MULTILINESTRING 
+  MULTIPOLYGON 
+  GEOMETRYCOLLECTION 

## Migração do Babelfish para o Amazon Aurora PostgreSQL usando AWS DMS
<a name="CHAP_Source.PostgreSQL.Babelfish"></a>

Você pode migrar as tabelas de origem do PostgreSQL do Babelfish for Aurora para qualquer endpoint de destino compatível usando o. AWS DMS

Ao criar seu endpoint de AWS DMS origem usando o console do DMS, a API ou os comandos da CLI, você define a origem como **Amazon Aurora PostgreSQL** e o nome do banco de dados como. **babelfish\$1db** Na seção **Configurações do Endpoint**, verifique se o **DatabaseMode**está definido como **Babelfish** e **BabelfishDatabaseName**está definido como o nome do banco de dados Babelfish T-SQL de origem. Em vez de usar a porta TCP **1433** do Babelfish, use a porta TCP **5432** do Aurora PostgreSQL.

Crie as tabelas antes de migrar os dados para garantir que o DMS utilize os tipos de dados e metadados de tabela corretos. Se você não criar as tabelas no destino antes de executar a migração, o DMS poderá criar as tabelas com tipos de dados e permissões incorretos.

### Adicionar regras de transformação à tarefa de migração
<a name="CHAP_Source.PostgreSQL.Babelfish.Transform"></a>

Ao criar uma tarefa de migração para uma origem do Babelfish, inclua regras de transformação que garantam que o DMS utilize as tabelas de destino pré-criadas.

Se você definiu o modo de migração de vários bancos de dados ao definir seu cluster do Babelfish para PostgreSQL, adicione uma regra de transformação que renomeia o nome do esquema para o esquema do T-SQL. Por exemplo, se o nome do esquema do T-SQL for `dbo` e o nome do esquema do Babelfish para PostgreSQL for `mydb_dbo`, renomeie o esquema para `dbo` utilizando uma regra de transformação. Para encontrar o nome do esquema do PostgreSQL, consulte [Arquitetura do Babelfish](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/babelfish-architecture.html) no *Guia do usuário do Amazon Aurora*. 

Se você utilizar o modo de banco de dados único, não será necessário usar uma regra de transformação para renomear os esquemas de bancos de dados. Os nomes dos esquemas do PostgreSQL têm one-to-one um mapeamento para os nomes dos esquemas no banco de dados T-SQL.

O exemplo de regra de transformação a seguir mostra como renomear o nome do esquema de `mydb_dbo` de volta para `dbo`:

```
{
    "rules": [
        {
            "rule-type": "transformation",
            "rule-id": "566251737",
            "rule-name": "566251737",
            "rule-target": "schema",
            "object-locator": {
                "schema-name": "mydb_dbo"
            },
            "rule-action": "rename",
            "value": "dbo",
            "old-value": null
        },
        {
            "rule-type": "selection",
            "rule-id": "566111704",
            "rule-name": "566111704",
            "object-locator": {
                "schema-name": "mydb_dbo",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        }
    ]
}
```

### Limitações ao utilizar um endpoint de origem do PostgreSQL com tabelas do Babelfish
<a name="CHAP_Source.PostgreSQL.Babelfish.Limitations"></a>

As limitações a seguir se aplicam ao utilizar um endpoint de origem do PostgreSQL com tabelas do Babelfish:
+ O DMS é compatível somente com a migração do Babelfish versão 16.2/15.6 e posterior e do DMS versão 3.5.3 e posterior.
+ O DMS não replica as alterações na definição de tabelas do Babelfish para o endpoint de destino. Uma solução alternativa para essa limitação é primeiro aplicar as alterações na definição das tabelas no destino e, em seguida, alterar a definição das tabelas na origem do Babelfish.
+ Quando você cria tabelas do Babelfish com o tipo de dados BYTEA, o DMS as converte para o tipo de dados `varbinary(max)` ao migrar para o SQL Server como destino.
+ O DMS não é compatível com o modo LOB completo para tipos de dados binários. Em vez disso, use o modo LOB limitado para tipos de dados binários.
+ O DMS não é compatível com a validação de dados no Babelfish como origem.
+ Para a definição da tarefa **Modo de preparação da tabela de destino**, use somente os modos **Não fazer nada** ou **Truncar**. Não utilize o modo **Abandonar tabelas no destino**. Ao utilizar **Abandonar tabelas no destino**, o DMS poderá criar as tabelas com tipos de dados incorretos.
+ Ao utilizar a replicação contínua (CDC ou carga máxima e CDC), defina o atributo de conexão adicional (ECA) `PluginName` como `TEST_DECODING`.
+ O DMS não é compatível com replicação (CDC ou carga máxima e CDC) de tabelas particionadas no Babelfish como origem.

## Removendo AWS DMS artefatos de um banco de dados de origem do PostgreSQL
<a name="CHAP_Source.PostgreSQL.CleanUp"></a>

Para capturar eventos DDL, AWS DMS cria vários artefatos no banco de dados PostgreSQL quando uma tarefa de migração é iniciada. Quando a tarefa é concluída, é recomendável remover esses artefatos.

Para remover os artefatos, execute os comandos a seguir (na ordem em que são exibidos), em que `{AmazonRDSMigration}` é o esquema no qual os artefatos foram criados: O descarte de um esquema deve ser feito com extremo cuidado. Nunca descarte um esquema operacional, especialmente um esquema que seja público.

```
drop event trigger awsdms_intercept_ddl;
```

O gatilho de eventos não pertence a um esquema específico.

```
drop function {AmazonRDSMigration}.awsdms_intercept_ddl()
drop table {AmazonRDSMigration}.awsdms_ddl_audit
drop schema {AmazonRDSMigration}
```

## Definições de configuração adicionais ao utilizar um banco de dados PostgreSQL como origem do DMS
<a name="CHAP_Source.PostgreSQL.Advanced"></a>

É possível adicionar definições de configuração ao migrar dados de um banco de dados PostgreSQL de duas maneiras:
+ É possível adicionar valores ao atributo de conexão adicional para capturar eventos de DDL e especificar o esquema no qual os artefatos de banco de dados DDL operacionais são criados. Para obter mais informações, consulte [Configurações de endpoint e atributos extras de conexão (ECAs) ao usar o PostgreSQL como fonte de DMS](#CHAP_Source.PostgreSQL.ConnectionAttrib).
+ É possível substituir os parâmetros da string de conexão. Escolha esta opção para realizar uma das seguintes ações:
  + Especifique AWS DMS os parâmetros internos. Esses parâmetros são raramente necessários e, portanto, não são expostos na interface do usuário.
  + Especifique valores de passagem (passthru) para o cliente de banco de dados específico. AWS DMS inclui parâmetros de passagem na cadeia de conexão passada para o cliente do banco de dados.
+ Ao usar o parâmetro em nível de tabela nas versões 9.4 e posteriores `REPLICA IDENTITY` do PostgreSQL, você pode controlar as informações gravadas em registros de gravação antecipada (). WALs Em particular, ele faz isso para identificar linhas WALs que são atualizadas ou excluídas. `REPLICA IDENTITY FULL`registra os valores antigos de todas as colunas na linha. Use `REPLICA IDENTITY FULL` com cuidado para cada tabela, pois pode `FULL` gerar um número extra WALs que pode não ser necessário. Para obter mais informações, consulte [ALTER TABLE-REPLICA IDENTITY](https://www.postgresql.org/docs/devel/sql-altertable.html) 

## Ler a réplica como origem do PostgreSQL
<a name="CHAP_Source.PostgreSQL.ReadReplica"></a>

Use réplicas de leitura do PostgreSQL como fontes de CDC para reduzir a carga do banco de dados AWS DMS primário. Esse recurso está disponível no PostgreSQL 16.x e AWS DMS requer a versão 3.6.1 ou posterior. O uso de réplicas de leitura para processamento de CDC reduz o impacto operacional em seu banco de dados primário.

**nota**  
A versão 16.x do Amazon RDS para PostgreSQL tem limitações quanto à replicação lógica de réplicas de leitura nas configurações three-AZ (TAZ). Para obter suporte completo à replicação lógica de réplicas de leitura em implantações TAZ, você deve usar o PostgreSQL versão 17.x ou posterior.

### Pré-requisitos
<a name="CHAP_Source.PostgreSQL.ReadReplica.prereq"></a>

Antes de usar uma réplica de leitura como fonte de CDC para AWS DMS, você deve habilitar a replicação lógica na instância primária do banco de dados e em sua réplica de leitura para criar decodificação lógica em uma réplica de leitura. Execute as seguintes ações:
+ Habilite a replicação lógica na instância de banco de dados primário e em sua réplica de leitura com quaisquer outros parâmetros de banco de dados necessários. Para obter mais informações, consulte [Trabalhando com bancos AWS de dados PostgreSQL gerenciados como fonte de DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.RDSPostgreSQL).
+ Para tarefas somente de CDC, crie um slot de replicação na instância primária (gravadora). Para ter mais informações, consulte [Utilizar pontos de início nativos da CDC para configurar uma carga de CDC de uma origem PostgreSQL](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.v10). Essa ação é necessária, pois não é possível criar um slot de replicação em réplicas de leitura.
+ Para o PostgreSQL versão 16, o slot deve ser criado manualmente na réplica de leitura.
+ Para o PostgreSQL versão 17 e posterior, o slot de replicação deve ser criado no primário e sincronizado automaticamente com a réplica de leitura.
+ Ao usar Full Load \$1 CDC ou tarefas somente CDC, AWS DMS pode gerenciar automaticamente os slots de replicação lógica nas instâncias primárias, mas não nas réplicas de leitura. Em relação a réplicas de leitura do PostgreSQL versão 16, elimine e recrie manualmente os slots de replicação antes de reiniciar uma tarefa (não a retomar). Ignorar essa etapa pode causar falhas na tarefa ou posições de início de CDC incorretas. A partir da versão 17 do PostgreSQL, a sincronização lógica de slots da instância primária automatiza esse processo.

Depois de concluir os pré-requisitos, você pode configurar seu endpoint de origem com a replicação `SlotName` da AWS DMS fonte da réplica de leitura nas configurações do endpoint e configurar sua AWS DMS tarefa usando pontos iniciais nativos do CDC. Para obter mais informações, consulte [Configurações de endpoint e atributos extras de conexão (ECAs) ao usar o PostgreSQL como fonte de DMS [e Usar pontos de partida nativos do CDC para configurar uma carga CDC de uma](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.v10) fonte do PostgreSQL](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.ConnectionAttrib).

## Utilizar a configuração de endpoint `MapBooleanAsBoolean` do PostgreSQL
<a name="CHAP_Source.PostgreSQL.ConnectionAttrib.Endpointsetting"></a>

É possível utilizar as configurações de endpoint do PostgreSQL para mapear um booleano como um booleano da origem PostgreSQL para um destino Amazon Redshift. Por padrão, um tipo BOOLEAN é migrado como varchar(5). É possível especificar `MapBooleanAsBoolean` para permitir que o PostgreSQL migre o tipo booleano como booleano, conforme mostrado no exemplo a seguir.

```
--postgre-sql-settings '{"MapBooleanAsBoolean": true}'
```

Observe que você deve definir essa configuração nos endpoints de origem e de destino para que ela tenha efeito.

Como o MySQL não tem um tipo BOOLEAN, utilize uma regra de transformação em vez dessa configuração ao migrar dados BOOLEAN para o MySQL.

## Configurações de endpoint e atributos extras de conexão (ECAs) ao usar o PostgreSQL como fonte de DMS
<a name="CHAP_Source.PostgreSQL.ConnectionAttrib"></a>

Você pode usar configurações de endpoint e atributos extras de conexão (ECAs) para configurar seu banco de dados de origem do PostgreSQL. Você especifica as configurações do endpoint ao criar o endpoint de origem usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--postgre-sql-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações do endpoint e ECAs que você pode usar com o PostgreSQL como fonte.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Source.PostgreSQL.html)

## Limitações ao utilizar um banco de dados PostgreSQL como origem do DMS
<a name="CHAP_Source.PostgreSQL.Limitations"></a>

As limitações a seguir se aplicam à utilização do PostgreSQL como uma origem do AWS DMS:
+ AWS DMS não funciona com o Amazon RDS for PostgreSQL 10.4 ou o Amazon Aurora PostgreSQL 10.4 como origem ou destino.
+ Uma tabela capturada deve ter uma chave primária. Se uma tabela não tiver uma chave primária, AWS DMS ignorará as operações de registro DELETE e UPDATE dessa tabela. Como solução alternativa, consulte [Ativar a captura de dados de alteração (CDC) utilizando a replicação lógica](#CHAP_Source.PostgreSQL.Security). 

  **Observação:** não recomendamos migrar sem um Key/Unique índice primário, caso contrário, limitações adicionais se aplicam, como a capacidade de aplicação em lote “NÃO”, a capacidade de LOB completa, a validação de dados e a incapacidade de replicar para o destino do Redshift de forma eficiente.
+ AWS DMS ignora uma tentativa de atualizar um segmento de chave primária. Nesses casos, o destino identifica a atualização como uma que não atualizou nenhuma linha. No entanto, como os resultados da atualização de uma chave primária no PostgreSQL são imprevisíveis, nenhum registro é gravado na tabela de exceções.
+ AWS DMS não suporta a opção **Iniciar alterações do processo a partir da execução do carimbo de data/hora**.
+ AWS DMS não replica as alterações resultantes de operações de partição ou subpartição (`ADD``DROP`, ou`TRUNCATE`).
+ A replicação de várias tabelas com o mesmo nome em que cada nome tem um caso diferente (por exemplo, tabela1 e Tabela1) pode TABLE1 causar um comportamento imprevisível. Devido a esse problema, AWS DMS não oferece suporte a esse tipo de replicação.
+ Na maioria dos casos, AWS DMS oferece suporte ao processamento de alterações das instruções DDL CREATE, ALTER e DROP para tabelas. AWS DMS não suporta esse processamento de alterações se as tabelas forem mantidas em um bloco interno de corpo de função ou procedimento ou em outras construções aninhadas.

  Por exemplo, a seguinte alteração não é capturada.

  ```
  CREATE OR REPLACE FUNCTION attu.create_distributors1() RETURNS void
  LANGUAGE plpgsql
  AS $$
  BEGIN
  create table attu.distributors1(did serial PRIMARY KEY,name
  varchar(40) NOT NULL);
  END;
  $$;
  ```
+ Atualmente, os tipos de dados `boolean` em uma origem do PostgreSQL são migrados para um destino do SQL Server como o tipo de dados `bit` com valores inconsistentes. Como solução alternativa, pré-crie a tabela com um tipo de `VARCHAR(1)` dados para a coluna (ou AWS DMS crie a tabela). Depois, deixe o processamento downstream tratar um "F" como Falso e um "T" como Verdadeiro.
+ AWS DMS não suporta o processamento de alterações das operações TRUNCATE.
+ O tipo de dados OID LOB não é migrado para o destino.
+ AWS DMS suporta o tipo de dados PostGIS somente para migrações homogêneas.
+ Se a origem for um banco de dados PostgreSQL on-premises ou em uma instância do Amazon EC2, verifique se o plug-in de saída test\$1decoding está instalado no endpoint de origem. É possível encontrar esse plug-in no pacote contrib do PostgreSQL. Para obter mais informações sobre o plug-in de teste de decodificação, consulte a [documentação do PostgreSQL](https://www.postgresql.org/docs/10/static/test-decoding.html).
+ AWS DMS não oferece suporte ao processamento de alterações para definir e cancelar a definição dos valores padrão da coluna (usando a cláusula ALTER COLUMN SET DEFAULT nas instruções ALTER TABLE).
+ AWS DMS não oferece suporte ao processamento de alterações para definir a nulidade da coluna (usando a cláusula ALTER COLUMN [SET\$1DROP] NOT NULL nas instruções ALTER TABLE).
+ Quando a replicação lógica está ativada, o número máximo de alterações mantidas na memória por transação é de 4 MB. Depois disso, as alterações são transferidas para o disco. Como resultado, `ReplicationSlotDiskUsage` aumenta e `restart_lsn` não avança até que a transação seja concluída ou interrompida e a reversão seja concluída. Como é uma transação longa, ela pode demorar muito tempo para reverter. Portanto, evite transações de longa execução ou várias subtransações quando a replicação lógica estiver habilitada. Em vez disso, divida a transação em várias transações menores. 

  Nas versões 13 e posteriores do Aurora PostgreSQL, você pode ajustar o parâmetro `logical_decoding_work_mem` para controlar quando o DMS despeja dados de alteração para o disco. Para obter mais informações, consulte [Arquivos de despejo no Aurora PostgreSQL](CHAP_Troubleshooting_Latency_Source_PostgreSQL.md#CHAP_Troubleshooting_Latency_Source_PostgreSQL_Spill).
+ Uma tabela com o tipo de dados ARRAY deve ter uma chave primária. Uma tabela com um tipo de dados ARRAY sem uma chave primária é suspensa durante a carga máxima.
+ AWS DMS [não oferece suporte à migração de metadados de tabela relacionados ao particionamento ou herança de tabelas.](https://www.postgresql.org/docs/15/ddl-inherit.html) Ao AWS DMS encontrar uma tabela particionada ou uma tabela que usa herança, o seguinte comportamento é observado:
  + AWS DMS identifica e relata as tabelas principal e secundária envolvidas no particionamento ou na herança no banco de dados de origem.
  + **Criação de tabela no destino**: no banco de dados de destino, AWS DMS cria a tabela como uma tabela padrão (não particionada, não herdada), preservando a estrutura e as propriedades da (s) tabela (s) selecionada (s), mas não a lógica de particionamento ou herança.
  + **Diferenciação de registros em tabelas herdadas**: para tabelas que usam herança, AWS DMS não distingue registros pertencentes a tabelas secundárias ao preencher a tabela principal. Por isso, ele não utiliza consultas SQL com sintaxe, como `SELECT * FROM ONLY parent_table_name`.
+ Para replicar tabelas particionadas de uma origem PostgreSQL para um destino PostgreSQL, primeiro crie manualmente as tabelas pai e filho no destino. Defina uma tarefa separada a fim de replicar nessas tabelas. Nesse caso, defina a configuração da tarefa como **Truncar antes de carregar**.
+ O tipo de dados `NUMERIC` do PostgreSQL não tem um tamanho fixo. Na transferência de dados do tipo `NUMERIC` sem precisão e escala, o DMS utiliza `NUMERIC(28,6)` (uma precisão de 28 e escala 6) por padrão. Por exemplo, o valor 0,611111104488373 da origem é convertido em 0,611111 no destino do PostgreSQL.
+ AWS DMS oferece suporte ao Aurora PostgreSQL Serverless V1 como fonte somente para tarefas de carga total. AWS DMS oferece suporte ao Aurora PostgreSQL Serverless V2 como fonte para carga total, carga total e tarefas CDC e somente CDC.
+ AWS DMS não suporta a replicação de uma tabela com um índice exclusivo criado com uma função de coalescência.
+ Se a definição da chave primária na origem e no destino não corresponder, os resultados da replicação poderão ser imprevisíveis.
+ Ao utilizar o recurso Carga paralela, a segmentação de tabelas de acordo com partições ou subpartições não é compatível. Para obter mais informações sobre Carga paralela, consulte [Utilizar carga paralela para tabelas, visualizações e coleções selecionadas](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md#CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.ParallelLoad). 
+ AWS DMS não oferece suporte a restrições diferidas.
+ AWS DMS a versão 3.4.7 suporta o PostgreSQL 14.x como fonte com estas limitações:
  + AWS DMS não suporta o processamento de alterações de confirmações em duas fases.
  + AWS DMS não oferece suporte à replicação lógica para transmitir transações longas em andamento.
+ AWS DMS não oferece suporte ao CDC para Amazon RDS Proxy for PostgreSQL como fonte.
+ Ao utilizar [filtros de origem](CHAP_Tasks.CustomizingTasks.Filters.md) que não contêm uma coluna de chave primária, as operações `DELETE` não serão capturadas.
+ Se o banco de dados de origem também for um destino para outro sistema de replicação de terceiros, as alterações de DDL podem não ser migradas durante a CDC. Porque essa situação pode impedir que o acionador de eventos `awsdms_intercept_ddl` seja acionado. Para contornar a situação, modifique esse acionador no banco de dados de origem da seguinte maneira:

  ```
  alter event trigger awsdms_intercept_ddl enable always;
  ```
+ AWS DMS não suporta a replicação de alterações feitas nas definições de chave primária no banco de dados de origem. Se a estrutura da chave primária for alterada durante uma tarefa de replicação ativa, as alterações subsequentes nas tabelas afetadas não serão replicadas para o destino.
+ Na replicação de DDL como parte de um script, o número total máximo de comandos de DDL por script é 8.192 e o número total máximo de linhas por script é 8.192 linhas.
+ AWS DMS não oferece suporte a visualizações materializadas.
+ Para tarefas de carga total e CDC usando uma réplica de leitura como origem, AWS DMS não é possível criar slots de replicação em réplicas de leitura.

## Tipos de dados de origem para o PostgreSQL
<a name="CHAP_Source-PostgreSQL-DataTypes"></a>

A tabela a seguir mostra os tipos de dados de origem do PostgreSQL que são compatíveis com o AWS DMS uso e o mapeamento AWS DMS padrão para os tipos de dados.

Para obter informações sobre como visualizar o tipo de dados mapeado no destino, consulte a seção relativa ao endpoint de destino que você está usando.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  Tipos de dados do PostgreSQL  |  Tipos de dados do DMS  | 
| --- | --- | 
|  INTEGER  |  INT4  | 
|  SMALLINT  |  INT2  | 
|  BIGINT  |  INT8  | 
|  NUMERIC (p,s)  |  Se a precisão estiver entre 0 e 38, use NUMERIC. Se a precisão for maior ou igual a 39, use STRING.  | 
|  DECIMAL(P,S)  |  Se a precisão estiver entre 0 e 38, use NUMERIC. Se a precisão for maior ou igual a 39, use STRING.  | 
|  REAL  |  REAL4  | 
|  DOUBLE  |  REAL8  | 
|  SMALLSERIAL  |  INT2  | 
|  SERIAL  |  INT4  | 
|  BIGSERIAL  |  INT8  | 
|  MONEY  |  NUMERIC(38,4) O tipo de dados MONEY é mapeado para FLOAT no SQL Server.  | 
|  CHAR  |  WSTRING (1)  | 
|  CHAR(N)  |  WSTRING (n)  | 
|  VARCHAR(N)  |  WSTRING (n)  | 
|  TEXT  |  NCLOB  | 
|  CITEXT  |  NCLOB  | 
|  BYTEA  |  BLOB  | 
|  TIMESTAMP  |  DATETIME  | 
|  TIMESTAMP WITH TIME ZONE  |  DATETIME  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  TIME WITH TIME ZONE  |  TIME  | 
|  INTERVAL  |  STRING (128)—1 YEAR, 2 MONTHS, 3 DAYS, 4 HOURS, 5 MINUTES, 6 SECONDS  | 
|  BOOLEAN  |  CHAR (5) falso ou verdadeiro  | 
|  ENUM  |  STRING (64)  | 
|  CIDR  |  STRING (50)  | 
|  INET  |  STRING (50)  | 
|  MACADDR  |  STRING (18)  | 
|  BIT (n)  |  STRING (n)  | 
|  BIT VARYING (n)  |  STRING (n)  | 
|  UUID  |  STRING  | 
|  TSVECTOR  |  CLOB  | 
|  TSQUERY  |  CLOB  | 
|  XML  |  CLOB  | 
|  POINT  |  STRING (255) "(x,y)"  | 
|  LINE  |  STRING (255) "(x,y,z)"  | 
|  LSEG  |  STRING (255) "((x1,y1),(x2,y2))"  | 
|  BOX  |  STRING (255) "((x1,y1),(x2,y2))"  | 
|  PATH  |  CLOB "((x1,y1),(xn,yn))"  | 
|  POLYGON  |  CLOB "((x1,y1),(xn,yn))"  | 
|  CIRCLE  |  STRING (255) "(x,y),r"  | 
|  JSON  |  NCLOB  | 
|  JSONB  |  NCLOB  | 
|  ARRAY  |  NCLOB  | 
|  COMPOSITE  |  NCLOB  | 
|  HSTORE  |  NCLOB  | 
|  INT4ALCANCE  |  STRING (255)  | 
|  INT8ALCANCE  |  STRING (255)  | 
|  NUMRANGE  |  STRING (255)  | 
|  STRRANGE  |  STRING (255)  | 

### Como trabalhar com tipos de dados de origem LOB para PostgreSQL
<a name="CHAP_Source-PostgreSQL-DataTypes-LOBs"></a>

Os tamanhos de colunas do PostgreSQL afetam a conversão de tipos de dados LOB do PostgreSQL em tipos de dados do AWS DMS . Para trabalhar com isso, siga estas etapas para os seguintes tipos de dados do AWS DMS :
+ BLOB: defina **Limitar tamanho de LOB em** o valor de **Tamanho máximo de LOB (KB)** na criação da tarefa.
+ CLOB — A replicação trata cada personagem como um UTF8 personagem. Portanto, localize o tamanho do texto de caracteres mais longo na coluna, mostrado aqui como `max_num_chars_text`. Utilize esse tamanho para especificar o valor de **Limitar o tamanho do LOB em**. Se os dados incluírem caracteres de 4 bytes, multiplique por 2 para especificar o valor de ** Limitar o valor de LOB em**, que é em bytes. Nesse caso, **Limitar o tamanho de LOB para** será igual a `max_num_chars_text` multiplicado por 2.
+ NCLOB: a replicação trata cada caractere como um caractere de byte duplo. Portanto, localize o tamanho do texto de caracteres mais longo na coluna (`max_num_chars_text`) e multiplique por 2. Faça isso para especificar o valor de **Limitar o tamanho do LOB em**. Nesse caso, **Limitar o tamanho de LOB para** será igual a `max_num_chars_text` multiplicado por 2. Se os dados incluírem caracteres de 4 bytes, multiplique por 2 novamente. Nesse caso,** Limitar o tamanho de LOB para** será igual a `max_num_chars_text` multiplicado por 4.

# Usando um banco de dados compatível com MySQL como fonte para AWS DMS
<a name="CHAP_Source.MySQL"></a>

Você pode migrar dados de qualquer banco de dados compatível com MySQL (MySQL, MariaDB ou Amazon Aurora MySQL) usando o Database Migration Service. AWS 

Para obter informações sobre as versões do MySQL que oferecem AWS DMS suporte como fonte, consulte. [Fontes para AWS DMS](CHAP_Introduction.Sources.md) 

Você pode usar o SSL para criptografar conexões entre o endpoint compatível com MySQL e a instância de replicação. Para obter mais informações sobre o uso do SSL com um endpoint compatível com MySQL, consulte [Usando SSL com AWS Database Migration Service](CHAP_Security.SSL.md).

Nas seções a seguir, o termo "autogerenciado" se aplica a qualquer banco de dados instalado on-premises ou no Amazon EC2. O termo "gerenciado pela AWS" se aplica a qualquer banco de dados no Amazon RDS, no Amazon Aurora, ou no Amazon S3.

Para obter detalhes adicionais sobre como trabalhar com bancos de dados compatíveis com MySQL AWS DMS, consulte as seções a seguir.

**Topics**
+ [Migrando do MySQL para o MySQL usando AWS DMS](#CHAP_Source.MySQL.Homogeneous)
+ [Usando qualquer banco de dados compatível com MySQL como fonte para AWS DMS](#CHAP_Source.MySQL.Prerequisites)
+ [Usando um banco de dados autogerenciado compatível com MySQL como fonte para AWS DMS](#CHAP_Source.MySQL.CustomerManaged)
+ [Usando um banco AWS de dados compatível com MySQL gerenciado como fonte para AWS DMS](#CHAP_Source.MySQL.AmazonManaged)
+ [Limitações no uso de um banco de dados MySQL como fonte para AWS DMS](#CHAP_Source.MySQL.Limitations)
+ [Compatibilidade com transações XA](#CHAP_Source.MySQL.XA)
+ [Configurações de endpoint ao usar o MySQL como fonte para AWS DMS](#CHAP_Source.MySQL.ConnectionAttrib)
+ [Tipos de dados de origem do MySQL](#CHAP_Source.MySQL.DataTypes)

**nota**  
Ao configurar as regras de mapeamento AWS Database Migration Service (AWS DMS), é importante evitar o uso de curingas (%) para nomes de bancos de dados ou esquemas. Em vez disso, você deve especificar explicitamente somente os bancos de dados criados pelo usuário que precisam ser migrados. O uso de um caractere curinga inclui todos os bancos de dados no processo de migração, inclusive bancos dados do sistema que não são necessários na instância de destino. Como o usuário principal do Amazon RDS para MySQL não tem as permissões necessárias para importar dados para os bancos de dados do sistema de destino, a tentativa de migrar esses bancos de dados do sistema falha.

## Migrando do MySQL para o MySQL usando AWS DMS
<a name="CHAP_Source.MySQL.Homogeneous"></a>

Para uma migração heterogênea, em que você está migrando de um mecanismo de banco de dados diferente do MySQL para um banco de dados MySQL AWS DMS , é quase sempre a melhor ferramenta de migração a ser usada. Mas para uma migração homogênea, na qual você está migrando de um banco de dados MySQL para um banco de dados MySQL, é recomendável utilizar um projeto de migração de dados homogênea. As migrações de dados homogêneas utilizam ferramentas de banco de dados nativas para fornecer um desempenho e precisão aprimorados da migração de dados em comparação com o AWS DMS.

## Usando qualquer banco de dados compatível com MySQL como fonte para AWS DMS
<a name="CHAP_Source.MySQL.Prerequisites"></a>

Antes de começar a trabalhar com um banco de dados MySQL como fonte para AWS DMS, verifique se você tem os seguintes pré-requisitos. Esses pré-requisitos se aplicam a fontes autogerenciadas ou gerenciadas. AWS

Você deve ter uma conta para AWS DMS que tenha a função de administrador de replicação. O perfil precisa dos seguintes privilégios:
+ **REPLICATION CLIENT**: este privilégio é necessário apenas para tarefas de CDC. Em outras palavras, full-load-only as tarefas não exigem esse privilégio. 
**nota**  
Para o MariaDB versão 10.5.2\$1, você pode usar o BINLOG MONITOR — ele substitui o REPLICATION CLIENT.
+ **REPLICATION SLAVE**: este privilégio é necessário apenas para tarefas de CDC. Em outras palavras, full-load-only as tarefas não exigem esse privilégio.
+ **SUPER**: este privilégio é necessário somente nas versões do MySQL anteriores à versão 5.6.6.

O AWS DMS usuário também deve ter privilégios SELECT para as tabelas de origem designadas para replicação.

Conceda os seguintes privilégios se você usar avaliações de pré-migração específicas do MySQL:

```
grant select on mysql.user to <dms_user>;
grant select on mysql.db to <dms_user>;
grant select on mysql.tables_priv to <dms_user>;
grant select on mysql.role_edges to <dms_user>  #only for MySQL version 8.0.11 and higher
grant select on performance_schema.replication_connection_status to <dms_user>;  #Required for primary instance validation - MySQL version 5.7 and higher only
```

Se você estiver usando uma fonte do RDS e planeja executar avaliações de pré-migração específicas do MySQL, adicione a seguinte permissão:

```
grant select on mysql.rds_configuration to <dms_user>;  #Required for binary log retention check
```

Se o parâmetro `BatchEnable` for `true`, será necessário conceder:

```
grant create temporary tables on `<schema>`.* to <dms_user>;
```

## Usando um banco de dados autogerenciado compatível com MySQL como fonte para AWS DMS
<a name="CHAP_Source.MySQL.CustomerManaged"></a>

É possível utilizar os bancos de dados autogerenciados a seguir, compatíveis com MySQL como origens para o AWS DMS:
+ MySQL Community Edition
+ MySQL Standard Edition
+ MySQL Enterprise Edition
+ MySQL Cluster Carrier Grade Edition
+ MariaDB Community Edition
+ MariaDB Enterprise Edition
+ MariaDB Column Store

Para utilizar a CDC, ative o registro em log binário. Para habilitar o registro binário, os parâmetros a seguir devem ser configurados nos arquivos `my.ini` (Windows) ou `my.cnf` (UNIX) do MySQL.


| Parâmetro | Valor | 
| --- | --- | 
| `server_id` | Defina este parâmetro com um valor maior ou igual a 1. | 
| `log-bin` | Defina a rota para o arquivo de log binário, por exemplo `log-bin=E:\MySql_Logs\BinLog`. Não inclua a extensão do arquivo. | 
| `binlog_format` | Defina este parâmetro como `ROW`. Essa configuração é recomendável durante a replicação porque, em certos casos, quando `binlog_format` está definido como `STATEMENT`, ele pode causar inconsistência ao replicar dados para o destino. O mecanismo de banco de dados também grava dados inconsistentes semelhantes no destino quando `binlog_format` está definido como `MIXED`, porque o mecanismo de banco de dados muda automaticamente para o registro em log baseado em `STATEMENT`, o que pode resultar na gravação de dados inconsistentes no banco de dados de destino. | 
| `expire_logs_days` | Defina este parâmetro com um valor maior ou igual a 1. Para evitar o uso excessivo de espaço em disco, recomendamos que você não utilize o valor padrão de 0. | 
| `binlog_checksum` | Defina esse parâmetro como `NONE` para a versão 3.4.7 ou anterior do DMS. | 
| `binlog_row_image` | Defina este parâmetro como `FULL`. | 
| `log_slave_updates` | Defina este parâmetro como `TRUE` se você estiver utilizando uma réplica de leitura do MySQL ou MariaDB como origem. | 

Se você estiver usando uma réplica de leitura do MySQL ou do MariaDB como origem para uma tarefa de migração do DMS usando o modo **Migrar dados existentes e replicar alterações contínuas**, há a possibilidade de perda de dados. O DMS não gravará uma transação durante os modos de carga máxima ou CDC nas seguintes condições:
+ A transação foi confirmada na instância primária antes do início da tarefa no DMS.
+ A transação não havia sido confirmada com a réplica até a tarefa do DMS já ter sido iniciada, devido ao atraso entre a instância primária e a réplica.

Quanto maior o atraso entre a instância primária e a réplica, maior o potencial de perda de dados.

Se sua origem NDB (cluster) utiliza o mecanismo de banco de dados, os parâmetros a seguir precisarão ser configurados para habilitar CDC em tabelas que utilizam esse mecanismo de armazenamento. Adicione essas alterações no arquivo `my.ini` do MySQL (Windows) ou `my.cnf` (UNIX).


| Parâmetro | Valor | 
| --- | --- | 
| `ndb_log_bin` | Defina este parâmetro como `ON`. Este valor garante que as alterações em tabelas clusterizadas são registradas no log binário. | 
| `ndb_log_update_as_write` | Defina este parâmetro como `OFF`. Este valor impede o registro de instruções UPDATE como instruções INSERT no log binário. | 
| `ndb_log_updated_only` | Defina este parâmetro como `OFF`. Este valor garante que o log binário contém a linha completa e não apenas as colunas alteradas. | 

## Usando um banco AWS de dados compatível com MySQL gerenciado como fonte para AWS DMS
<a name="CHAP_Source.MySQL.AmazonManaged"></a>

Você pode usar os seguintes bancos de dados compatíveis AWS com MySQL gerenciados como fontes para: AWS DMS
+ MySQL Community Edition
+ MariaDB Community Edition
+ Amazon Aurora Edição Compatível com MySQL

Ao usar um banco AWS de dados compatível com MySQL gerenciado como fonte para AWS DMS, verifique se você tem os seguintes pré-requisitos para o CDC:
+ Para ativar os logs binários para o RDS para MySQL e para o RDS para MariaDB, ative backups automáticos no nível da instância. Para ativar logs binários para um cluster do Aurora MySQL, altere a variável `binlog_format` no grupo de parâmetros.

  Para obter mais informações sobre a configuração de backups automáticos, consulte [Trabalhar com backups automáticos](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html) no *Guia do usuário do Amazon RDS*.

  Para obter mais informações sobre como configurar o registro em log binário para um banco de dados Amazon RDS para MySQL, consulte [Configuração do formato de registro em log binário](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.MySQL.BinaryFormat.html) no *Guia do usuário do Amazon RDS*. 

  Para obter mais informações sobre como configurar o registro em log binário para um cluster do Aurora MySQL, consulte [Como faço para ativar o registro em log binário para meu cluster do Amazon Aurora MySQL?](https://aws.amazon.com/premiumsupport/knowledge-center/enable-binary-logging-aurora/). 
+ Se você planejar utilizar a CDC, ative o registro em log binário. Para obter mais informações sobre como configurar o registro em log binário para um banco de dados Amazon RDS para MySQL, consulte [Configuração do formato de registro em log binário](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.MySQL.BinaryFormat.html) no *Guia do usuário do Amazon RDS*.
+ Certifique-se de que os registros binários estejam disponíveis para AWS DMS o. Como os bancos AWS de dados compatíveis com MySQL gerenciados eliminam os registros binários o mais rápido possível, você deve aumentar o tempo em que os registros permanecem disponíveis. Por exemplo, para aumentar a retenção de log para 24 horas, execute o comando a seguir. 

  ```
   call mysql.rds_set_configuration('binlog retention hours', 24);
  ```
+ Defina o parâmetro `binlog_format` como `"ROW"`.
**nota**  
No MySQL ou no MariaDB, `binlog_format` é um parâmetro dinâmico, portanto, você não precisa reinicializar para que o novo valor entre em vigor. No entanto, o novo valor só se aplicará às novas sessões. Se você alternar `ROW` como `binlog_format` para fins de replicação, o banco de dados ainda poderá criar registros em logs binários subsequentes utilizando o formato `MIXED`, se essas sessões tiverem iniciado antes da alteração do valor. Isso pode AWS DMS impedir a captura adequada de todas as alterações no banco de dados de origem. Ao alterar a configuração `binlog_format` em um banco de dados MariaDB ou MySQL, reinicie o banco de dados para fechar todas as sessões existentes ou reinicie qualquer aplicação executando operações DML (linguagem de manipulação de dados). Forçar seu banco de dados a reiniciar todas as sessões após alterar o `binlog_format` parâmetro para `ROW` garantirá que seu banco de dados grave todas as alterações subsequentes no banco de dados de origem usando o formato correto, para que AWS DMS possa capturar essas alterações adequadamente.
+ Defina o parâmetro `binlog_row_image` como `"Full"`. 
+ Defina o parâmetro `binlog_checksum` como `"NONE"` para a versão 3.4.7 ou anterior do DMS. Para obter mais informações sobre a configuração de parâmetros no Amazon RDS MySQL, consulte [Trabalhar com backups automáticos](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html) no *Guia do usuário do Amazon RDS*.
+ Se estiver utilizando uma réplica de leitura do Amazon RDS MySQL ou do Amazon RDS MariaDB como origem, ative os backups na réplica de leitura e garanta que o parâmetro `log_slave_updates` esteja definido como `TRUE`.

## Limitações no uso de um banco de dados MySQL como fonte para AWS DMS
<a name="CHAP_Source.MySQL.Limitations"></a>

Ao utilizar um banco de dados MySQL como uma origem, considere o seguinte:
+  A captura de dados de alteração (CDC) não é compatível com o Amazon RDS MySQL 5.5 ou inferior. Para o Amazon RDS MySQL, utilize a versão 5.6, 5.7 ou 8.0 para ativar a CDC. A CDC é compatível com origens do MySQL 5.5 autogerenciado. 
+ Para CDC, `CREATE TABLE`, `ADD COLUMN` e `DROP COLUMN` que alteram o tipo de dados da coluna e `renaming a column` são compatíveis. No entanto, `DROP TABLE`, `RENAME TABLE` e as atualizações feitas em outros atributos, como o valor padrão da coluna, a nulidade da coluna, o conjunto de caracteres e assim por diante, não são compatíveis.
+  Para tabelas particionadas na origem, quando você define o **modo de preparação da tabela Target** como **Drop tables on target**, AWS DMS cria uma tabela simples sem partições no destino do MySQL. Para migrar tabelas particionadas para uma tabela particionada no destino, pré-crie as tabelas particionadas no banco de dados MySQL de destino.
+  O uso de uma `ALTER TABLE table_name ADD COLUMN column_name` instrução para adicionar colunas no início (FIRST) ou no meio de uma tabela (AFTER) não é compatível com destinos relacionais. As colunas são sempre adicionadas ao final da tabela. Quando o destino é o Amazon S3 ou o Amazon Kinesis Data Streams, é possível adicionar colunas usando FIRST ou AFTER.
+ A CDC não é compatível quando um nome de tabela contém caracteres maiúsculos e minúsculos, e o mecanismo de origem está hospedado em um sistema operacional com nomes de arquivos que não diferenciam maiúsculas de minúsculas. Um exemplo é o Microsoft Windows ou o OS X que utilizam HFS\$1.
+ É possível utilizar a Edição com Tecnologia Sem Servidor v1 compatível com o Aurora MySQL para carga máxima, mas não é possível utilizá-la para CDC. Isso ocorre porque não é possível ativar os pré-requisitos para o MySQL. Para obter mais informações, consulte [Grupos de parâmetros e o Aurora Sem Servidor v1](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.how-it-works.html#aurora-serverless.parameter-groups). 

  A Edição com Tecnologia Sem Servidor v2 compatível com o Aurora MySQL pode ser utilizada com CDC.
+  O atributo AUTO\$1INCREMENT em uma coluna não é migrado para uma coluna do banco de dados de destino.
+  A captura de alterações quando os logs binários não estão armazenados em armazenamento de bloco padrão não é compatível. Por exemplo, a CDC não funciona quando os logs binários são armazenados no Amazon S3.
+  AWS DMS cria tabelas de destino com o mecanismo de armazenamento InnoDB por padrão. Se precisar utilizar um mecanismo de armazenamento diferente do InnoDB, crie a tabela manualmente e migre-a utilizando o modo [Não executar nenhuma ação](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html).
+ Você não pode usar réplicas do Aurora MySQL como fonte, a AWS DMS menos que seu modo de tarefa de migração do DMS seja **Migrar** dados existentes — somente com carga total.
+  Se a origem compatível com MySQL for interrompida durante a carga máxima, a tarefa do AWS DMS não será interrompida com um erro. A tarefa terminará com êxito, mas o destino poderá estar fora de sincronia com a origem. Se isso acontecer, reinicie a tarefa ou recarregue as tabelas afetadas.
+  Índices criados em uma parte do valor de uma coluna não são migrados. Por exemplo, o índice CREATE INDEX first\$1ten\$1chars ON customer (name(10)) não é criado no destino.
+ Em alguns casos, a tarefa está configurada para não replicar LOBs (” SupportLobs "é falso nas configurações da tarefa ou **Não incluir colunas LOB** é escolhido no console de tarefas). Nesses casos, AWS DMS não migra nenhuma coluna MEDIUMBLOB, LONGBLOB, MEDIUMTEXT e LONGTEXT para o destino.

  As colunas BLOB, TINYBLOB, TEXT e TINYTEXT não são afetadas e são migradas para o destino.
+ Tabelas de dados temporais ou tabelas com versão do sistema não são compatíveis com bancos de dados MariaDB de origem e de destino.
+ Se estiver migrando entre dois clusters do Amazon RDS Aurora MySQL, o endpoint de origem do RDS Aurora MySQL deve ser uma instância, não uma instância de réplica. read/write 
+ AWS DMS atualmente não oferece suporte à migração de visualizações para o MariaDB.
+ AWS DMS não suporta alterações de DDL para tabelas particionadas para MySQL. Para ignorar a suspensão de tabela para alterações de DDL da partição durante a CDC, defina `skipTableSuspensionForPartitionDdl` como `true`.
+ AWS DMS só suporta transações XA na versão 3.5.0 e superior. As versões anteriores não oferecem suporte a transações XA. AWS DMS não suporta transações XA no MariaDB versão 10.6 ou superior. Para obter mais informações, consulte a seguir. [Compatibilidade com transações XA](#CHAP_Source.MySQL.XA)
+ AWS DMS não é usado GTIDs para replicação, mesmo que os dados de origem os contenham. 
+ AWS DMS não é compatível com o log binário aprimorado do Aurora MySQL.
+ AWS DMS não oferece suporte à compactação de transações de log binário.
+ AWS DMS não propaga eventos ON DELETE CASCADE e ON UPDATE CASCADE para bancos de dados MySQL usando o mecanismo de armazenamento InnoDB. Para esses eventos, o MySQL não gera log binário de eventos para refletir as operações em cascata nas tabelas secundárias. Consequentemente, não é AWS DMS possível replicar as alterações correspondentes nas tabelas secundárias. Para obter mais informações, consulte [Índices, chaves estrangeiras ou atualizações ou exclusões em cascata não migrados](CHAP_Troubleshooting.md#CHAP_Troubleshooting.MySQL.FKsAndIndexes).
+ AWS DMS não captura alterações nas colunas computadas (`VIRTUAL`e`GENERATED ALWAYS`). Para trabalhar com essa limitação, faça o seguinte.
  + Pré-crie a tabela de destino no banco de dados de destino e crie a tarefa AWS DMS com a configuração de tarefa de carga máxima `DO_NOTHING` ou `TRUNCATE_BEFORE_LOAD`.
  + Adicione uma regra de transformação para remover a coluna computada do escopo da tarefa. Para obter mais informações sobre regras transformação, consulte [Regras de transformação e ações](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).
+ Devido à limitação interna do MySQL, BINLOGs não AWS DMS pode processar mais do que 4 GB. BINLOGs maiores que 4 GB podem resultar em falhas nas tarefas do DMS ou em outros comportamentos imprevisíveis. Você deve reduzir o tamanho das transações para evitar BINLOGs mais de 4 GB.
+ AWS DMS não suporta marcações invertidas (```) ou aspas simples (`'`) em nomes de esquemas, tabelas e colunas.
+ AWS DMS não migra dados de colunas invisíveis em seu banco de dados de origem. Para incluir essas colunas no escopo da migração, utilize a instrução ALTER TABLE para tornar essas colunas visíveis.

## Compatibilidade com transações XA
<a name="CHAP_Source.MySQL.XA"></a>

Uma transação de arquitetura estendida (XA) é uma transação que pode ser utilizada para agrupar uma série de operações de vários recursos transacionais em uma única transação global confiável. Uma transação XA utiliza um protocolo de confirmação de duas fases. Em geral, a captura de alterações enquanto há transações XA abertas pode resultar em perda de dados. Se o banco de dados não utilizar transações XA, é possível ignorar essa permissão e a configuração `IgnoreOpenXaTransactionsCheck` utilizando o valor padrão `TRUE`. Para começar a replicar a partir de uma origem que possui transações XA, faça o seguinte:
+ Certifique-se de que o usuário do AWS DMS endpoint tenha a seguinte permissão:

  ```
  grant XA_RECOVER_ADMIN on *.* to 'userName'@'%';
  ```
+ Defina a configuração do endpoint `IgnoreOpenXaTransactionsCheck` como `false`.

**nota**  
AWS DMS não suporta transações XA no MariaDB Source DB versão 10.6 ou superior.

## Configurações de endpoint ao usar o MySQL como fonte para AWS DMS
<a name="CHAP_Source.MySQL.ConnectionAttrib"></a>

É possível utilizar as configurações de endpoint para configurar o banco de dados MySQL de origem de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de origem usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--my-sql-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o MySQL como origem.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Source.MySQL.html)

## Tipos de dados de origem do MySQL
<a name="CHAP_Source.MySQL.DataTypes"></a>

A tabela a seguir mostra os tipos de dados de origem do banco de dados MySQL que são suportados durante o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados.

Para obter informações sobre como visualizar o tipo de dados mapeado no destino, consulte a seção relativa ao endpoint de destino que você está usando.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  Tipos de dados do MySQL  |  AWS DMS tipos de dados  | 
| --- | --- | 
|  INT  |  INT4  | 
|  BIGINT  |  INT8  | 
|  MEDIUMINT  |  INT4  | 
|  TINYINT  |  INT1  | 
|  SMALLINT  |  INT2  | 
|  UNSIGNED TINYINT  |  UINT1  | 
|  UNSIGNED SMALLINT  |  UINT2  | 
|  UNSIGNED MEDIUMINT  |  UINT4  | 
|  UNSIGNED INT  |  UINT4  | 
|  UNSIGNED BIGINT  |  UINT8  | 
|  DECIMAL(10)  |  NUMERIC (10,0)  | 
|  BINARY  |  BYTES(1)  | 
|  BIT  |  BOOLEAN  | 
|  BIT(64)  |  BYTES(8)  | 
|  BLOB  |  BYTES(65.535)  | 
|  LONGBLOB  |  BLOB  | 
|  MEDIUMBLOB  |  BLOB  | 
|  TINYBLOB  |  BYTES(255)  | 
|  DATE  |  DATE  | 
|  DATETIME  |  DATETIME DATETIME sem um valor entre parênteses é replicado sem milissegundos. DATETIME com um valor entre parênteses de 1 a 5 (como`DATETIME(5)`) é replicado com milissegundos. Ao replicar uma coluna DATETIME, a hora permanece a mesma no destino. Não é convertida em UTC.  | 
|  TIME  |  STRING  | 
|  TIMESTAMP  |  DATETIME Ao replicar uma coluna TIMESTAMP, a hora é convertida em UTC no destino.  | 
|  YEAR  |  INT2  | 
|  DOUBLE  |  REAL8  | 
|  FLOAT  |  REAL(DOUBLE) Se os valores FLOAT não estiverem no intervalo a seguir, utilize uma transformação para mapear FLOAT para STRING. Para obter mais informações sobre transformações, consulte [Regras de transformação e ações](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md). Os intervalos compatíveis com FLOAT são -1.79E\$1308 a -2.23E-308, 0 e 2.23E-308 a 1.79E\$1308  | 
|  VARCHAR (45)  |  WSTRING (45)  | 
|  VARCHAR (2000)  |  WSTRING (2000)  | 
|  VARCHAR (4000)  |  WSTRING (4000)  | 
|  VARBINARY (4000)  |  BYTES (4000)  | 
|  VARBINARY (2000)  |  BYTES (2000)  | 
|  CHAR  |  WSTRING  | 
|  TEXT  |  WSTRING  | 
|  LONGTEXT  |  NCLOB  | 
|  MEDIUMTEXT  |  NCLOB  | 
|  TINYTEXT  |  WSTRING(255)  | 
|  GEOMETRY  |  BLOB  | 
|  POINT  |  BLOB  | 
|  LINESTRING  |  BLOB  | 
|  POLYGON  |  BLOB  | 
|  MULTIPOINT  |  BLOB  | 
|  MULTILINESTRING  |  BLOB  | 
|  MULTIPOLYGON  |  BLOB  | 
|  GEOMETRYCOLLECTION  |  BLOB  | 
|  ENUM  |  SEQUÊNCIA DE CARACTERES () *length* Aqui *length* está o comprimento do valor mais longo no ENUM.  | 
|  SET  |  SEQUÊNCIA DE CARACTERES () *length* Aqui *length* está o tamanho total de todos os valores no SET, incluindo vírgulas.  | 
|  JSON  |  CLOB  | 

**nota**  
Em alguns casos, é possível especificar os tipos de dados DATETIME e TIMESTAMP com um valor “zero” (ou seja, 0000-00-00). Nesse caso, verifique se o banco de dados de destino na tarefa de replicação é compatível com valores “zero” para os tipos de dados DATETIME e TIMESTAMP. Caso contrário, esses valores serão registrados como nulos no destino.

# Usando um banco de dados SAP ASE como fonte para AWS DMS
<a name="CHAP_Source.SAP"></a>

Você pode migrar dados de um banco de dados SAP Adaptive Server Enterprise (ASE), anteriormente conhecido como Sybase, usando. AWS DMS Com um banco de dados SAP ASE como fonte, você pode migrar dados para qualquer um dos outros bancos de dados de AWS DMS destino compatíveis. 

Para obter informações sobre as versões do SAP ASE que oferecem AWS DMS suporte como fonte, consulte[Fontes para AWS DMS](CHAP_Introduction.Sources.md).

Para obter detalhes adicionais sobre como trabalhar com bancos de dados SAP ASE AWS DMS, consulte as seções a seguir.

**Topics**
+ [Pré-requisitos para usar um banco de dados SAP ASE como fonte para AWS DMS](#CHAP_Source.SAP.Prerequisites)
+ [Limitações no uso do SAP ASE como fonte para AWS DMS](#CHAP_Source.SAP.Limitations)
+ [Permissões necessárias para usar o SAP ASE como fonte para AWS DMS](#CHAP_Source.SAP.Security)
+ [Remover o ponto de truncamento](#CHAP_Source.SAP.Truncation)
+ [Configurações de endpoint ao usar o SAP ASE como fonte para AWS DMS](#CHAP_Source.SAP.ConnectionAttrib)
+ [Tipos de dados de origem do SAP ASE](#CHAP_Source.SAP.DataTypes)

## Pré-requisitos para usar um banco de dados SAP ASE como fonte para AWS DMS
<a name="CHAP_Source.SAP.Prerequisites"></a>

Para que um banco de dados SAP ASE seja uma fonte AWS DMS, faça o seguinte:
+ Ative a replicação do SAP ASE para tabelas utilizando o comando `sp_setreptable`. Para obter mais informações, consulte [Sybase Infocenter Archive]( http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc32410_1501/html/refman/X37830.htm). 
+ Desabilite `RepAgent` no banco de dados SAP ASE. Para obter mais informações, consulte [Parar e desativar o RepAgent encadeamento no banco de dados principal](http://infocenter-archive.sybase.com/help/index.jsp?topic=/com.sybase.dc20096_1260/html/mra126ag/mra126ag65.htm). 
+ Para replicar para o SAP ASE versão 15.7 em uma instância do Windows EC2 configurada para caracteres não latinos (por exemplo, chinês), instale o SAP ASE 15.7 SP121 no computador de destino.

**nota**  
Para a replicação de captura de dados de alteração (CDC), o DMS executa `dbcc logtransfer` e `dbcc log` para ler os dados do log de transações.

## Limitações no uso do SAP ASE como fonte para AWS DMS
<a name="CHAP_Source.SAP.Limitations"></a>

As seguintes limitações se aplicam quando um banco de dados SAP ASE é utilizado como origem do AWS DMS:
+ Você pode executar somente uma AWS DMS tarefa com replicação contínua ou CDC para cada banco de dados SAP ASE. Você pode executar várias full-load-only tarefas em paralelo.
+ Não é possível renomear uma tabela. Por exemplo, o comando a seguir falha.

  ```
  sp_rename 'Sales.SalesRegion', 'SalesReg;
  ```
+ Não é possível renomear uma coluna. Por exemplo, o comando a seguir falha.

  ```
  sp_rename 'Sales.Sales.Region', 'RegID', 'COLUMN';
  ```
+ Os valores zero presentes no final de strings de tipos de dados binários são truncados quando replicados para o banco de dados de destino. Por exemplo, `0x0000000000000000000000000100000100000000` na tabela de origem torna-se `0x00000000000000000000000001000001` na tabela de destino.
+ Se o padrão do banco de dados estiver definido para não permitir valores NULL, AWS DMS cria a tabela de destino com colunas que não permitem valores NULL. Consequentemente, se uma carga completa ou tarefa de replicação do CDC contiver valores vazios, AWS DMS gerará um erro. É possível evitar esses erros permitindo valores NULL no banco de dados de origem com os seguintes comandos.

  ```
  sp_dboption database_name, 'allow nulls by default', 'true'
  go
  use database_name
  CHECKPOINT
  go
  ```
+ O comando de índice `reorg rebuild` não é compatível.
+ AWS DMS não suporta clusters nem usa MSA (Multi-Site Availability) /Warm Standby como fonte.
+ Quando a expressão do cabeçalho de transformação `AR_H_TIMESTAMP` é utilizada em regras de mapeamento, os milissegundos não serão capturados para uma coluna adicionada.
+ A execução de operações de mesclagem durante a CDC resultará em um erro não recuperável. Para sincronizar o destino novamente, execute uma carga máxima.
+ Os eventos de acionador de reversão não são compatíveis com tabelas que utilizam um esquema de bloqueio de linhas de dados.
+ AWS DMS não é possível retomar uma tarefa de replicação depois de eliminar uma tabela dentro do escopo da tarefa de um banco de dados SAP de origem. Se a tarefa de replicação do DMS foi interrompida e executou qualquer operação DML (INSERT, UPDATE, DELETE) seguida pelo descarte da tabela, reinicie a tarefa de replicação.

## Permissões necessárias para usar o SAP ASE como fonte para AWS DMS
<a name="CHAP_Source.SAP.Security"></a>

Para usar um banco de dados SAP ASE como fonte em uma AWS DMS tarefa, você precisa conceder permissões. Conceda à conta de usuário especificada nas definições do AWS DMS banco de dados as seguintes permissões no banco de dados SAP ASE: 
+ sa\$1role
+ replication\$1role
+ sybase\$1ts\$1role
+ Por padrão, quando você precisa ter permissão para executar o procedimento `sp_setreptable` armazenado, AWS DMS ativa a opção de replicação do SAP ASE. Se você quiser executar `sp_setreptable` em uma tabela diretamente do endpoint do banco de dados e não por AWS DMS si só, você pode usar o atributo de conexão `enableReplication` extra. Para obter mais informações, consulte [Configurações de endpoint ao usar o SAP ASE como fonte para AWS DMS](#CHAP_Source.SAP.ConnectionAttrib).

## Remover o ponto de truncamento
<a name="CHAP_Source.SAP.Truncation"></a>

Quando uma tarefa é iniciada, AWS DMS estabelece uma `$replication_truncation_point` entrada na visualização do `syslogshold` sistema, indicando que um processo de replicação está em andamento. Enquanto AWS DMS está trabalhando, ele avança o ponto de truncamento de replicação em intervalos regulares, de acordo com a quantidade de dados que já foram copiados para o destino.

Depois que a `$replication_truncation_point` entrada for estabelecida, mantenha a AWS DMS tarefa em execução para evitar que o log do banco de dados fique excessivamente grande. Se você quiser interromper a AWS DMS tarefa permanentemente, remova o ponto de truncamento de replicação emitindo o seguinte comando:

```
dbcc settrunc('ltm','ignore')
```

Depois que o ponto de truncamento for removido, você não poderá continuar a AWS DMS tarefa. O log continuará a ser automaticamente truncado nos pontos de verificação (se o truncamento automático for definido).

## Configurações de endpoint ao usar o SAP ASE como fonte para AWS DMS
<a name="CHAP_Source.SAP.ConnectionAttrib"></a>

É possível utilizar as configurações de endpoint para configurar o banco de dados de origem do SAP ASE de maneira semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de origem usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--sybase-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o SAP ASE como origem.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Source.SAP.html)

## Tipos de dados de origem do SAP ASE
<a name="CHAP_Source.SAP.DataTypes"></a>

Para obter uma lista dos tipos de dados de origem do SAP ASE que são suportados durante o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados, consulte a tabela a seguir. AWS DMS não suporta tabelas de origem do SAP ASE com colunas do tipo de dados do tipo definido pelo usuário (UDT). Colunas replicadas com esse tipo de dados são criadas como NULL. 

Para obter informações sobre como exibir o tipo de dados mapeado no destino, consulte a seção [Destinos para a migração de dados](CHAP_Target.md) relativa ao seu endpoint de destino.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  Tipos de dados do SAP ASE  |  AWS DMS tipos de dados  | 
| --- | --- | 
| BIGINT | INT8 | 
| UNSIGNED BIGINT | UINT8 | 
| INT | INT4 | 
| UNSIGNED INT | UINT4 | 
| SMALLINT | INT2 | 
| UNSIGNED SMALLINT | UINT2 | 
| TINYINT | UINT1 | 
| DECIMAL | NUMERIC | 
| NUMERIC | NUMERIC | 
| FLOAT | REAL8 | 
| DOUBLE | REAL8 | 
| REAL | REAL4 | 
| MONEY | NUMERIC | 
| SMALLMONEY | NUMERIC | 
| DATETIME | DATETIME | 
| BIGDATETIME | DATETIME(6) | 
| SMALLDATETIME | DATETIME | 
| DATE | DATE | 
| TIME | TIME | 
| BIGTIME | TIME | 
| CHAR | STRING | 
| UNICHAR | WSTRING | 
| NCHAR | WSTRING | 
| VARCHAR | STRING | 
| UNIVARCHAR | WSTRING | 
| NVARCHAR | WSTRING | 
| BINARY | BYTES | 
| VARBINARY | BYTES | 
| BIT | BOOLEAN | 
| TEXT | CLOB | 
| UNITEXT | NCLOB | 
| IMAGE | BLOB | 

# Usando o MongoDB como fonte para AWS DMS
<a name="CHAP_Source.MongoDB"></a>

 Para obter informações sobre as versões do MongoDB AWS DMS que oferecem suporte como fonte, consulte. [Fontes para AWS DMS](CHAP_Introduction.Sources.md) 

Observe o seguinte sobre a compatibilidade com a versão do MongoDB:
+ As versões AWS DMS 3.4.5 e posteriores oferecem suporte às versões 4.2 e 4.4 do MongoDB. 
+ As versões AWS DMS 3.4.5 e posteriores e as versões do MongoDB 4.2 e posteriores oferecem suporte a transações distribuídas. Para obter mais informações sobre as transações distribuídas do MongoDB, consulte [Transações](https://docs.mongodb.com/manual/core/transactions/) na [Documentação do MongoDB](https://www.mongodb.com/docs/).
+ As versões AWS DMS 3.5.0 e posteriores não oferecem suporte às versões do MongoDB anteriores à 3.6.
+ As versões AWS DMS 3.5.1 e posteriores oferecem suporte à versão 5.0 do MongoDB.
+ As versões AWS DMS 3.5.2 e posteriores oferecem suporte à versão 6.0 do MongoDB.
+ As versões AWS DMS 3.5.4 e posteriores oferecem suporte às versões 7.0 e 8.0 do MongoDB.



Se você é novo no MongoDB, esteja ciente quanto aos seguintes conceitos importantes sobre o banco de dados MongoDB. 
+ Um registro no MongoDB é um *documento*, que é uma estrutura de dados composta por pares de campo e valor. O valor de um campo pode incluir outros documentos, matrizes e matrizes de documentos. Um documento é aproximadamente equivalente a uma linha em uma tabela de banco de dados relacional.
+ Uma *coleção* no MongoDB é um grupo de documentos e é aproximadamente equivalente a uma tabela de banco de dados relacional.
+ Um *banco de dados* no MongoDB é um conjunto de coleções e é aproximadamente equivalente a uma tabela de banco de dados relacional.
+ Internamente, um documento do MongoDB é armazenado como um arquivo binário JSON (BSON) em um formato compactado que inclui um tipo para cada campo no documento. Cada documento tem um ID exclusivo.

AWS DMS *suporta dois modos de migração ao usar o MongoDB como fonte*, o modo Documento ou o modo Tabela*.* Você especifica o modo de migração a ser utilizado ao criar o endpoint do MongoDB ou ao configurar o parâmetro do **Modo metadados** no console do AWS DMS . Opcionalmente, é possível criar uma segunda coluna chamada `_id` que atue como a chave primária selecionando o botão de marca de seleção para **\$1id como uma coluna separada** no painel de configuração do endpoint. 

A escolha do modo de migração afeta o formato resultante dos dados de destino, conforme explicado a seguir. 

**Modo de documentos**  
No modo de documentos, o documento do MongoDB é migrado "no estado em que se encontra", ou seja, os dados do documento são consolidados em uma única coluna chamada `_doc` em uma tabela de destino. O modo de documentos é a configuração padrão ao utilizar o MongoDB como um endpoint de origem.  
Por exemplo, considere os seguintes documentos em uma coleção do MongoDB chamada myCollection.  

```
 db.myCollection.find()
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe0"), "a" : 1, "b" : 2, "c" : 3 }
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe1"), "a" : 4, "b" : 5, "c" : 6 }
```
Após a migração dos dados para uma tabela de banco de dados relacional usando o modo de documentos, os dados são estruturados como mostrado a seguir. Os campos de dados no documento do MongoDB são consolidados na coluna` _doc`.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Source.MongoDB.html)
Opcionalmente, é possível definir o atributo de conexão adicional `extractDocID` como *verdadeiro* para criar uma segunda coluna chamada `"_id"`, que servirá como a chave primária. Se for utilizar a CDC, defina esse parâmetro como *verdadeiro*.  
*Ao usar o CDC com fontes que produzem [transações com vários documentos](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction), o `ExtractDocId` parâmetro **deve ser** definido como verdadeiro.* Se esse parâmetro não estiver ativado, a AWS DMS tarefa falhará quando encontrar uma transação com vários documentos.  
No modo documento, AWS DMS gerencia a criação e a renomeação de coleções da seguinte forma:  
+ Se você adicionar uma nova coleção ao banco de dados de origem, AWS DMS cria uma nova tabela de destino para a coleção e replica todos os documentos. 
+ Se você renomear uma coleção existente no banco de dados de origem, o AWS DMS não renomeará a tabela de destino. 
Se o endpoint de destino for o Amazon DocumentDB, execute a migração no **Modo documento**.

**Modo de tabelas**  
No modo tabela, AWS DMS transforma cada campo de nível superior em um documento do MongoDB em uma coluna na tabela de destino. Se um campo estiver aninhado, AWS DMS nivela os valores aninhados em uma única coluna. AWS DMS em seguida, adiciona um campo-chave e tipos de dados ao conjunto de colunas da tabela de destino.   
Para cada documento do MongoDB AWS DMS , adiciona cada chave e tipo ao conjunto de colunas da tabela de destino. Por exemplo, usando o modo tabela, AWS DMS migra o exemplo anterior para a tabela a seguir.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Source.MongoDB.html)
Os valores aninhados são simplificados em uma coluna que contém os nomes das chaves separados por pontos. A coluna é nomeado concatenação dos nomes dos campos simplificados, separados por pontos. Por exemplo, AWS DMS migra um documento JSON com um campo de valores aninhados, como `{"a" : {"b" : {"c": 1}}}` em uma coluna chamada `a.b.c.`  
Para criar as colunas de destino, AWS DMS digitaliza um número específico de documentos do MongoDB e cria um conjunto de todos os campos e seus tipos. AWS DMS em seguida, usa esse conjunto para criar as colunas da tabela de destino. Se criar ou modificar o endpoint de origem do MongoDB utilizando o console, especifique o número de documentos para verificação. O valor padrão são 1.000 documentos. Se você usar o AWS CLI, poderá usar o atributo de conexão extra`docsToInvestigate`.  
No modo tabela, AWS DMS gerencia documentos e coleções da seguinte forma:  
+ Ao adicionar um documento a uma coleção existente, o documento é replicado. Se houver campos que não existem no destino, esses campos não serão replicados.
+ Quando você atualiza um documento, o documento atualizado é replicado. Se houver campos que não existem no destino, esses campos não serão replicados.
+ A exclusão de documentos é totalmente compatível.
+ A adição de uma coleção nova não resultará na criação de uma nova tabela no destino quando feita durante uma tarefa de CDC.
+ Na fase Change Data Capture (CDC), AWS DMS não oferece suporte à renomeação de uma coleção.

**Topics**
+ [Permissões necessárias ao usar o MongoDB como fonte para AWS DMS](#CHAP_Source.MongoDB.PrerequisitesCDC)
+ [Configurar um conjunto de réplicas do MongoDB para a CDC](#CHAP_Source.MongoDB.PrerequisitesCDC.ReplicaSet)
+ [Requisitos de segurança ao usar o MongoDB como fonte para AWS DMS](#CHAP_Source.MongoDB.Security)
+ [Segmentar as coleções do MongoDB e migrar em paralelo](#CHAP_Source.MongoDB.ParallelLoad)
+ [Migrando vários bancos de dados ao usar o MongoDB como fonte para AWS DMS](#CHAP_Source.MongoDB.Multidatabase)
+ [Limitações ao usar o MongoDB como fonte para AWS DMS](#CHAP_Source.MongoDB.Limitations)
+ [Configurações de endpoint ao usar o MongoDB como fonte para AWS DMS](#CHAP_Source.MongoDB.Configuration)
+ [Tipos de dados de origem do MongoDB](#CHAP_Source.MongoDB.DataTypes)

## Permissões necessárias ao usar o MongoDB como fonte para AWS DMS
<a name="CHAP_Source.MongoDB.PrerequisitesCDC"></a>

Para uma AWS DMS migração com uma fonte do MongoDB, você pode criar uma conta de usuário com privilégios de root ou um usuário com permissões somente no banco de dados para migrar. 

O código a seguir cria um usuário para ser a conta raiz.

```
use admin
db.createUser(
  {
    user: "root",
    pwd: "password",
    roles: [ { role: "root", db: "admin" } ]
  }
)
```

Para um origem do MongoDB 3.x, o código a seguir cria um usuário com privilégios mínimos no banco de dados a ser migrado.

```
use database_to_migrate
db.createUser( 
{ 
    user: "dms-user",
    pwd: "password",
    roles: [ { role: "read", db: "local" }, "read"] 
})
```

Para um MongoDB 4.x de origem, o código a seguir cria um usuário com privilégios mínimos.

```
{ resource: { db: "", collection: "" }, actions: [ "find", "changeStream" ] }
```

Por exemplo, crie o seguinte perfil no banco de dados “admin”.

```
use admin
db.createRole(
{
role: "changestreamrole",
privileges: [
{ resource: { db: "", collection: "" }, actions: [ "find","changeStream" ] }
],
roles: []
}
)
```

Quando o perfil estiver criado, crie um usuário no banco de dados a ser migrado.

```
 use test
> db.createUser( 
{ 
user: "dms-user12345",
pwd: "password",
roles: [ { role: "changestreamrole", db: "admin" }, "read"] 
})
```

## Configurar um conjunto de réplicas do MongoDB para a CDC
<a name="CHAP_Source.MongoDB.PrerequisitesCDC.ReplicaSet"></a>

Para usar a replicação contínua ou CDC com o MongoDB, é necessário AWS DMS acesso ao log de operações do MongoDB (oplog). Para criar o oplog, é necessário implantar um conjunto de réplicas, caso não exista. Para obter mais informações, consulte a [ documentação do MongoDB](https://docs.mongodb.com/manual/tutorial/deploy-replica-set/).

É possível utilizar a CDC com o nó primário ou secundário de um conjunto de réplicas do MongoDB como o endpoint de origem.

**Para converter uma instância independente em um conjunto de réplicas**

1. utilizando a linha de comando, conecte-se ao `mongo`.

   ```
   mongo localhost
   ```

1. Interrompa o serviço `mongod`.

   ```
   service mongod stop
   ```

1. Reinicie o `mongod` utilizando o comando a seguir:

   ```
   mongod --replSet "rs0" --auth -port port_number
   ```

1. Teste a conexão com o conjunto de réplicas utilizando os seguintes comandos:

   ```
   mongo -u root -p password --host rs0/localhost:port_number 
     --authenticationDatabase "admin"
   ```

Se planeja executar uma migração no modo de documentos, selecione a opção `_id as a separate column` ao criar o endpoint do MongoDB. Selecionar essa opção cria uma segunda coluna chamada `_id` que atua como a chave primária. Essa segunda coluna é necessária AWS DMS para suportar operações de linguagem de manipulação de dados (DML).

**nota**  
AWS DMS usa o log de operações (oplog) para capturar as alterações durante a replicação contínua. Se o MongoDB eliminar os registros do oplog AWS DMS antes de lê-los, suas tarefas falharão. É recomendável dimensionar o oplog para reter as alterações por pelo menos 24 horas. 

## Requisitos de segurança ao usar o MongoDB como fonte para AWS DMS
<a name="CHAP_Source.MongoDB.Security"></a>

AWS O DMS oferece suporte a dois métodos de autenticação para o MongoDB. Os dois métodos de autenticação são utilizados para criptografar a senha, e portanto só são utilizados quando o parâmetro `authType` está definido como *PASSWORD*.

Os métodos de autenticação do MongoDB são os seguintes:
+ **MONGODB-CR**: para compatibilidade com versões anteriores
+ **SCRAM-SHA-1**: o padrão ao utilizar o MongoDB versão 3.x e 4.0.

Se um método de autenticação não for especificado, o AWS DMS usa o método padrão para a versão da fonte do MongoDB.

## Segmentar as coleções do MongoDB e migrar em paralelo
<a name="CHAP_Source.MongoDB.ParallelLoad"></a>

Para melhorar o desempenho de uma tarefa de migração, os endpoints de origem do MongoDB são compatíveis com duas opções para carga máxima paralela no mapeamento de tabela. 

Em outras palavras, é possível migrar uma coleção em paralelo utilizando segmentação automática ou segmentação por intervalo com mapeamento de tabela para uma carga máxima paralela nas configurações do JSON. Com a segmentação automática, você pode especificar os critérios AWS DMS para segmentar automaticamente sua fonte para migração em cada thread. Com a segmentação por faixa, você pode informar AWS DMS a faixa específica de cada segmento para que o DMS migre em cada thread. Para obter mais informações sobre essas configurações, consulte [Regras e operações de configurações de tabelas e coleções](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md).

### Migrar um banco de dados MongoDB em paralelo utilizando intervalos de segmentação automática
<a name="CHAP_Source.MongoDB.ParallelLoad.AutoPartitioned"></a>

É possível migrar os documentos em paralelo especificando os critérios do AWS DMS para particionar (segmentar) automaticamente os dados de cada thread. Especificamente, informe o número de documentos a serem migrados por thread. Usando essa abordagem, AWS DMS tenta otimizar os limites do segmento para obter o máximo desempenho por thread.

É possível especificar os critérios de segmentação utilizando as opções de configurações de tabela a seguir no mapeamento de tabela.


|  Opção de configurações de tabela  |  Description  | 
| --- | --- | 
|  `"type"`  |  (Obrigatório) Defina como `"partitions-auto"` para MongoDB como origem.  | 
|  `"number-of-partitions"`  |  (Opcional) Número total de partições (segmentos) utilizadas para a migração. O padrão é 16.  | 
|  `"collection-count-from-metadata"`  |  (Opcional) Se essa opção estiver definida como `true`, o AWS DMS utilizará uma contagem estimada da coleção para determinar o número de partições. Se essa opção estiver definida como`false`, AWS DMS usa a contagem real da coleta. O padrão é `true`.  | 
|  `"max-records-skip-per-page"`  |  (Opcional) O número de registros a serem ignorados de uma vez ao determinar os limites de cada partição. AWS DMS usa uma abordagem de salto paginado para determinar o limite mínimo de uma partição. O padrão é 10.000.  A definição de um valor relativamente grande pode resultar em tempos limite do cursor e falhas na tarefa. A definição de um valor relativamente baixo resulta em mais operações por página e em uma carga máxima mais lenta.   | 
|  `"batch-size"`  |  (Opcional) Limita o número de documentos retornados em um lote. Cada lote requer uma viagem de ida e volta ao servidor. Se o tamanho do lote for zero (0), o cursor utilizará o tamanho máximo do lote definido pelo servidor. O padrão é 0.  | 

O exemplo a seguir mostra um mapeamento de tabela para segmentação automática.

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "table-settings",
            "rule-id": "2",
            "rule-name": "2",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "parallel-load": {
                "type": "partitions-auto",
                "number-of-partitions": 5,
                "collection-count-from-metadata": "true",
                "max-records-skip-per-page": 1000000,
                "batch-size": 50000
            }
        }
    ]
}
```

A segmentação automática tem a seguinte limitação. A migração de cada segmento busca a contagem da coleção e o `_id` mínimo da coleção separadamente. Ela utiliza um salto paginado para calcular o limite mínimo desse segmento. 

Portanto, verifique se o valor mínimo de `_id` de cada coleção permanece constante até que todos os limites do segmento na coleção tenham sido calculados. Se você alterar o valor mínimo de `_id` de uma coleção durante o cálculo do limite do segmento, isso poderá causar perda de dados ou erros de linha duplicada.

### Migrar de um banco de dados MongoDB em paralelo utilizando segmentação de intervalo
<a name="CHAP_Source.MongoDB.ParallelLoad.Ranges"></a>

É possível migrar os documentos em paralelo especificando os intervalos de cada segmento em um thread. Usando essa abordagem, você instrui AWS DMS os documentos específicos a migrar em cada thread de acordo com sua escolha de intervalos de documentos por thread.

O exemplo a seguir mostra uma coleção do MongoDB que tem sete itens e `_id` como chave primária.

![\[Coleção do MongoDB com sete itens.\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/images/datarep-docdb-collection.png)


Para dividir a coleção em três segmentos específicos para AWS DMS migrar em paralelo, você pode adicionar regras de mapeamento de tabelas à sua tarefa de migração. Essa abordagem é mostrada no exemplo de JSON a seguir.

```
{ // Task table mappings:
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "rule-action": "include"
    }, // "selection" :"rule-type"
    {
      "rule-type": "table-settings",
      "rule-id": "2",
      "rule-name": "2",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "parallel-load": {
        "type": "ranges",
        "columns": [
           "_id",
           "num"
        ],
        "boundaries": [
          // First segment selects documents with _id less-than-or-equal-to 5f805c97873173399a278d79
          // and num less-than-or-equal-to 2.
          [
             "5f805c97873173399a278d79",
             "2"
          ],
          // Second segment selects documents with _id > 5f805c97873173399a278d79 and
          // _id less-than-or-equal-to 5f805cc5873173399a278d7c and
          // num > 2 and num less-than-or-equal-to 5.
          [
             "5f805cc5873173399a278d7c",
             "5"
          ]                                   
          // Third segment is implied and selects documents with _id > 5f805cc5873173399a278d7c.
        ] // :"boundaries"
      } // :"parallel-load"
    } // "table-settings" :"rule-type"
  ] // :"rules"
} // :Task table mappings
```

Essa definição de mapeamento de tabela divide a coleção de origem em três segmentos e migra em paralelo. Veja a seguir os limites de segmentação.

```
Data with _id less-than-or-equal-to "5f805c97873173399a278d79" and num less-than-or-equal-to 2 (2 records)
Data with _id > "5f805c97873173399a278d79" and num > 2 and _id  less-than-or-equal-to "5f805cc5873173399a278d7c" and num less-than-or-equal-to 5 (3 records)
Data with _id > "5f805cc5873173399a278d7c" and num > 5 (2 records)
```

Depois que a tarefa de migração for concluída, é possível verificar os logs de tarefas para saber se as tabelas foram carregadas em paralelo, conforme mostrado no exemplo a seguir. Também é possível verificar a cláusula `find` do MongoDB utilizada para descarregar cada segmento da tabela de origem.

```
[TASK_MANAGER    ] I:  Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86  (replicationtask_util.c:752)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is initialized.   (mongodb_unload.c:157)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } }  (mongodb_unload.c:328)

[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TASK_MANAGER    ] I: Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86 (replicationtask_util.c:752)
 
[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is initialized. (mongodb_unload.c:157) 

[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } } (mongodb_unload.c:328)
 
[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TARGET_LOAD     ] I: Load finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 1 rows received. 0 rows skipped. Volume transfered 480.

[TASK_MANAGER    ] I: Load finished for segment #1 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. 2 records transferred.
```

Atualmente, AWS DMS oferece suporte aos seguintes tipos de dados do MongoDB como uma coluna de chave de segmento:
+ Duplo
+ String
+ ObjectId
+ Inteiro de 32 bits
+ Inteiro de 64 bits

## Migrando vários bancos de dados ao usar o MongoDB como fonte para AWS DMS
<a name="CHAP_Source.MongoDB.Multidatabase"></a>

AWS DMS as versões 3.4.5 e superiores oferecem suporte à migração de vários bancos de dados em uma única tarefa para todas as versões suportadas do MongoDB. Para migrar vários bancos de dados, utilize as seguintes etapas:

1. Ao criar o endpoint de origem do MongoDB, siga um destes procedimentos:
   + Na página **Criar endpoint** do console do DMS, verifique se o **Nome do banco de dados** está vazio em **Configuração do endpoint**.
   + Usando o AWS CLI `CreateEndpoint` comando, atribua um valor de string vazio ao `DatabaseName` parâmetro em`MongoDBSettings`.

1. Para cada banco de dados a ser migrado de uma origem do MongoDB, especifique o nome do banco de dados como um nome de esquema no mapeamento da tabela da tarefa. É possível fazer isso utilizando a entrada guiada no console ou diretamente no JSON. Para obter mais informações sobre a entrada guiada, consulte [Especificar a seleção de tabelas e as regras de transformação no console](CHAP_Tasks.CustomizingTasks.TableMapping.Console.md). Para obter mais informações sobre o JSON, consulte [Regras de seleção e ações](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Selections.md).

Por exemplo, é possível especificar o JSON a seguir para migrar três bancos de dados do MongoDB.

**Example Migrar todas as tabelas em um esquema**  
O JSON a seguir migra todas as tabelas dos bancos de dados `Customers`, `Orders` e `Suppliers` no endpoint de origem para o endpoint de destino.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Customers",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "selection",
            "rule-id": "2",
            "rule-name": "2",
            "object-locator": {
                "schema-name": "Orders",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "selection",
            "rule-id": "3",
            "rule-name": "3",
            "object-locator": {
                "schema-name": "Inventory",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        }
    ]
}
```

## Limitações ao usar o MongoDB como fonte para AWS DMS
<a name="CHAP_Source.MongoDB.Limitations"></a>

A seguir estão as limitações ao usar o MongoDB como fonte para: AWS DMS
+ No modo tabela, os documentos em uma coleção devem ser consistentes com o tipo de dados que utilizam para o valor no mesmo campo. Por exemplo, se um documento em uma coleção incluir `'{ a:{ b:value ... }'`, todos os documentos da coleção que fazem referência ao `value` do campo `a.b` devem utilizar o mesmo tipo de dados para `value`, onde quer que apareçam na coleção.
+ Quando a opção `_id` está definida como uma coluna separada, a string de ID não pode exceder 200 caracteres.
+ As chaves de ID de objetos e de tipos de array são convertidas em colunas com o prefixo `oid` e `array` no modo de tabela.

  Internamente, essas colunas são referenciadas com os nomes prefixados. Se você usar regras de transformação para referenciar essas colunas, certifique-se de especificar a coluna prefixada. AWS DMS Por exemplo, especifique `${oid__id}` e não `${_id}`, ou `${array__addresses}` e não `${_addresses}`. 
+  Os nomes de coleções e os nomes de chaves não podem conter o caractere de cifrão (\$1). 
+ AWS DMS não oferece suporte a coleções contendo o mesmo campo com letras maiúsculas e minúsculas diferentes no modo de tabela com um destino RDBMS. Por exemplo, AWS DMS não suporta ter duas coleções chamadas `Field1` `field1` e. 
+ Os modos tabelas e documento possuem as limitações descritas anteriormente.
+ A migração em paralelo que utiliza a segmentação automática possui as limitações descritas anteriormente.
+ Os filtros de origem não são compatíveis com o MongoDB.
+ AWS DMS não suporta documentos em que o nível de aninhamento seja maior que 97.
+ AWS DMS requer dados de origem codificados em UTF-8 ao migrar para destinos que não sejam do DocumentDB. Para fontes com caracteres não UTF-8, converta-os em UTF-8 antes da migração ou migre para o Amazon DocumentDB.
+ AWS DMS não oferece suporte aos seguintes recursos do MongoDB versão 5.0:
  + Refragmentação em tempo real
  + Criptografia em nível de campo do lado do cliente (CSFLE)
  + Migração de coleção de séries temporais
**nota**  
Uma coleção de séries temporais migrada na fase de carga máxima será convertida em uma coleção normal no Amazon DocumentDB, porque o DocumentDB não é compatível com coleções de séries temporais.

## Configurações de endpoint ao usar o MongoDB como fonte para AWS DMS
<a name="CHAP_Source.MongoDB.Configuration"></a>

Ao configurar seu endpoint de origem do MongoDB, você pode especificar várias configurações de endpoint usando o console. AWS DMS 

A tabela a seguir descreve as configurações disponíveis ao usar bancos de dados MongoDB como fonte. AWS DMS 


| Configuração (atributo) | Valores válidos | Valor padrão e descrição | 
| --- | --- | --- | 
|  **Modo de autenticação**  |  `"none"` `"password"`  |  O valor `"password"` solicita um nome de usuário e uma senha. Quando `"none"` for especificado, os parâmetros de nome de usuário e senha não serão utilizados.  | 
|  **Origem da autenticação**  |  Um nome de banco de dados MongoDB válido.  |  O nome do banco de dados MongoDB que você deseja utilizar para validar as credenciais para autenticação. O valor padrão é `"admin"`.   | 
|  **Mecanismo de autenticação**  |  `"default"` `"mongodb_cr"` `"scram_sha_1"`  |  O mecanismo de autenticação. O valor ` "default"` é `"scram_sha_1"`. Essa configuração não é utilizada quando `authType` está definido como `"no"`.  | 
|  **Modo metadados**  |  Documento e tabela  |  Escolhe o modo documento ou o modo tabela.   | 
|  **Número de documentos a serem verificados** (`docsToInvestigate`)  |  Um inteiro positivo maior do que `0`.  |  Utilize essa opção no modo tabela somente para definir a configuração da tabela de destino.  | 
|  **\$1id como uma coluna separada**  |  Marca de seleção na caixa  |  Marca de seleção opcional que cria uma segunda coluna chamada `_id` que atua como a chave primária.  | 
|   `ExtractDocID`   |  `true` `false`  |  `false`: utilize este atributo quando `NestingLevel` estiver definido como `"none"`.  Ao usar o CDC com fontes que produzem [transações com vários documentos](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction), o `ExtractDocId` parâmetro **deve ser** definido como. `true` Se esse parâmetro não estiver ativado, a AWS DMS tarefa falhará quando encontrar uma transação com vários documentos.  | 
|  `socketTimeoutMS`  |  Um número inteiro maior ou igual a 0. Somente atributo de conexão adicional (ECA).  |  Essa configuração está em unidades de milissegundos e configura o tempo limite de conexão para clientes MongoDB. Se o valor for menor ou igual a zero, o padrão do cliente MongoDB será utilizado.  | 
|   `UseUpdateLookUp`   |  `true` `false`  |  Quando verdadeiro, durante os eventos de atualização do CDC, AWS DMS copia todo o documento atualizado para o destino. Quando definido como false, AWS DMS usa o comando de atualização do MongoDB para atualizar somente os campos modificados no documento no destino.  | 
|   `ReplicateShardCollections`   |  `true` `false`  |  Quando verdadeiro, AWS DMS replica os dados em coleções de fragmentos. AWS DMS só usa essa configuração se o endpoint de destino for um cluster elástico DocumentDB. Quando essa configuração for verdadeira, observe o seguinte: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Source.MongoDB.html)  | 
|  `useTransactionVerification`  |  `true` `false`  |  Quando `false`, a verificação entre o fluxo de alterações e os logs de operações é desabilitada.   Você pode perder as operações se ocorrerem discrepâncias entre os fluxos de alterações e as entradas de log de operações, pois o comportamento padrão do DMS é não concluir a tarefa nesses cenários. Padrão: `true`.   | 
|  `useOplog`  |  `true` `false`  |  Quando `true`, a tarefa do DMS pode ler diretamente do “oplog” em vez de usar o fluxo de alterações. Padrão: `false`.  | 

Se você escolher o **Documento** como **Modo metadados**, opções diferentes estarão disponíveis. 

Se o endpoint de destino for DocumentDB, execute a migração no **Modo documento**. Além disso, modifique o endpoint de origem e selecione a opção **\$1id como coluna separada**. Esse será um pré-requisito obrigatório se a workload de origem do MongoDB envolver transações.

## Tipos de dados de origem do MongoDB
<a name="CHAP_Source.MongoDB.DataTypes"></a>

A migração de dados que usa o MongoDB como fonte AWS DMS suporta a maioria dos tipos de dados do MongoDB. Na tabela a seguir, você pode encontrar os tipos de dados de origem do MongoDB que são suportados durante o AWS DMS uso e o mapeamento AWS DMS padrão dos tipos de dados. Para obter mais informações sobre os tipos de dados do MongoDB, consulte [ Tipos de BSON](https://docs.mongodb.com/manual/reference/bson-types) na documentação do MongoDB.

Para obter informações sobre como exibir o tipo de dados mapeado no destino, consulte a seção relativa ao endpoint de destino que está usando.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  Tipos de dados do MongoDB  |  AWS DMS tipos de dados  | 
| --- | --- | 
| Booleano | Bool | 
| Binário | BLOB | 
| Data | Data | 
| Marca de data e hora | Data | 
| Int | INT4 | 
| Longo | INT8 | 
| Duplo | REAL8 | 
| String (UTF-8) | CLOB | 
| Array | CLOB | 
| OID | String | 
| REGEX | CLOB | 
| Código  | CLOB | 

# Usando o Amazon DocumentDB (com compatibilidade com o MongoDB) como fonte para AWS DMS
<a name="CHAP_Source.DocumentDB"></a>

Para obter informações sobre as versões do Amazon DocumentDB (compatível com MongoDB) que são compatíveis com o AWS DMS como origem, consulte [Fontes para AWS DMS](CHAP_Introduction.Sources.md).

 Utilizando o Amazon DocumentDB como origem, é possível migrar dados de um cluster do Amazon DocumentDB para outro cluster do Amazon DocumentDB. Você também pode migrar dados de um cluster do Amazon DocumentDB para um dos outros endpoints de destino suportados pelo. AWS DMS

Se não estiver familiarizado com o Amazon DocumentDB, fique ciente dos seguintes conceitos importantes de bancos de dados do Amazon DocumentDB:
+ Um registro no Amazon DocumentDB é um *documento*, uma estrutura de dados composta por pares de campo e valor. O valor de um campo pode incluir outros documentos, matrizes e matrizes de documentos. Um documento é aproximadamente equivalente a uma linha em uma tabela de banco de dados relacional.
+ Uma *coleção* no Amazon DocumentDB é um grupo de documentos, e é aproximadamente equivalente a uma tabela de banco de dados relacional.
+ Um *banco de dados* no Amazon DocumentDB é um conjunto de coleções, e é aproximadamente equivalente a um esquema em um banco de dados relacional.

AWS DMS suporta dois modos de migração ao usar o Amazon DocumentDB como fonte, modo documento e modo tabela. Você especifica o modo de migração ao criar o endpoint de origem do Amazon DocumentDB no AWS DMS console, usando a opção do **modo de metadados** ou o atributo de conexão extra. `nestingLevel` Veja a seguir uma explicação de como a opção do modo de migração afeta o formato resultante dos dados de destino.

**Modo de documentos**  
No *Modo documento*, o documento JSON é migrado como está. Isso significa que os dados do documento são consolidados em um de dois itens. Ao utilizar um banco de dados relacional como destino, os dados são uma única coluna nomeada `_doc` em uma tabela de destino. Ao utilizar um banco de dados não relacional como destino, os dados são um único documento JSON. O modo documento é o modo padrão, que é recomendável ao migrar para um destino do Amazon DocumentDB.  
Por exemplo, considere os seguintes documentos em uma coleção do Amazon DocumentDB chamada `myCollection`.  

```
 db.myCollection.find()
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe0"), "a" : 1, "b" : 2, "c" : 3 }
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe1"), "a" : 4, "b" : 5, "c" : 6 }
```
Após a migração dos dados para uma tabela de banco de dados relacional usando o modo de documentos, os dados são estruturados como mostrado a seguir. Os campos de dados no documento são consolidados na coluna ` _doc`.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Source.DocumentDB.html)
Opcionalmente, é possível definir o atributo de conexão adicional `extractDocID` como `true` para criar uma segunda coluna chamada `"_id"`, que servirá como a chave primária. Se você for utilizar a captura de dados de alteração (CDC), defina esse parâmetro como `true`, exceto ao utilizar o Amazon DocumentDB como destino.  
Ao usar o CDC com fontes que produzem [transações com vários documentos](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction), o `ExtractDocId` parâmetro **deve ser** definido como. `true` Se esse parâmetro não estiver ativado, a AWS DMS tarefa falhará quando encontrar uma transação com vários documentos.  
Se você adicionar uma nova coleção ao banco de dados de origem, AWS DMS cria uma nova tabela de destino para a coleção e replica todos os documentos. 

**Modo de tabelas**  
No *Modo tabela*, o AWS DMS transforma cada campo de nível superior de um documento do Amazon DocumentDB em uma coluna na tabela de destino. Se um campo estiver aninhado, AWS DMS nivela os valores aninhados em uma única coluna. AWS DMS em seguida, adiciona um campo-chave e tipos de dados ao conjunto de colunas da tabela de destino.   
Para cada documento do Amazon DocumentDB, AWS DMS adiciona cada chave e tipo ao conjunto de colunas da tabela de destino. Por exemplo, usando o modo tabela, AWS DMS migra o exemplo anterior para a tabela a seguir.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Source.DocumentDB.html)
Os valores aninhados são simplificados em uma coluna que contém os nomes das chaves separados por pontos. A coluna é nomeada utilizando concatenação dos nomes dos campos simplificados, separados por pontos. Por exemplo, AWS DMS migra um documento JSON com um campo de valores aninhados, como `{"a" : {"b" : {"c": 1}}}` em uma coluna chamada `a.b.c.`  
Para criar as colunas de destino, AWS DMS digitaliza um número específico de documentos do Amazon DocumentDB e cria um conjunto de todos os campos e seus tipos. AWS DMS em seguida, usa esse conjunto para criar as colunas da tabela de destino. Ao criar ou modificar o endpoint de origem do Amazon DocumentDB utilizando o console, especifique o número de documentos para verificação. O valor padrão são 1.000 documentos. Se você usar o AWS CLI, poderá usar o atributo de conexão extra`docsToInvestigate`.  
No modo tabela, AWS DMS gerencia documentos e coleções da seguinte forma:  
+ Ao adicionar um documento a uma coleção existente, o documento é replicado. Se houver campos que não existem no destino, esses campos não serão replicados.
+ Quando você atualiza um documento, o documento atualizado é replicado. Se houver campos que não existem no destino, esses campos não serão replicados.
+ A exclusão de documentos é totalmente compatível.
+ A adição de uma coleção nova não resultará na criação de uma nova tabela no destino quando feita durante uma tarefa de CDC.
+ Na fase Change Data Capture (CDC), AWS DMS não oferece suporte à renomeação de uma coleção.

**Topics**
+ [Definir permissões para utilizar o Amazon DocumentDB como origem](#CHAP_Source.DocumentDB.Permissions)
+ [Configurar a CDC para um cluster do Amazon DocumentDB](#CHAP_Source.DocumentDB.ConfigureCDC)
+ [Conectar-se ao Amazon DocumentDB utilizando TLS](#CHAP_Source.DocumentDB.TLS)
+ [Criar um endpoint de origem do Amazon DocumentDB](#CHAP_Source.DocumentDB.ConfigureEndpoint)
+ [Segmentar as coleções do Amazon DocumentDB e migrar em paralelo](#CHAP_Source.DocumentDB.ParallelLoad)
+ [Migração de vários bancos de dados ao usar o Amazon DocumentDB como fonte para AWS DMS](#CHAP_Source.DocumentDB.Multidatabase)
+ [Limitações ao usar o Amazon DocumentDB como fonte para AWS DMS](#CHAP_Source.DocumentDB.Limitations)
+ [Utilizar configurações de endpoint com o Amazon DocumentDB como origem](#CHAP_Source.DocumentDB.ECAs)
+ [Tipos de dados de origem do Amazon DocumentDB](#CHAP_Source.DocumentDB.DataTypes)

## Definir permissões para utilizar o Amazon DocumentDB como origem
<a name="CHAP_Source.DocumentDB.Permissions"></a>

Ao usar a fonte do Amazon DocumentDB para uma AWS DMS migração, você pode criar uma conta de usuário com privilégios de root. Ou é possível criar um usuário com permissões somente para o banco de dados a ser migrado. 

O código a seguir cria um usuário para ser a conta raiz.

```
use admin
db.createUser(
  {
    user: "root",
    pwd: "password",
    roles: [ { role: "root", db: "admin" } ]
  })
```

Para o Amazon DocumentDB 3.6, o código a seguir cria um usuário com privilégios mínimos no banco de dados a ser migrado.

```
use db_name
db.createUser( 
    {
        user: "dms-user",
        pwd: "password",
        roles: [{ role: "read", db: "db_name" }]
    }
)
```

Para o Amazon DocumentDB 4.0 e superior, AWS DMS usa um fluxo de alterações em toda a implantação. Aqui, o código a seguir cria um usuário com privilégios mínimos.

```
db.createUser( 
{ 
    user: "dms-user",
    pwd: "password",
    roles: [ { role: "readAnyDatabase", db: "admin" }] 
})
```

## Configurar a CDC para um cluster do Amazon DocumentDB
<a name="CHAP_Source.DocumentDB.ConfigureCDC"></a>

Para usar a replicação contínua ou o CDC com o Amazon DocumentDB AWS DMS , é necessário acesso aos fluxos de alterações do cluster Amazon DocumentDB. Para obter uma descrição da sequência ordenada por tempo dos eventos de atualização nas coleções e bancos de dados do cluster, consulte [Como utilizar fluxos de alterações](https://docs.aws.amazon.com/documentdb/latest/developerguide/change_streams.html) no *Guia do desenvolvedor do Amazon DocumentDB*. 

Autentique-se no cluster do Amazon DocumentDB utilizando o shell do MongoDB. Execute o comando a seguir para ativar os fluxos de alterações.

```
db.adminCommand({modifyChangeStreams: 1,
    database: "DB_NAME",
    collection: "", 
    enable: true});
```

Essa abordagem ativa o fluxo de alterações para todas as coleções no banco de dados. Depois que os fluxos de alterações forem habilitados, você poderá criar uma tarefa de migração que migre os dados existentes e, ao mesmo tempo, replique as alterações em andamento. AWS DMS continua capturando e aplicando alterações mesmo após o carregamento dos dados em massa. Por fim, os bancos de dados de origem e de destino ficarão sincronizados, minimizando o tempo de inatividade de uma migração.

**nota**  
AWS DMS usa o log de operações (oplog) para capturar as alterações durante a replicação contínua. Se o Amazon DocumentDB eliminar os registros do oplog antes de AWS DMS lê-los, suas tarefas falharão. É recomendável dimensionar o oplog para reter as alterações por pelo menos 24 horas.

## Conectar-se ao Amazon DocumentDB utilizando TLS
<a name="CHAP_Source.DocumentDB.TLS"></a>

Por padrão, um cluster recém-criado do Amazon DocumentDB aceita conexões seguras somente quando o Transport Layer Security (TLS) é utilizado. Quando o TLS está ativado, cada conexão ao Amazon DocumentDB requer uma chave pública.

Você pode recuperar a chave pública para o Amazon DocumentDB baixando o `rds-combined-ca-bundle.pem` arquivo de AWS um bucket do Amazon S3 hospedado. Para obter mais informações sobre como baixar esse arquivo, consulte [Criptografar conexões utilizando TLS](https://docs.aws.amazon.com/documentdb/latest/developerguide/security.encryption.ssl.html) no *Guia do desenvolvedor do Amazon DocumentDB.* 

Depois de baixar o `rds-combined-ca-bundle.pem` arquivo, você pode importar a chave pública que ele contém AWS DMS. As etapas a seguir descrevem como fazer isso.

**Para importar sua chave pública usando o AWS DMS console**

1. Faça login no Console de gerenciamento da AWS e escolha AWS DMS.

1. No painel de navegação, escolha **Certificates**.

1. Escolha **Importar certificado**. A página **Importar novo certificado CA** é exibida.

1. Na seção de **Configuração de certificado**, execute uma das seguintes ações:
   + Para **Identificador do certificado**, insira um nome exclusivo para o certificado, por exemplo `docdb-cert`.
   + Selecione **Escolher arquivo**, navegue até o local onde salvou o arquivo `rds-combined-ca-bundle.pem` e selecione-o.

1. Escolha **Adicionar novo certificado CA**.

O exemplo a AWS CLI seguir usa o AWS DMS `import-certificate` comando para importar o `rds-combined-ca-bundle.pem` arquivo de chave pública.

```
aws dms import-certificate \
    --certificate-identifier docdb-cert \
    --certificate-pem file://./rds-combined-ca-bundle.pem
```

## Criar um endpoint de origem do Amazon DocumentDB
<a name="CHAP_Source.DocumentDB.ConfigureEndpoint"></a>

É possível criar um endpoint de origem do Amazon DocumentDB utilizando o console ou a AWS CLI. Utilize o procedimento a seguir com o console.

**Para configurar um endpoint de origem do Amazon DocumentDB usando o console AWS DMS**

1. Faça login no Console de gerenciamento da AWS e escolha AWS DMS.

1. No painel de navegação, escolha **Endpoints** e **Criar endpoint**.

1. Em **Identificador do endpoint**, forneça um nome que ajude a identificá-lo facilmente, como `docdb-source`.

1. Em **Mecanismo de origem**, escolha **Amazon DocumentDB (compatível com MongoDB)**.

1. Em **Nome do servidor**, insira o nome do servidor em que o endpoint do banco de dados Amazon DocumentDB reside. Por exemplo, é possível inserir o nome DNS público da instância do Amazon EC2, como `democluster.cluster-cjf6q8nxfefi.us-east-2.docdb.amazonaws.com`.

1. Em **Porta**, insira 27017.

1. Para **SSL mode (Modo SSL)**, escolha **verificar-full**. Se tiver desativado o SSL no cluster do Amazon DocumentDB, ignore essa etapa.

1. Em **Certificado CA**, escolha o certificado do Amazon DocumentDB, `rds-combined-ca-bundle.pem`. Para obter instruções sobre como adicionar esse certificado, consulte [Conectar-se ao Amazon DocumentDB utilizando TLS](#CHAP_Source.DocumentDB.TLS).

1. Em **Nome do banco de dados**, insira o nome do banco de dados a ser migrado.

Utilize o procedimento a seguir com a CLI.

**Para configurar um endpoint de origem do Amazon DocumentDB usando o AWS CLI**
+ Execute o AWS DMS `create-endpoint` comando a seguir para configurar um endpoint de origem do Amazon DocumentDB, substituindo os espaços reservados por seus próprios valores.

  ```
  aws dms create-endpoint \
             --endpoint-identifier a_memorable_name \
             --endpoint-type source \
             --engine-name docdb \
             --username value \
             --password value \
             --server-name servername_where_database_endpoint_resides \
             --port 27017 \
             --database-name name_of_endpoint_database
  ```

## Segmentar as coleções do Amazon DocumentDB e migrar em paralelo
<a name="CHAP_Source.DocumentDB.ParallelLoad"></a>

Para melhorar o desempenho de uma tarefa de migração, os endpoints de origem do Amazon DocumentDB são compatíveis com duas opções do recurso de carga máxima paralela no mapeamento de tabela. Em outras palavras, é possível migrar uma coleção em paralelo utilizando as opções de segmentação automática ou de segmentação de intervalo do mapeamento de tabela para uma carga máxima paralela nas configurações de JSON. As opções de segmentação automática permitem que você especifique os critérios AWS DMS para segmentar automaticamente sua fonte para migração em cada thread. As opções de segmentação de intervalo permitem que você informe AWS DMS o intervalo específico de cada segmento para o DMS migrar em cada thread. Para obter mais informações sobre essas configurações, consulte [Regras e operações de configurações de tabelas e coleções](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md).

### Migrar um banco de dados Amazon DocumentDB em paralelo utilizando intervalos de segmentação automática
<a name="CHAP_Source.DocumentDB.ParallelLoad.AutoPartitioned"></a>

É possível migrar os documentos em paralelo especificando os critérios do AWS DMS para particionar (segmentar) automaticamente os dados de cada thread, especialmente o número de documentos a serem migrados por thread. Ao utilizar essa abordagem, o AWS DMS tenta otimizar os limites do segmento para obter o máximo desempenho por thread.

É possível especificar os critérios de segmentação utilizando as opções de configurações de tabela a seguir no mapeamento de tabela:


|  Opção de configurações de tabela  |  Description  | 
| --- | --- | 
|  `"type"`  |  (Obrigatório) Defina o Amazon DocumentDB. como a origem do `"partitions-auto"`.  | 
|  `"number-of-partitions"`  |  (Opcional) Número total de partições (segmentos) utilizadas para a migração. O padrão é 16.  | 
|  `"collection-count-from-metadata"`  |  (Opcional) Se definido como`true`, AWS DMS usa uma contagem estimada de coleta para determinar o número de partições. Se definido como`false`, AWS DMS usa a contagem real da coleta. O padrão é `true`.  | 
|  `"max-records-skip-per-page"`  |  (Opcional) O número de registros a serem ignorados de uma vez ao determinar os limites de cada partição. AWS DMS usa uma abordagem de salto paginado para determinar o limite mínimo de uma partição. O padrão é 10000. A definição de um valor relativamente grande pode resultar em tempos limite do cursor e falhas na tarefa. A definição de um valor relativamente baixo resulta em mais operações por página e em uma carga máxima mais lenta.   | 
|  `"batch-size"`  |  (Opcional) Limita o número de documentos retornados em um lote. Cada lote requer uma viagem de ida e volta ao servidor. Se o tamanho do lote for zero (0), o cursor utilizará o tamanho máximo do lote definido pelo servidor. O padrão é 0.  | 

O exemplo a seguir mostra um mapeamento de tabela para segmentação automática.

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "table-settings",
            "rule-id": "2",
            "rule-name": "2",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "parallel-load": {
                "type": "partitions-auto",
                "number-of-partitions": 5,
                "collection-count-from-metadata": "true",
                "max-records-skip-per-page": 1000000,
                "batch-size": 50000
            }
        }
    ]
}
```

A segmentação automática tem a seguinte limitação. A migração de cada segmento busca a contagem da coleção e o `_id` mínimo da coleção separadamente. Ela utiliza um salto paginado para calcular o limite mínimo desse segmento. Portanto, verifique se o valor mínimo de `_id` de cada coleção permanece constante até que todos os limites do segmento na coleção tenham sido calculados. Se você alterar o valor de `_id` mínimo de uma coleção durante o cálculo do limite do segmento, isso poderá causar perda de dados ou erros de linha duplicada.

### Migrar um banco de dados Amazon DocumentDB em paralelo utilizando intervalos de segmentos específicos
<a name="CHAP_Source.DocumentDB.ParallelLoad.Ranges"></a>

O exemplo a seguir mostra uma coleção do Amazon DocumentDB que tem sete itens e `_id` como chave primária.

![\[Coleção Amazon DocumentDB com sete itens.\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/images/datarep-docdb-collection.png)


Para dividir a coleção em três segmentos e migrar paralelamente, é possível adicionar regras de mapeamento de tabela à tarefa de migração, conforme mostrado no exemplo de JSON a seguir.

```
{ // Task table mappings:
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "rule-action": "include"
    }, // "selection" :"rule-type"
    {
      "rule-type": "table-settings",
      "rule-id": "2",
      "rule-name": "2",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "parallel-load": {
        "type": "ranges",
        "columns": [
           "_id",
           "num"
        ],
        "boundaries": [
          // First segment selects documents with _id less-than-or-equal-to 5f805c97873173399a278d79
          // and num less-than-or-equal-to 2.
          [
             "5f805c97873173399a278d79",
             "2"
          ],
          // Second segment selects documents with _id > 5f805c97873173399a278d79 and
          // _id less-than-or-equal-to 5f805cc5873173399a278d7c and
          // num > 2 and num less-than-or-equal-to 5.
          [
             "5f805cc5873173399a278d7c",
             "5"
          ]                                   
          // Third segment is implied and selects documents with _id > 5f805cc5873173399a278d7c.
        ] // :"boundaries"
      } // :"parallel-load"
    } // "table-settings" :"rule-type"
  ] // :"rules"
} // :Task table mappings
```

Essa definição de mapeamento de tabela divide a coleção de origem em três segmentos e migra em paralelo. Veja a seguir os limites de segmentação.

```
Data with _id less-than-or-equal-to "5f805c97873173399a278d79" and num less-than-or-equal-to 2 (2 records)
Data with _id less-than-or-equal-to "5f805cc5873173399a278d7c" and num less-than-or-equal-to 5 and not in (_id less-than-or-equal-to  "5f805c97873173399a278d79" and num less-than-or-equal-to 2) (3 records)
Data not in (_id less-than-or-equal-to "5f805cc5873173399a278d7c" and num less-than-or-equal-to 5) (2 records)
```

Depois que a tarefa de migração for concluída, é possível verificar os logs de tarefas para saber se as tabelas foram carregadas em paralelo, conforme mostrado no exemplo a seguir. Também é possível verificar a cláusula `find` do Amazon DocumentDB utilizada para descarregar cada segmento da tabela de origem.

```
[TASK_MANAGER    ] I:  Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86  (replicationtask_util.c:752)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is initialized.   (mongodb_unload.c:157)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } }  (mongodb_unload.c:328)

[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TASK_MANAGER    ] I: Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86 (replicationtask_util.c:752)
 
[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is initialized. (mongodb_unload.c:157) 

[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } } (mongodb_unload.c:328)
 
[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TARGET_LOAD     ] I: Load finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 1 rows received. 0 rows skipped. Volume transfered 480.

[TASK_MANAGER    ] I: Load finished for segment #1 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. 2 records transferred.
```

Atualmente, AWS DMS oferece suporte aos seguintes tipos de dados do Amazon DocumentDB como uma coluna de chave de segmento:
+ Duplo
+ String
+ ObjectId
+ Inteiro de 32 bits
+ Inteiro de 64 bits

## Migração de vários bancos de dados ao usar o Amazon DocumentDB como fonte para AWS DMS
<a name="CHAP_Source.DocumentDB.Multidatabase"></a>

AWS DMS as versões 3.4.5 e superiores oferecem suporte à migração de vários bancos de dados em uma única tarefa somente para as versões 4.0 e superiores do Amazon DocumentDB. Para migrar vários bancos de dados, faça o seguinte:

1. Ao criar o endpoint de origem do Amazon DocumentDB:
   + No formulário AWS DMS, Console de gerenciamento da AWS deixe o **nome do banco de dados** vazio em **Configuração do endpoint** na página **Criar endpoint**.
   + No AWS Command Line Interface (AWS CLI), atribua um valor de string vazio ao **DatabaseName**parâmetro no **Documento DBSettings** que você especifica para a **CreateEndpoint**ação.

1. Para cada banco de dados a ser migrado que você quer migrar desse endpoint de origem do Amazon DocumentDB, especifique o nome de cada banco de dados como o nome de um esquema no mapeamento de tabela da tarefa utilizando a entrada guiada no console ou diretamente no JSON. Para obter mais informações sobre a entrada guiada, consulte a descrição de [Especificar a seleção de tabelas e as regras de transformação no console](CHAP_Tasks.CustomizingTasks.TableMapping.Console.md). Para obter mais informações sobre o JSON, consulte [Regras de seleção e ações](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Selections.md).

Por exemplo, é possível especificar o JSON a seguir para migrar três bancos de dados do Amazon DocumentDB.

**Example Migrar todas as tabelas em um esquema**  
O JSON a seguir migra todas as tabelas dos bancos de dados `Customers`, `Orders` e `Suppliers` no endpoint de origem para o endpoint de destino.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Customers",
                "table-name": "%"
            },
            "object-locator": {
                "schema-name": "Orders",
                "table-name": "%"
            },
            "object-locator": {
                "schema-name": "Inventory",
                "table-name": "%"
            },
            "rule-action": "include"
        }
    ]
}
```

## Limitações ao usar o Amazon DocumentDB como fonte para AWS DMS
<a name="CHAP_Source.DocumentDB.Limitations"></a>

A seguir estão as limitações ao usar o Amazon DocumentDB como fonte para: AWS DMS
+ Quando a opção `_id` está definida como uma coluna separada, a string de ID não pode exceder 200 caracteres.
+ As chaves de ID de objetos e de tipos de array são convertidas em colunas com o prefixo `oid` e `array` no modo de tabela.

  Internamente, essas colunas são referenciadas com os nomes prefixados. Se você usar regras de transformação para referenciar essas colunas, certifique-se de especificar a coluna prefixada. AWS DMS Por exemplo, especifique `${oid__id}` e não `${_id}`, ou `${array__addresses}` e não `${_addresses}`. 
+  Os nomes de coleções e os nomes de chaves não podem conter o caractere de cifrão (\$1). 
+ Os modos de tabelas e documentos possuem as limitações discutidas anteriormente.
+ A migração em paralelo que utiliza a segmentação automática possui as limitações descritas anteriormente.
+ Uma origem do Amazon DocumentDB (compatível com MongoDB) não é compatível com a utilização de um timestamp específico como uma posição inicial para a captura de dados de alteração (CDC). Uma tarefa de replicação contínua começa a capturar as alterações, independentemente do timestamp.
+ AWS DMS não oferece suporte a documentos em que o nível de aninhamento seja maior que 97 para AWS DMS versões anteriores à 3.5.2.
+ Filtros de origem não são compatíveis com o DocumentDB.
+ AWS DMS não oferece suporte à replicação CDC (captura de dados de alteração) para DocumentDB como fonte no modo de cluster elástico.

## Utilizar configurações de endpoint com o Amazon DocumentDB como origem
<a name="CHAP_Source.DocumentDB.ECAs"></a>

É possível utilizar as configurações de endpoint para configurar o banco de dados Amazon DocumentDB como destino de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de origem usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--doc-db-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações de endpoint que podem ser utilizadas com o Amazon DocumentDB como origem.


| Nome do atributo | Valores válidos | Valor padrão e descrição | 
| --- | --- | --- | 
|   `NestingLevel`   |  `"none"` `"one"`  |  `"none"`: especifique `"none"` para utilizar o modo de documento. Especifique `"one"` para utilizar o modo de tabela.  | 
|   `ExtractDocID`   |  `true` `false`  |  `false`: utilize este atributo quando `NestingLevel` estiver definido como `"none"`.  Ao usar o CDC com fontes que produzem [transações com vários documentos](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction), o `ExtractDocId` parâmetro **deve ser** definido como. `true` Se esse parâmetro não estiver ativado, a AWS DMS tarefa falhará quando encontrar uma transação com vários documentos.  | 
|   `DocsToInvestigate`   |  Um inteiro positivo maior do que `0`.  |  `1000`: utilize este atributo quando `NestingLevel` estiver definido como `"one"`.   | 
|   `ReplicateShardCollections `   |  `true` `false`  |  Quando verdadeiro, AWS DMS replica os dados em coleções de fragmentos. AWS DMS só usa essa configuração se o endpoint de destino for um cluster elástico DocumentDB. Quando essa configuração for verdadeira, observe o seguinte: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Source.DocumentDB.html)  | 

## Tipos de dados de origem do Amazon DocumentDB
<a name="CHAP_Source.DocumentDB.DataTypes"></a>

Na tabela a seguir, é possível encontrar os tipos de dados de origem do Amazon DocumentDB que são compatíveis ao utilizar o AWS DMS. Você também pode encontrar o mapeamento padrão dos tipos de AWS DMS dados nesta tabela. Para obter mais informações sobre os tipos de dados, consulte [Tipos BSON](https://docs.mongodb.com/manual/reference/bson-types) na documentação do MongoDB.

Para obter informações sobre como exibir o tipo de dados mapeado no destino, consulte a seção relativa ao endpoint de destino que está usando.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  Tipos de dados do Amazon DocumentDB  |  AWS DMS tipos de dados  | 
| --- | --- | 
| Booleano | Bool | 
| Binário | BLOB | 
| Data | Data | 
| Marca de data e hora | Data | 
| Int | INT4 | 
| Longo | INT8 | 
| Duplo | REAL8 | 
| String (UTF-8) | CLOB | 
| Array | CLOB | 
| OID | String | 

# Usando o Amazon S3 como fonte para AWS DMS
<a name="CHAP_Source.S3"></a>

Você pode migrar dados de um bucket do Amazon S3 usando. AWS DMS Para fazer isso, conceda acesso a um bucket do Amazon S3 que contenha um ou mais arquivos de dados. Neste bucket do S3, inclua um arquivo JSON que descreve o mapeamento entre os dados e as tabelas de banco de dados referentes aos dados nesses arquivos.

Os arquivos de dados de origem devem estar presentes no bucket do Amazon S3 para que a carga máxima seja iniciada. Especifique o nome do bucket utilizando o parâmetro `bucketName`. 

Os arquivos de dados de origem podem estar nos seguintes formatos:
+ Valores separados por vírgula (.csv)
+ Parquet (DMS versão 3.5.3 e posterior). Para ter informações sobre como usar arquivos no formato Parquet, consulte [Usando arquivos no formato Parquet no Amazon S3 como fonte para AWS DMS](#CHAP_Source.S3.Parquet).

Para arquivos de dados de origem no formato de valores separados por vírgula (.csv), nomeie-os usando a seguinte convenção de nomenclatura. Nessa convenção, *`schemaName`* é o esquema de origem, e *`tableName`* é o nome de uma tabela dentro desse esquema.

```
/schemaName/tableName/LOAD001.csv
/schemaName/tableName/LOAD002.csv
/schemaName/tableName/LOAD003.csv
...
```

 Por exemplo, suponha que os arquivos de dados estejam no `amzn-s3-demo-bucket`, no seguinte caminho do Amazon S3.

```
s3://amzn-s3-demo-bucket/hr/employee
```

No momento do carregamento, AWS DMS presume que o nome do esquema de origem seja `hr` e que o nome da tabela de origem seja. `employee`

Além disso `bucketName` (o que é obrigatório), você pode, opcionalmente, fornecer um `bucketFolder` parâmetro para especificar onde AWS DMS procurar arquivos de dados no bucket do Amazon S3. Continuando com o exemplo anterior, se você `bucketFolder` definir como`sourcedata`, AWS DMS lê os arquivos de dados no caminho a seguir.

```
s3://amzn-s3-demo-bucket/sourcedata/hr/employee
```

É possível especificar o delimitador de coluna, o delimitador de linha, o indicador de valor nulo e outros parâmetros utilizando os atributos de conexão adicionais. Para obter mais informações, consulte [Configurações de endpoint para o Amazon S3 como fonte para AWS DMS](#CHAP_Source.S3.Configuring).

É possível especificar o proprietário do bucket e evitar o corte utilizando a configuração `ExpectedBucketOwner` do endpoint do Amazon S3, conforme mostrado a seguir. Ao fazer uma solicitação para testar uma conexão ou executar uma migração, o S3 verifica o ID da conta do proprietário do bucket em relação ao parâmetro especificado.

```
--s3-settings='{"ExpectedBucketOwner": "AWS_Account_ID"}'
```

**Topics**
+ [Definindo tabelas externas para o Amazon S3 como fonte para AWS DMS](#CHAP_Source.S3.ExternalTableDef)
+ [Usando o CDC com o Amazon S3 como fonte para AWS DMS](#CHAP_Source.S3.CDC)
+ [Pré-requisitos ao usar o Amazon S3 como fonte para AWS DMS](#CHAP_Source.S3.Prerequisites)
+ [Limitações ao usar o Amazon S3 como fonte para AWS DMS](#CHAP_Source.S3.Limitations)
+ [Configurações de endpoint para o Amazon S3 como fonte para AWS DMS](#CHAP_Source.S3.Configuring)
+ [Tipos de dados de origem do Amazon S3](#CHAP_Source.S3.DataTypes)
+ [Usando arquivos no formato Parquet no Amazon S3 como fonte para AWS DMS](#CHAP_Source.S3.Parquet)

## Definindo tabelas externas para o Amazon S3 como fonte para AWS DMS
<a name="CHAP_Source.S3.ExternalTableDef"></a>

Além dos arquivos de dados, você também deve fornecer uma definição de tabela externa. Uma *definição de tabela externa* é um documento JSON que descreve como AWS DMS interpretar os dados do Amazon S3. O tamanho máximo deste documento é 2 MB. Se você criar um endpoint de origem usando o AWS DMS Management Console, poderá inserir o JSON diretamente na caixa de mapeamento de tabelas. Se você usar o AWS Command Line Interface (AWS CLI) ou a AWS DMS API para realizar migrações, poderá criar um arquivo JSON para especificar a definição da tabela externa.

Suponha que você tem um arquivo de dados que inclui o seguinte.

```
101,Smith,Bob,2014-06-04,New York
102,Smith,Bob,2015-10-08,Los Angeles
103,Smith,Bob,2017-03-13,Dallas
104,Smith,Bob,2017-03-13,Dallas
```

Veja a seguir um exemplo de definição de tabela externa para esses dados.

```
{
    "TableCount": "1",
    "Tables": [
        {
            "TableName": "employee",
            "TablePath": "hr/employee/",
            "TableOwner": "hr",
            "TableColumns": [
                {
                    "ColumnName": "Id",
                    "ColumnType": "INT8",
                    "ColumnNullable": "false",
                    "ColumnIsPk": "true"
                },
                {
                    "ColumnName": "LastName",
                    "ColumnType": "STRING",
                    "ColumnLength": "20"
                },
                {
                    "ColumnName": "FirstName",
                    "ColumnType": "STRING",
                    "ColumnLength": "30"
                },
                {
                    "ColumnName": "HireDate",
                    "ColumnType": "DATETIME"
                },
                {
                    "ColumnName": "OfficeLocation",
                    "ColumnType": "STRING",
                    "ColumnLength": "20"
                }
            ],
            "TableColumnsTotal": "5"
        }
    ]
}
```

Os elementos neste documento JSON são os seguintes:

`TableCount`: o número de tabelas de origem. Neste exemplo, há somente uma tabela.

`Tables`: uma matriz que consiste em um mapa JSON por tabela de origem. Neste exemplo, há somente um mapa. Cada mapa consiste nos seguintes elementos:
+ `TableName`: o nome da tabela de origem.
+ `TablePath`: o caminho no bucket do Amazon S3 em que o AWS DMS pode encontrar o arquivo de carga máxima de dados. Se um valor `bucketFolder` for especificado, esse valor será pré-associado ao caminho.
+ `TableOwner`: o nome do esquema desta tabela.
+ `TableColumns`: uma matriz de um ou mais mapas, cada um dos quais descrevendo uma coluna na tabela de origem:
  + `ColumnName`: o nome de uma coluna na tabela de origem.
  + `ColumnType`: o tipo de dados da coluna. Para tipos de dados válidos, consulte [Tipos de dados de origem do Amazon S3](#CHAP_Source.S3.DataTypes).
  + `ColumnLength`: o número de bytes nesta coluna. O comprimento máximo da coluna é limitado a 2147483647 bytes (2.047 MegaBytes), pois uma fonte S3 não oferece suporte ao modo FULL LOB. `ColumnLength`é válido para os seguintes tipos de dados:
    + BYTE
    + STRING
  + `ColumnNullable`: um valor booleano que será `true`, se esta coluna puder conter valores NULL (padrão=`false`).
  + `ColumnIsPk`: um valor booleano que será `true`, se esta coluna fizer parte da chave primária (padrão=`false`).
  + `ColumnDateFormat`: o formato de data de entrada para uma coluna com os tipos DATE, TIME e DATETIME e utilizado para analisar uma string de dados em um objeto de data. Os possíveis valores incluem:

    ```
    - YYYY-MM-dd HH:mm:ss
    - YYYY-MM-dd HH:mm:ss.F
    - YYYY/MM/dd HH:mm:ss
    - YYYY/MM/dd HH:mm:ss.F
    - MM/dd/YYYY HH:mm:ss
    - MM/dd/YYYY HH:mm:ss.F
    - YYYYMMdd HH:mm:ss
    - YYYYMMdd HH:mm:ss.F
    ```
+ `TableColumnsTotal`: o número total de colunas. Esse número deve corresponder ao número de elementos no array `TableColumns`.

Se você não especificar o contrário, AWS DMS presume que `ColumnLength` seja zero.

**nota**  
Nas versões compatíveis do AWS DMS, os dados de origem do S3 também podem conter uma coluna de operação opcional como a primeira coluna antes do valor da `TableName` coluna. Essa coluna de operação identifica a operação (`INSERT`) utilizada para migrar os dados para um endpoint de destino do S3 durante a carga máxima.   
Se presente, o valor dessa coluna é o caractere inicial da palavra-chave de operação `INSERT` (`I`). Se especificado, essa coluna geralmente indica que a origem do S3 foi criada pelo DMS como um destino do S3 durante uma migração anterior.   
Nas versões do DMS anteriores a 3.4.2, essa coluna não estava presente nos dados de origem do S3 criados em uma carga máxima do DMS anterior. Adicionar essa coluna aos dados de destino do S3 permite que o formato de todas as linhas gravadas no destino do S3 seja consistente se forem gravadas durante uma carga máxima ou durante uma carga de CDC. Para obter mais informações sobre as opções de formatação de dados de destino do S3, consulte [Indicar operações de banco de dados de origem em dados migrados do S3](CHAP_Target.S3.md#CHAP_Target.S3.Configuring.InsertOps).

Para obter uma coluna do tipo NUMERIC, especifique a precisão e a escala. *Precision* é o número total de dígitos em um número, e *scale* é o número de dígitos à direita do ponto decimal. Você utiliza os elementos `ColumnPrecision` e `ColumnScale` para isso, como mostrado a seguir.

```
...
    {
        "ColumnName": "HourlyRate",
        "ColumnType": "NUMERIC",
        "ColumnPrecision": "5"
        "ColumnScale": "2"
    }
...
```

Para uma coluna do tipo DATETIME com dados que contêm segundos fracionários, especifique a escala. A *Escala* é o número de dígitos dos segundos fracionários e pode variar de 0 a 9. Você utiliza o elemento `ColumnScale` para isso, conforme mostrado a seguir.

```
...
{
      "ColumnName": "HireDate",
      "ColumnType": "DATETIME",
      "ColumnScale": "3"
}
...
```

Se você não especificar o contrário, AWS DMS assume que `ColumnScale` é zero e trunca os segundos fracionários.

## Usando o CDC com o Amazon S3 como fonte para AWS DMS
<a name="CHAP_Source.S3.CDC"></a>

Depois de AWS DMS realizar um carregamento completo de dados, ele pode, opcionalmente, replicar as alterações de dados no endpoint de destino. Para fazer isso, você carrega arquivos de captura de dados alterados (arquivos CDC) no seu bucket do Amazon S3. AWS DMS lê esses arquivos CDC quando você os carrega e, em seguida, aplica as alterações no endpoint de destino. 

Os arquivos de CDC são nomeados como segue:

```
CDC00001.csv
CDC00002.csv
CDC00003.csv
...
```

**nota**  
Para replicar com êxito os arquivos CDC na pasta de dados de alteração, faça upload em ordem léxica (sequencial). Por exemplo, carregue o arquivo CDC00002 .csv antes do CDC00003 arquivo.csv. Caso contrário, CDC00002 .csv será ignorado e não será replicado se você carregá-lo depois de .csv. CDC00003 Mas o arquivo CDC00004 .csv é replicado com sucesso se carregado após .csv. CDC00003

Para indicar onde AWS DMS encontrar os arquivos, especifique o `cdcPath` parâmetro. Continuando o exemplo anterior, se você definir `cdcPath` como `changedata`, o AWS DMS lerá os arquivos de CDC no seguinte caminho.

```
s3://amzn-s3-demo-bucket/changedata
```

Se você definir `cdcPath` como `changedata` e `bucketFolder` como `myFolder`, o AWS DMS lerá os arquivos de CDC no caminho a seguir.

```
s3://amzn-s3-demo-bucket/myFolder/changedata
```

Os registros em um arquivo de CDC são formatados da seguinte forma:
+ Operação: a operação de alteração a ser executada: `INSERT` ou `I`, `UPDATE` ou `U` ou `DELETE` ou `D`. Esses valores de caractere e palavras-chave não fazem distinção entre maiúsculas e minúsculas.
**nota**  
Nas AWS DMS versões suportadas, AWS DMS pode identificar a operação a ser executada para cada registro de carga de duas maneiras. AWS DMS pode fazer isso a partir do valor da palavra-chave do registro (por exemplo,`INSERT`) ou do caractere inicial da palavra-chave (por exemplo,`I`). Nas versões anteriores, AWS DMS reconhecia a operação de carregamento somente a partir do valor completo da palavra-chave.   
Nas versões anteriores do AWS DMS, o valor completo da palavra-chave era gravado para registrar os dados do CDC. Além disso, as versões anteriores gravavam o valor da operação para qualquer destino do S3 utilizando apenas a inicial da palavra-chave.   
O reconhecimento de ambos os formatos permite AWS DMS lidar com a operação, independentemente de como a coluna de operação é gravada para criar os dados de origem do S3. Essa abordagem é compatível com a utilização de dados de destino do S3 como origem para uma migração posterior. Com essa abordagem, você não precisa alterar o formato de nenhum valor inicial de palavra-chave que aparece na coluna da operação de origem do S3 posterior.
+ Nome da tabela: o nome da tabela de origem.
+ Nome do esquema: o nome do esquema de origem.
+ Dados: uma ou mais colunas que representam os dados a serem alterados.

Veja a seguir um exemplo de arquivo de CDC para uma tabela chamada `employee`.

```
INSERT,employee,hr,101,Smith,Bob,2014-06-04,New York
UPDATE,employee,hr,101,Smith,Bob,2015-10-08,Los Angeles
UPDATE,employee,hr,101,Smith,Bob,2017-03-13,Dallas
DELETE,employee,hr,101,Smith,Bob,2017-03-13,Dallas
```

## Pré-requisitos ao usar o Amazon S3 como fonte para AWS DMS
<a name="CHAP_Source.S3.Prerequisites"></a>

Para usar o Amazon S3 como fonte AWS DMS, seu bucket S3 de origem deve estar na mesma AWS região da instância de replicação do DMS que migra seus dados. Além disso, a conta da AWS que você utiliza para a migração deve ter acesso de leitura ao bucket de origem. Para a AWS DMS versão 3.4.7 e superior, o DMS deve acessar o bucket de origem por meio de um VPC endpoint ou de uma rota pública. Para ter informações sobre os endpoints da VPC, consulte [Configurando endpoints VPC para AWS DMS](CHAP_VPC_Endpoints.md).

A função AWS Identity and Access Management (IAM) atribuída à conta de usuário usada para criar a tarefa de migração deve ter o seguinte conjunto de permissões.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
       {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket*/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket*"
            ]
        }
    ]
}
```

------

A função AWS Identity and Access Management (IAM) atribuída à conta de usuário usada para criar a tarefa de migração deve ter o seguinte conjunto de permissões se o controle de versão estiver habilitado no bucket do Amazon S3.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
       {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket*/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket*"
            ]
        }
    ]
}
```

------

## Limitações ao usar o Amazon S3 como fonte para AWS DMS
<a name="CHAP_Source.S3.Limitations"></a>

As limitações a seguir se aplicam ao utilizar o Amazon S3 como origem:
+ Não ative o versionamento para o S3. Se o versionamento do S3 for necessário, utilize políticas de ciclo de vida para excluir ativamente as versões antigas. Caso contrário, é possível encontrar falhas na conexão de teste de endpoint devido ao tempo limite de uma chamada `list-object` do S3. Para criar uma política de ciclo de vida para um bucket do S3, consulte [Gerenciar o ciclo de vida do armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html). Para excluir a versão de um objeto do S3, consulte [Excluir versões de objetos de um bucket com versionamento ativado](https://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjectVersions.html).
+ Um bucket do S3 ativado para VPC (VPC do gateway) é compatível com as versões 3.4.7 e superiores.
+ O MySQL converte o tipo de dados `time` para `string`. Para ver os valores do tipo de dados `time` no MySQL, defina a coluna na tabela de destino como `string` e defina a configuração do **modo de preparação da tabela de destino** da tarefa como **Truncar**.
+ AWS DMS usa o tipo de `BYTE` dados internamente para dados em ambos os tipos `BYTE` de `BYTES` dados.
+ Os endpoints de origem do S3 não são compatíveis com o recurso de recarga de tabela do DMS.
+ AWS DMS não suporta o modo LOB completo com o Amazon S3 como fonte.

As limitações a seguir se aplicam ao utilizar arquivos no formato Parquet no Amazon S3 como origem:
+ Datas nos formatos `MMYYYYDD` ou `DDMMYYYY` não são compatíveis com o recurso de particionamento de data de origem do Parquet S3.

## Configurações de endpoint para o Amazon S3 como fonte para AWS DMS
<a name="CHAP_Source.S3.Configuring"></a>

É possível utilizar as configurações do endpoint para configurar o banco de dados de origem do Amazon S3 de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de origem usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--s3-settings '{"EndpointSetting": "value", ...}'` JSON.

**nota**  
AWS DMS usa como padrão uma conexão segura com o endpoint do Amazon S3 sem a necessidade de especificar o modo SSL ou o certificado.

A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o Amazon S3 como origem.


| **Opção** | **Descrição** | 
| --- | --- | 
| BucketFolder |  (Opcional) Um nome da pasta no bucket do S3. Se o atributo de origem for fornecido, os arquivos de dados de origem e os arquivos da CDC serão lidos no caminho `s3://amzn-s3-demo-bucket/bucketFolder/schemaName/tableName/` e `s3://amzn-s3-demo-bucket/bucketFolder/` respectivamente. Se esse atributo não for especificado, o caminho utilizado será `schemaName/tableName/`.  `'{"BucketFolder": "sourceData"}'`  | 
| BucketName |  O nome do bucket do S3. `'{"BucketName": "amzn-s3-demo-bucket"}'`  | 
| CdcPath | A localização dos arquivos da CDC. Esse atributo é necessário quando uma tarefa captura dados de alterações; caso contrário, ele é opcional. Se CdcPath estiver presente, AWS DMS lê os arquivos CDC desse caminho e replica as alterações de dados no endpoint de destino. Para obter mais informações, consulte [Usando o CDC com o Amazon S3 como fonte para AWS DMS](#CHAP_Source.S3.CDC). `'{"CdcPath": "changeData"}'`  | 
| CsvDelimiter |  O delimitador utilizado para separar colunas nos arquivos de origem. O padrão é uma vírgula. Veja a seguir um exemplo. `'{"CsvDelimiter": ","}'`  | 
| CsvNullValue |  Uma string definida pelo usuário que é AWS DMS tratada como nula ao ler a partir da fonte. O padrão é uma string vazia. Se você não definir esse parâmetro, AWS DMS tratará uma string vazia como um valor nulo. Se você definir esse parâmetro como uma string como “\$1 N”, AWS DMS tratará essa string como o valor nulo e tratará as strings vazias como um valor de string vazio.  | 
| CsvRowDelimiter |  O delimitador utilizado para separar linhas nos arquivos de origem. O padrão é uma nova linha (`\n`). `'{"CsvRowDelimiter": "\n"}'`  | 
| DataFormat |  Defina esse valor como `Parquet` para ler dados no formato Parquet. `'{"DataFormat": "Parquet"}'`  | 
| IgnoreHeaderRows |  Quando esse valor é definido como 1, AWS DMS ignora o cabeçalho da primeira linha em um arquivo.csv. Um valor de 1 habilita o recurso, um valor de 0 desabilita o recurso. O padrão é 0. `'{"IgnoreHeaderRows": 1}'`  | 
| Rfc4180 |  Quando esse valor é definido como `true` ou `y`, as aspas duplas de abertura devem ser seguidas por aspas duplas de fechamento. Essa formatação está em conformidade com RFC 4180. Quando esse valor for definido para `false` ou `n`, os literais das strings serão copiados no destino como estão. Nesse caso, um delimitador (linha ou coluna) sinaliza o final do campo. Assim, você não poderá utilizar um delimitador como parte da string, pois ele sinalizará o final do valor. O padrão é `true`. Valores válidos: `true`, `false`, `y`, `n` `'{"Rfc4180": false}'`  | 

## Tipos de dados de origem do Amazon S3
<a name="CHAP_Source.S3.DataTypes"></a>

Migração de dados que usa o Amazon S3 como fonte para AWS DMS necessidades de mapear dados do Amazon S3 AWS DMS para tipos de dados. Para obter mais informações, consulte [Definindo tabelas externas para o Amazon S3 como fonte para AWS DMS](#CHAP_Source.S3.ExternalTableDef).

Para obter informações sobre como visualizar o tipo de dados mapeado no destino, consulte a seção relativa ao endpoint de destino que você está usando.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).

Os seguintes tipos de AWS DMS dados são usados com o Amazon S3 como fonte:
+ BYTE: requer `ColumnLength`. Para obter mais informações, consulte [Definindo tabelas externas para o Amazon S3 como fonte para AWS DMS](#CHAP_Source.S3.ExternalTableDef).
+ DATE
+ TIME
+ DATETIME: para obter mais informações e um exemplo, consulte o exemplo do tipo DATETIME em [Definindo tabelas externas para o Amazon S3 como fonte para AWS DMS](#CHAP_Source.S3.ExternalTableDef).
+ INT1
+ INT2
+ INT4
+ INT8
+ NUMÉRICO — Requer `ColumnPrecision` e. `ColumnScale` AWS DMS suporta os seguintes valores máximos:
  + **ColumnPrecision: 38**
  + **ColumnScale: 31**

  Para obter mais informações e um exemplo, consulte o exemplo do tipo NUMERIC em [Definindo tabelas externas para o Amazon S3 como fonte para AWS DMS](#CHAP_Source.S3.ExternalTableDef).
+ REAL4
+ REAL8
+ STRING: requer `ColumnLength`. Para obter mais informações, consulte [Definindo tabelas externas para o Amazon S3 como fonte para AWS DMS](#CHAP_Source.S3.ExternalTableDef).
+ UINT1
+ UINT2
+ UINT4
+ UINT8
+ BLOB
+ CLOB
+ BOOLEAN

## Usando arquivos no formato Parquet no Amazon S3 como fonte para AWS DMS
<a name="CHAP_Source.S3.Parquet"></a>

Na AWS DMS versão 3.5.3 e posterior, você pode usar arquivos no formato Parquet em um bucket do S3 como fonte para replicação de carga completa ou CDC. 

O DMS só é compatível com arquivos no formato Parquet como origem que o DMS gera ao migrar dados para um endpoint de destino do S3. Os nomes dos arquivos devem estar no formato compatível, ou o DMS não os incluirá na migração.

Para arquivos de dados de origem no formato Parquet, eles devem estar na seguinte pasta e convenção de nomenclatura.

```
schema/table1/LOAD00001.parquet
schema/table2/LOAD00002.parquet
schema/table2/LOAD00003.parquet
```

Para arquivos de dados de origem para dados de CDC no formato Parquet, nomeie-os e armazene-os usando a seguinte pasta e convenção de nomenclatura.

```
schema/table/20230405-094615814.parquet
schema/table/20230405-094615853.parquet
schema/table/20230405-094615922.parquet
```

Para acessar arquivos no formato Parquet, defina as seguintes configurações de endpoint:
+ Defina `DataFormat` como `Parquet`. 
+ Não defina a configuração `cdcPath`. Crie os arquivos no formato Parquet nas pastas schema/table especificadas. 

Para ter mais informações sobre as configurações dos endpoints do S3, consulte [S3Settings](https://docs.aws.amazon.com/dms/latest/APIReference/API_S3Settings.html) na *Referência de API do AWS Database Migration Service *.

### Tipos de dados compatíveis com arquivos no formato Parquet
<a name="CHAP_Source.S3.Parquet.Datatypes"></a>

AWS DMS suporta os seguintes tipos de dados de origem e destino ao migrar dados de arquivos no formato Parquet. Garanta que a tabela de destino tenha colunas dos tipos de dados corretos antes de migrar.


| Tipo de dados de origem | Tipo de dados de destino | 
| --- | --- | 
| BYTE | BINARY | 
| DATE | DATE32 | 
| TIME | TIME32 | 
| DATETIME | TIMESTAMP | 
| INT1 | INT8 | 
| INT2 | INT16 | 
| INT4 | INT32 | 
| INT8 | INT64 | 
| NUMERIC | DECIMAL | 
| REAL4 | FLOAT | 
| REAL8 | DOUBLE | 
| STRING | STRING | 
| UINT1 | UINT8 | 
| UINT2 | UINT16 | 
| UINT4 | UINT32 | 
| UINT8 | UINT | 
| WSTRING | STRING | 
| BLOB | BINARY | 
| NCLOB | STRING | 
| CLOB | STRING | 
| BOOLEAN | BOOL | 

# Usando o banco de dados IBM Db2 para Linux, Unix, Windows e Amazon RDS (Db2 LUW) como fonte para AWS DMS
<a name="CHAP_Source.DB2"></a>

Você pode migrar dados de um banco de dados IBM Db2 para Linux, Unix, Windows e Amazon RDS (Db2 LUW) para qualquer banco de dados de destino compatível usando (). AWS Database Migration Service AWS DMS

Para obter informações sobre as versões do Db2 no Linux, Unix, Windows e RDS que oferecem AWS DMS suporte como fonte, consulte. [Fontes para AWS DMS](CHAP_Introduction.Sources.md) 

É possível utilizar SSL para criptografar conexões entre o endpoint do Db2 LUW e a instância de replicação. Para obter mais informações sobre a utilização de SSL com um endpoint do Db2 LUW, consulte [Usando SSL com AWS Database Migration Service](CHAP_Security.SSL.md).

Ao AWS DMS ler dados de um banco de dados de origem do IBM Db2, ele usa o nível de isolamento padrão CURSOR STABILITY (CS) para o Db2 versão 9.7 e superior. Para ter mais informações, consulte a documentação do [IBM Db2 para Linux, do UNIX e do Windows](https://www.ibm.com/docs/en/db2/12.1.0).

## Pré-requisitos ao usar o Db2 LUW como fonte para AWS DMS
<a name="CHAP_Source.DB2.Prerequisites"></a>

Os pré-requisitos a seguir são necessários antes de utilizar um banco de dados Db2 LUW como origem.

Para habilitar a replicação contínua, também chamada de captura de dados de alteração (CDC), faça o seguinte:
+ Defina o banco de dados para ser recuperável, o que AWS DMS requer a captura de alterações. Um banco de dados será recuperável se um ou os dois parâmetros de configuração de banco de dados `LOGARCHMETH1` e `LOGARCHMETH2` estiverem definidos como `ON`.

  Se seu banco de dados for recuperável, AWS DMS poderá acessar o Db2, `ARCHIVE LOG` se necessário.
+ Certifique-se de que os registros de DB2 transações estejam disponíveis, com um período de retenção suficiente para serem processados AWS DMS. 
+ DB2 requer `DBADM` autorização `SYSADM` para extrair registros do registro de transações. Conceda à conta do usuário as seguintes permissões:
  + `SYSADM` ou `DBADM`
  + `DATAACCESS`
**nota**  
Para tarefas somente de carga máxima, a conta de usuário do DMS precisa da permissão DATAACCESS.
+ Ao usar o IBM DB2 for LUW versão 9.7 como fonte, defina o atributo de conexão extra (ECA), da seguinte `CurrentLsn` forma:

  `CurrentLsn=LSN` em que `LSN` especifica um número de sequência de log (LSN) em que você deseja que a replicação seja iniciada. Ou, `CurrentLsn=scan`.
+ Ao usar o Amazon RDS for Db2 LUW como fonte, certifique-se de que os registros de arquivamento estejam disponíveis para o. AWS DMS Como os bancos AWS de dados DB2 gerenciados eliminam os registros de arquivamento o mais rápido possível, você deve aumentar o tempo em que os registros permanecem disponíveis. Por exemplo, para aumentar a retenção de log para 24 horas, execute o comando a seguir:

  ```
  db2 "call rdsadmin.set_archive_log_retention( ?, 'TESTDB', '24')"
  ```

  Para ter mais informações sobre os procedimentos do Amazon RDS para Db2 LUW, consulte [Referência de procedimentos armazenados do Amazon RDS para Db2](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/db2-stored-procedures.html) no *Guia do usuário do Amazon Relational Database Service*.
+ Conceda os seguintes privilégios se você usar avaliações DB2 específicas de pré-migração:

  ```
  GRANT CONNECT ON DATABASE TO USER <DMS_USER>;
  GRANT SELECT ON SYSIBM.SYSDUMMY1 TO USER <DMS_USER>;
  GRANT SELECT ON SYSIBMADM.ENV_INST_INFO TO USER <DMS_USER>;
  GRANT SELECT ON SYSIBMADM.DBCFG TO USER <DMS_USER>;
  GRANT SELECT ON SYSCAT.SCHEMATA TO USER <DMS_USER>;
  GRANT SELECT ON SYSCAT.COLUMNS TO USER <DMS_USER>;
  GRANT SELECT ON SYSCAT.TABLES TO USER <DMS_USER>;
  GRANT EXECUTE ON FUNCTION SYSPROC.AUTH_LIST_AUTHORITIES_FOR_AUTHID TO <DMS_USER>;
  GRANT EXECUTE ON PACKAGE NULLID.SYSSH200 TO USER <DMS_USER>;
  ```

## Limitações ao usar o Db2 LUW como fonte para AWS DMS
<a name="CHAP_Source.DB2.Limitations"></a>

AWS DMS não oferece suporte a bancos de dados em cluster. No entanto, é possível definir um Db2 LUW separado para cada um dos endpoints de um cluster. Por exemplo, é possível criar uma tarefa de migração de carga máxima com qualquer um dos nós no cluster e criar tarefas separadas em cada nó.

AWS DMS não suporta o tipo de `BOOLEAN` dados em seu banco de dados Db2 LUW de origem.

Ao utilizar a replicação contínua (CDC), aplicam-se as seguintes limitações:
+ Quando uma tabela com várias partições é truncada, o número de eventos DDL mostrados no AWS DMS console é igual ao número de partições. Isso ocorre porque o Db2 LUW registra um DDL separado para cada partição.
+ As ações de DDL a seguir não são compatíveis em tabelas particionadas:
  + ALTER TABLE ADD PARTITION
  + ALTER TABLE DETACH PARTITION
  + ALTER TABLE ATTACH PARTITION
+ AWS DMS não suporta uma migração contínua de replicação de uma instância em espera de recuperação de desastres de DB2 alta disponibilidade (HADR). O modo de espera é inacessível.
+ O tipo de dados DECFLOAT não é compatível. Consequentemente, alterações nas colunas DECFLOAT são ignoradas durante a replicação contínua.
+ A instrução RENAME COLUMN não é compatível.
+ Ao realizar atualizações nas tabelas de agrupamento multidimensional (MDC), cada atualização é mostrada no AWS DMS console como INSERT \$1 DELETE.
+ Quando a configuração da tarefa **Incluir colunas LOB na replicação** não está ativada, qualquer tabela que tenha com colunas LOB é suspensa durante a replicação contínua.
+ Para as versões 10.5 e superiores do Db2 LUW, as colunas de string de comprimento variável com dados armazenados são ignoradas. out-of-row Essa limitação se aplica somente a tabelas criadas com tamanho de linha estendido para colunas com tipos de dados, como VARCHAR e VARGRAPHIC. Para contornar essa limitação, mova a tabela para um espaço de tabela com um tamanho de página maior. Para obter mais informações, consulte [O que posso fazer se eu quiser alterar o tamanho da página dos espaços de DB2 tabela]( https://www.ibm.com/support/pages/what-can-i-do-if-i-want-change-pagesize-db2-tablespaces ).
+ Para a replicação contínua, o DMS não oferece suporte à migração de dados carregados no nível da página pelo utilitário LOAD. DB2 Em vez disso, utilize o utilitário IMPORT que utiliza inserções SQL. Para obter mais informações, consulte [diferenças entre os utilitários de importação e de carregamento]( https://www.ibm.com/docs/en/db2/11.1?topic=utilities-differences-between-import-load-utility). 
+ Enquanto uma tarefa de replicação está em execução, o DMS captura CREATE TABLE DDLs somente se as tabelas tiverem sido criadas com o atributo DATA CAPTURE CHANGE.
+ O DMS apresenta as seguintes limitações ao usar o Db2 Database Partition Feature (DPF):
  + O DMS não pode coordenar transações entre nós do Db2 em um ambiente do DPF. Isso se deve às restrições na interface da API IBM DB2 READLOG. No DPF, as transações podem abranger vários nós do Db2, dependendo de como DB2 particiona os dados. Como resultado, sua solução DMS deve capturar transações de cada nó do Db2 de forma independente.
  + O DMS pode capturar transações locais de cada nó do Db2 no cluster do DPF configurando `connectNode` como `1` em vários endpoints de origem do DMS. Essa configuração corresponde aos números de nós lógicos definidos no arquivo de configuração do DB2 servidor`db2nodes.cfg`.
  + As transações locais em nós individuais do Db2 podem ser partes de uma transação global maior. O DMS aplica cada transação local de forma independente no destino, sem coordenação com transações em outros nós do Db2. Esse processamento independente pode levar a complicações, em especial quando as linhas são movidas entre as partições.
  + Quando o DMS faz replicações de vários nós do Db2, não há garantia da ordem correta das operações no destino, pois o DMS aplica as operações de forma independente para cada nó do Db2. Você deve garantir que a captura de transações locais de forma independente de cada nó do Db2 funcione para seu caso de uso específico.
  + Ao migrar de um ambiente do DPF, recomendamos primeiro executar uma tarefa de carga máxima sem eventos em cache e, em seguida, executar tarefas somente de CDC. Recomendamos executar uma tarefa por nó do Db2, começando pelo timestamp de início do Full Load ou pelo LRI (identificador de registro de log) definido usando o atributo de conexão extra do `StartFromContext` endpoint. Para ter informações sobre como determinar o ponto de partida da replicação, consulte [Finding the LSN or LRI value for replication start](https://www.ibm.com/support/pages/db2-finding-lsn-or-lri-value-replication-start) na *documentação de suporte do IBM*. 
+ Para replicação contínua (CDC), se você planeja iniciar a replicação a partir de um timestamp específico, você deve definir o atributo de conexão `StartFromContext` extra para o timestamp necessário.
+ Atualmente, o DMS não oferece suporte ao Db2 pureScale Feature, uma extensão do DB2 LUW que você pode usar para escalar sua solução de banco de dados.
+ A opção `DATA CAPTURE CHANGES` de tabela é um pré-requisito crucial para os processos de replicação DB2 de dados. Deixar de ativar essa opção ao criar tabelas pode causar a perda de dados, especialmente para tarefas de replicação somente do CDC (Change Data Capture) iniciadas a partir de um ponto de partida anterior. AWS DMS habilitará esse atributo por padrão ao reiniciar uma tarefa CDC ou FULL\$1CDC. No entanto, qualquer alteração feita no banco de dados de origem antes da reinicialização da tarefa pode passar despercebida.

  ```
  ALTER TABLE TABLE_SCHEMA.TABLE_NAME DATA CAPTURE CHANGES INCLUDE LONGVAR COLUMNS;
  ```

## Configurações de endpoint ao usar o Db2 LUW como fonte para AWS DMS
<a name="CHAP_Source.DB2.ConnectionSettings"></a>

Você pode especificar as configurações ao criar o endpoint de origem usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/create-endpoint.html), com o

`--ibm-db2-settings '{"EndpointSetting1": "value1","EndpointSetting2": "value2"}'`

Sintaxe JSON.

A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o Db2 LUW como origem.


| Nome da configuração | Description | 
| --- | --- | 
|  `CurrentLsn`  |  Para replicação contínua (CDC), utilize `CurrentLsn` para especificar um número de sequência de log (LSN) em que você deseja que a replicação seja iniciada.   | 
|  `MaxKBytesPerRead`  |  Número máximo de bytes por leitura, como um valor NUMBER. O padrão é 64 KB.  | 
|  `SetDataCaptureChanges`  |  Habilita a replicação contínua (CDC) como um valor BOOLEAN. O padrão é true.  | 

## Atributos de conexão extras (ECAs) ao usar o Db2 LUW como fonte para AWS DMS
<a name="CHAP_Source.DB2.ConnectionAttrib"></a>

Você pode especificar os Atributos de Conexão Extra (ECAs) ao criar o endpoint de origem usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/create-endpoint.html), com o

`--extra-connection-attributes 'ECAname1=value1;ECAname2=value2;'`

A tabela a seguir mostra o ECAs que você pode usar com o Db2 LUW como fonte.


| Nome do atributo | Description | 
| --- | --- | 
|  `ConnectionTimeout`  |  Use esse ECA para definir o tempo limite de conexão do endpoint para o endpoint Db2 LUW, em segundos. O valor de padrão é de 10 segundos. Exemplo: `ConnectionTimeout=30;`  | 
|  `executeTimeout`  |  Atributo de conexão extra que define o tempo limite da instrução (consulta) para o endpoint DB2 LUW, em segundos. O valor padrão é de 60 segundos. Exemplo: `executeTimeout=120;`  | 
|  `StartFromContext`  |  Para replicação contínua (CDC), utilize `StartFromContext` para especificar o limite inferior de um log em que iniciar a replicação. `StartFromContext` aceita diferentes formas de valores. Os valores válidos são: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Source.DB2.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Source.DB2.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Source.DB2.html) Para determinar o LRI/LSN intervalo de um arquivo de log, execute o `db2flsn` comando conforme mostrado no exemplo a seguir. <pre>db2flsn -db SAMPLE -lrirange 2</pre> O resultado desse exemplo é semelhante ao exemplo a seguir.  <pre><br />S0000002.LOG: has LRI range 00000000000000010000000000002254000000000004F9A6 to <br />000000000000000100000000000022CC000000000004FB13</pre> Nessa saída, o arquivo de log é S0000002.LOG e o valor do **StartFromContext**LRI são os 34 bytes no final do intervalo. <pre>0100000000000022CC000000000004FB13</pre>  | 

## Tipos de dados de origem para IBM Db2 LUW
<a name="CHAP_Source.DB2.DataTypes"></a>

A migração de dados que usa o Db2 LUW como fonte para AWS DMS suportar a maioria dos tipos de dados do Db2 LUW. A tabela a seguir mostra os tipos de dados de origem do Db2 LUW que são suportados durante o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados. Para obter mais informações sobre os tipos de dados do Db2 LUW, consulte a [documentação do Db2 LUW](https://www.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0008483.html).

Para obter informações sobre como visualizar o tipo de dados mapeado no destino, consulte a seção relativa ao endpoint de destino que você está usando.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  Tipos de dados do Db2 LUW  |  AWS DMS tipos de dados  | 
| --- | --- | 
|  INTEGER  |  INT4  | 
|  SMALLINT  |  INT2  | 
|  BIGINT  |  INT8  | 
|  DECIMAL (p,s)  |  NUMERIC (p,s)  | 
|  FLOAT  |  REAL8  | 
|  DOUBLE  |  REAL8  | 
|  REAL  |  REAL4  | 
|  DECFLOAT (p)  |  Se a precisão for 16, então REAL8; se a precisão for 34, então STRING  | 
|  GRAPHIC (n)  |  WSTRING, para strings de gráficos de comprimento fixo de caracteres de byte duplo com um comprimento maior que 0 e menor ou igual a 127  | 
|  VARGRAPHIC (n)  |  WSTRING, para strings de gráficos de comprimento variável com um comprimento maior que 0 e menor ou igual a 16.352 caracteres de byte duplo.  | 
|  LONG VARGRAPHIC (n)  |  CLOB, para strings de gráficos de comprimento variável com um comprimento maior que 0 e menor ou igual a 16.352 caracteres de byte duplo.  | 
|  CHARACTER (n)  |  STRING, para strings de comprimento fixo de caracteres de byte duplo com um comprimento maior que 0 e menor ou igual a 255  | 
|  VARCHAR (n)  |  STRING, para strings de comprimento variável de caracteres de byte duplo com um comprimento maior que 0 e menor ou igual a 32.704  | 
|  LONG VARCHAR (n)  |  CLOB, para strings de comprimento variável de caracteres de byte duplo com um comprimento maior que 0 e menor ou igual a 32.704  | 
|  CHAR (n) FOR BIT DATA  |  BYTES  | 
|  VARCHAR (n) FOR BIT DATA  |  BYTES  | 
|  LONG VARCHAR FOR BIT DATA  |  BYTES  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  TIMESTAMP  |  DATETIME  | 
|  BLOB (n)  |  BLOB O comprimento máximo é 2.147.483.647 bytes  | 
|  CLOB (n)  |  CLOB O comprimento máximo é 2.147.483.647 bytes  | 
|  DBCLOB (n)  |  CLOB O comprimento máximo é 1.073.741.824 caracteres de byte duplo  | 
|  XML  |  CLOB  | 

# Usando o IBM Db2 para z/OS bancos de dados como fonte para AWS DMS
<a name="CHAP_Source.DB2zOS"></a>

Você pode migrar dados de um banco de dados IBM for para qualquer z/OS banco de dados de destino suportado usando AWS Database Migration Service (AWS DMS). 

Para obter informações sobre as versões do Db2 z/OS que AWS DMS oferecem suporte como fonte, consulte[Fontes para AWS DMS](CHAP_Introduction.Sources.md).

## Pré-requisitos ao usar o Db2 for como fonte para z/OS AWS DMS
<a name="CHAP_Source.DB2zOS.Prerequisites"></a>

Para usar um z/OS banco de dados IBM Db2 for como origem em AWS DMS, conceda os seguintes privilégios ao Db2 for z/OS usuário especificado nas configurações de conexão do endpoint de origem.

```
GRANT SELECT ON SYSIBM.SYSTABLES TO Db2USER;
GRANT SELECT ON SYSIBM.SYSTABLESPACE TO Db2USER;
GRANT SELECT ON SYSIBM.SYSTABLEPART TO Db2USER;                    
GRANT SELECT ON SYSIBM.SYSCOLUMNS TO Db2USER;
GRANT SELECT ON SYSIBM.SYSDATABASE TO Db2USER;
GRANT SELECT ON SYSIBM.SYSDUMMY1 TO Db2USER
```

Também conceda SELECT ON em tabelas de origem `user defined`.

Um endpoint AWS DMS IBM Db2 for z/OS source depende do IBM Data Server Driver for ODBC para acessar os dados. O servidor de banco de dados deve ter uma licença válida do IBM ODBC Connect para que o DMS se conecte a esse endpoint.

## Limitações ao usar o Db2 for z/OS como fonte para AWS DMS
<a name="CHAP_Source.DB2zOS.Limitations"></a>

As seguintes limitações se aplicam ao usar um z/OS banco de dados IBM Db2 for como fonte para AWS DMS:
+ Somente tarefas de replicação de carga máxima são compatíveis. A captura de dados de alteração (CDC) não é compatível.
+ A carga paralela não é compatível.
+ A validação de dados das visualizações não é compatível.
+ Os nomes do esquema, da tabela e das colunas devem ser especificados em maiúsculas nos mapeamentos de tabela para transformações de nível e filtros de seleção em Column/table nível de linha.

## Tipos de dados de origem do IBM Db2 for z/OS
<a name="CHAP_Source.DB2zOS.DataTypes"></a>

As migrações de dados que usam o Db2 for z/OS como fonte de AWS DMS suporte à maioria dos tipos de dados do Db2. z/OS A tabela a seguir mostra o Db2 para tipos de dados de z/OS origem que são suportados durante o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados.

Para obter mais informações sobre o Db2 para tipos de z/OS dados, consulte a documentação do [IBM Db2](https://www.ibm.com/docs/en/db2-for-zos/12?topic=elements-data-types). z/OS 

Para obter informações sobre como visualizar o tipo de dados mapeado no destino, consulte a seção relativa ao endpoint de destino que você está usando.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  Db2 para tipos z/OS de dados  |  AWS DMS tipos de dados  | 
| --- | --- | 
|  INTEGER  |  INT4  | 
|  SMALLINT  |  INT2  | 
|  BIGINT  |  INT8  | 
|  DECIMAL (p,s)  |  NUMERIC (p,s) Se um ponto decimal estiver definido como uma vírgula (,) na DB2 configuração, configure Replicate para suportar a configuração. DB2   | 
|  FLOAT  |  REAL8  | 
|  DOUBLE  |  REAL8  | 
|  REAL  |  REAL4  | 
|  DECFLOAT (p)  |  Se a precisão for 16, então REAL8; se a precisão for 34, então STRING  | 
|  GRAPHIC (n)  |  Se n>= 127 que WSTRING, para strings de gráficos de tamanho fixo de strings de caracteres de byte duplo com um tamanho maior que 0 e menor que ou igual a 127  | 
|  VARGRAPHIC (n)  |  WSTRING, para strings de gráficos de comprimento variável com um comprimento maior que 0 e menor ou igual a 16.352 caracteres de byte duplo.  | 
|  LONG VARGRAPHIC (n)  |  CLOB, para strings de gráficos de comprimento variável com um comprimento maior que 0 e menor ou igual a 16.352 caracteres de byte duplo.  | 
|  CHARACTER (n)  |  STRING, para strings de comprimento fixo de caracteres de byte duplo com um comprimento maior que 0 e menor ou igual a 255  | 
|  VARCHAR (n)  |  STRING, para strings de comprimento variável de caracteres de byte duplo com um comprimento maior que 0 e menor ou igual a 32.704  | 
|  LONG VARCHAR (n)  |  CLOB, para strings de comprimento variável de caracteres de byte duplo com um comprimento maior que 0 e menor ou igual a 32.704  | 
|  CHAR (n) FOR BIT DATA  |  BYTES  | 
|  VARCHAR (n) FOR BIT DATA  |  BYTES  | 
|  LONG VARCHAR FOR BIT DATA  |  BYTES  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  TIMESTAMP  |  DATETIME  | 
|  BLOB (n)  |  BLOB O comprimento máximo é 2.147.483.647 bytes  | 
|  CLOB (n)  |  CLOB O comprimento máximo é 2.147.483.647 bytes  | 
|  DBCLOB (n)  |  CLOB O comprimento máximo é 1.073.741.824 caracteres de byte duplo  | 
|  XML  |  CLOB  | 
|  BINARY  |  BYTES  | 
|  VARBINARY  |  BYTES  | 
|  ROWID  |  BYTES. Para obter mais informações sobre como trabalhar com ROWID, consulte o seguinte.   | 
|  TIMESTAMP WITH TIME ZONE  |  Sem compatibilidade.  | 

As colunas ROWID são migradas por padrão quando o modo de preparação da tabela de destino para a tarefa é definido como DROP\$1AND\$1CREATE (o padrão). A validação de dados ignora essas colunas porque as linhas não têm sentido fora do banco de dados e da tabela específicos. Para desativar a migração dessas colunas, é possível executar uma das seguintes etapas preparatórias: 
+ Pré-crie a tabela de destino sem essas colunas. Defina o modo de preparação da tabela de destino da tarefa como DO\$1NOTHING ou TRUNCATE\$1BEFORE\$1LOAD. Você pode usar AWS Schema Conversion Tool (AWS SCT) para pré-criar a tabela de destino sem as colunas.
+ Adicione uma regra de mapeamento de tabela a uma tarefa que filtra essas colunas para que elas sejam ignoradas. Para obter mais informações, consulte [Regras de transformação e ações](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

## Agrupamentos EBCDIC no PostgreSQL para serviço de modernização de mainframe AWS
<a name="CHAP_Source.DB2zOS.EBCDIC"></a>

AWS O programa de modernização de mainframe ajuda você a modernizar seus aplicativos de mainframe para AWS ambientes de tempo de execução gerenciados. Ele fornece ferramentas e recursos para ajudar a planejar e implementar os projetos de migração e de modernização. Para obter mais informações sobre modernização e migração de mainframe, consulte Modernização de [mainframe](https://aws.amazon.com/mainframe/) com. AWS

Alguns conjuntos de z/OS dados IBM Db2 são codificados no conjunto de caracteres Extended Binary Coded Decimal Interchange (EBCDIC). Esse é um conjunto de caracteres que foi desenvolvido antes do ASCII (American Standard Code for Information Interchange) se tornar comumente utilizado. Uma *página de código* mapeia cada caractere do texto para os caracteres em um conjunto de caracteres. Uma página de código tradicional contém as informações de mapeamento entre um ponto de código e um ID de caractere. Um *ID de caractere* é uma string de dados de caracteres de 8 bytes. Um *ponto de código* é um número binário de 8 bits que representa um caractere. Os pontos de código geralmente são mostrados como representações hexadecimais de seus valores binários.

Se você usa atualmente a Micro Focus ou BluAge um componente do serviço de modernização de mainframe, você deve pedir AWS DMS para *mudar* (traduzir) determinados pontos de código. Você pode usar as configurações da AWS DMS tarefa para realizar os turnos. O exemplo a seguir mostra como usar a AWS DMS `CharacterSetSettings` operação para mapear os turnos em uma configuração de tarefa do DMS.

```
"CharacterSetSettings": {
        "CharacterSetSupport": null,
        "CharacterReplacements": [
{"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0178"}
            }
        ]
    }
```

Já existem alguns agrupamentos de EBCDIC para o PostgreSQL que compreendem a mudança necessária. Várias páginas de código diferentes são compatíveis. As seções a seguir fornecem exemplos de JSON do que você deve mudar para todas as páginas de código compatíveis. Você pode simplesmente usar copy-and-past o JSON necessário para sua tarefa do DMS.

### Agrupamentos de EBCDIC específicos da Micro Focus
<a name="CHAP_Source.DB2zOS.EBCDIC.MicroFocus"></a>

Para a Micro Focus, mude um subconjunto de caracteres conforme necessário para os seguintes agrupamentos.

```
 da-DK-cp1142m-x-icu
 de-DE-cp1141m-x-icu
 en-GB-cp1146m-x-icu
 en-US-cp1140m-x-icu
 es-ES-cp1145m-x-icu
 fi-FI-cp1143m-x-icu
 fr-FR-cp1147m-x-icu
 it-IT-cp1144m-x-icu
 nl-BE-cp1148m-x-icu
```

**Example Mudanças de dados da Micro Focus por agrupamento:**  
**en\$1us\$1cp1140m**  
Mudança de código:  

```
0000    0180
00A6    0160
00B8    0161
00BC    017D
00BD    017E
00BE    0152
00A8    0153
00B4    0178
```
Mapeamento de entrada correspondente para uma AWS DMS tarefa:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1141m**  
Mudança de código:  

```
0000    0180
00B8    0160
00BC    0161
00BD    017D
00BE    017E
00A8    0152
00B4    0153
00A6    0178
```
Mapeamento de entrada correspondente para uma AWS DMS tarefa:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1142m**  
Mudança de código:  

```
0000    0180
00A6    0160
00B8    0161
00BC    017D
00BD    017E
00BE    0152
00A8    0153
00B4    0178
```
Mapeamento de entrada correspondente para uma AWS DMS tarefa:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1143m**  
Mudança de código:  

```
0000    0180
00B8    0160
00BC    0161
00BD    017D
00BE    017E
00A8    0152
00B4    0153
00A6    0178
```
Mapeamento de entrada correspondente para uma AWS DMS tarefa:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1144m**  
Mudança de código:  

```
0000    0180
00B8    0160
00BC    0161
00BD    017D
00BE    017E
00A8    0152
00B4    0153
00A6    0178
```
Mapeamento de entrada correspondente para uma AWS DMS tarefa:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1145m**  
Mudança de código:  

```
0000    0180
00A6    0160
00B8    0161
00A8    017D
00BC    017E
00BD    0152
00BE    0153
00B4    0178
```
Mapeamento de entrada correspondente para uma AWS DMS tarefa:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1146m**  
Mudança de código:  

```
0000    0180
00A6    0160
00B8    0161
00BC    017D
00BD    017E
00BE    0152
00A8    0153
00B4    0178
```
Mapeamento de entrada correspondente para uma AWS DMS tarefa:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1147m**  
Mudança de código:  

```
0000    0180
00B8    0160
00A8    0161
00BC    017D
00BD    017E
00BE    0152
00B4    0153
00A6    0178
```
Mapeamento de entrada correspondente para uma AWS DMS tarefa:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1148m**  
Mudança de código:  

```
0000    0180
00A6    0160
00B8    0161
00BC    017D
00BD    017E
00BE    0152
00A8    0153
00B4    0178
```
Mapeamento de entrada correspondente para uma AWS DMS tarefa:  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0178"}
```

### BluAge agrupamentos específicos do EBCDIC
<a name="CHAP_Source.DB2zOS.EBCDIC.BluAge"></a>

Para BluAge, altere todos os *valores baixos* e *altos* a seguir, conforme necessário. Esses agrupamentos só devem ser usados para oferecer suporte ao serviço de migração de mainframe. BluAge 

```
da-DK-cp1142b-x-icu
 da-DK-cp277b-x-icu
 de-DE-cp1141b-x-icu
 de-DE-cp273b-x-icu
 en-GB-cp1146b-x-icu
 en-GB-cp285b-x-icu
 en-US-cp037b-x-icu
 en-US-cp1140b-x-icu
 es-ES-cp1145b-x-icu
 es-ES-cp284b-x-icu
 fi-FI-cp1143b-x-icu
 fi-FI-cp278b-x-icu 
 fr-FR-cp1147b-x-icu
 fr-FR-cp297b-x-icu
 it-IT-cp1144b-x-icu
 it-IT-cp280b-x-icu
 nl-BE-cp1148b-x-icu
 nl-BE-cp500b-x-icu
```

**Example BluAge Mudanças de dados:**  
**da-DK-cp277b** e **da-DK-cp1142b**  
Mudança de código:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
Mapeamento de entrada correspondente para uma AWS DMS tarefa:  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**de-DE-273b** e **de-DE-1141b**  
Mudança de código:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
Mapeamento de entrada correspondente para uma AWS DMS tarefa:  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**en-GB-285b** e **en-GB-1146b**  
Mudança de código:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
Mapeamento de entrada correspondente para uma AWS DMS tarefa:  

```
{"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**en-us-037b** e **en-us-1140b**  
Mudança de código:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
Mapeamento de entrada correspondente para uma AWS DMS tarefa:  

```
{"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**es-ES-284b** e **es-ES-1145b**  
Mudança de código:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
Mapeamento de entrada correspondente para uma AWS DMS tarefa:  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**fi\$1FI-278b** e **fi-FI-1143b**  
Mudança de código:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
Mapeamento de entrada correspondente para uma AWS DMS tarefa:  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**fr-FR-297b** e**fr-FR-1147b**  
Mudança de código:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
Mapeamento de entrada correspondente para uma AWS DMS tarefa:  

```
{"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**it-IT-280b** e **it-IT-1144b**  
Mudança de código:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
Mapeamento de entrada correspondente para uma AWS DMS tarefa:  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**nl-BE-500b** e **nl-BE-1148b**  
Mudança de código:  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
Mapeamento de entrada correspondente para uma AWS DMS tarefa:  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```

# Destinos para a migração de dados
<a name="CHAP_Target"></a>

AWS Database Migration Service (AWS DMS) pode usar muitos dos bancos de dados mais populares como destino para a replicação de dados. O destino pode estar em uma instância do Amazon Elastic Compute Cloud (Amazon EC2), em uma instância do Amazon Relational Database Service (Amazon RDS) ou em um banco de dados local. 

Para obter uma lista abrangente de destinos válidos, consulte [Destinos do AWS DMS](CHAP_Introduction.Targets.md).

**nota**  
AWS DMS não oferece suporte à migração entre AWS regiões para os seguintes tipos de endpoints de destino:  
Amazon DynamoDB
 OpenSearch Serviço Amazon
Amazon Kinesis Data Streams
O Amazon Aurora PostgreSQL Limitless está disponível como destino para (). AWS Database Migration Service AWS DMS Para obter mais informações, consulte [Usando um banco de dados PostgreSQL como destino](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html) para. AWS Database Migration Service

**Topics**
+ [Usando um banco de dados Oracle como alvo para AWS Database Migration Service](CHAP_Target.Oracle.md)
+ [Usando um banco de dados Microsoft SQL Server como destino para AWS Database Migration Service](CHAP_Target.SQLServer.md)
+ [Usando um banco de dados PostgreSQL como alvo para AWS Database Migration Service](CHAP_Target.PostgreSQL.md)
+ [Usando um banco de dados compatível com MySQL como alvo para AWS Database Migration Service](CHAP_Target.MySQL.md)
+ [Usando um banco de dados do Amazon Redshift como destino para AWS Database Migration Service](CHAP_Target.Redshift.md)
+ [Usando um banco de dados SAP ASE como alvo para AWS Database Migration Service](CHAP_Target.SAP.md)
+ [Usando o Amazon S3 como destino para AWS Database Migration Service](CHAP_Target.S3.md)
+ [Usando um banco de dados do Amazon DynamoDB como destino para AWS Database Migration Service](CHAP_Target.DynamoDB.md)
+ [Usando o Amazon Kinesis Data Streams como alvo para AWS Database Migration Service](CHAP_Target.Kinesis.md)
+ [Usando o Apache Kafka como alvo para AWS Database Migration Service](CHAP_Target.Kafka.md)
+ [Usando um cluster do Amazon OpenSearch Service como destino para AWS Database Migration Service](CHAP_Target.Elasticsearch.md)
+ [Usando o Amazon DocumentDB como destino para o AWS Database Migration Service](CHAP_Target.DocumentDB.md)
+ [Usando o Amazon Neptune como alvo para AWS Database Migration Service](CHAP_Target.Neptune.md)
+ [Usando o Redis OSS como alvo para AWS Database Migration Service](CHAP_Target.Redis.md)
+ [Usando o Babelfish como alvo para AWS Database Migration Service](CHAP_Target.Babelfish.md)
+ [Usando o Amazon Timestream como alvo para AWS Database Migration Service](CHAP_Target.Timestream.md)
+ [Usando o Amazon RDS para Db2 e o IBM Db2 LUW como destino para AWS DMS](CHAP_Target.DB2.md)

# Usando um banco de dados Oracle como alvo para AWS Database Migration Service
<a name="CHAP_Target.Oracle"></a>

Você pode migrar dados para destinos de banco de dados Oracle usando AWS DMS, seja de outro banco de dados Oracle ou de um dos outros bancos de dados suportados. É possível utilizar Secure Sockets Layer (SSL) para criptografar as conexões entre o endpoint do Oracle e a instância de replicação. Para obter mais informações sobre o uso de SSL com um endpoint Oracle, consulte. [Usando SSL com AWS Database Migration Service](CHAP_Security.SSL.md) AWS DMS também suporta o uso da criptografia transparente de dados (TDE) da Oracle para criptografar dados em repouso no banco de dados de destino, pois o Oracle TDE não exige uma chave ou senha de criptografia para gravar no banco de dados.

Para obter informações sobre as versões do Oracle que oferecem AWS DMS suporte como destino, consulte[Metas para AWS DMS](CHAP_Introduction.Targets.md). 

Ao utilizar o Oracle como destino, pressupomos que os dados devam ser migrados para o esquema ou usuário utilizado para a conexão de destino. Se você quiser migrar dados para um esquema diferente, use uma transformação de esquema. Por exemplo, suponha que seu endpoint de destino se conecte ao usuário `RDSMASTER` e você queira migrar do usuário `PERFDATA1` para `PERFDATA2`. Nesse caso, crie uma transformação como a seguinte.

```
{
   "rule-type": "transformation",
   "rule-id": "2",
   "rule-name": "2",
   "rule-action": "rename",
   "rule-target": "schema",
   "object-locator": {
   "schema-name": "PERFDATA1"
},
"value": "PERFDATA2"
}
```

Ao usar o Oracle como destino, AWS DMS migra todas as tabelas e índices para os espaços de tabela padrão e de índice no destino. Para migrar tabelas e índices para diferentes espaços para tabela de índices e tabelas, utilize uma transformação de espaço para tabela para fazer isso. Por exemplo, suponha que você tenha um conjunto de tabelas no esquema `INVENTORY` atribuído a alguns espaços de tabela na origem do Oracle. Para a migração, você deseja atribuir todas essas tabelas a um único espaço de tabela `INVENTORYSPACE` no destino. Nesse caso, crie uma transformação como a seguinte.

```
{
   "rule-type": "transformation",
   "rule-id": "3",
   "rule-name": "3",
   "rule-action": "rename",
   "rule-target": "table-tablespace",
   "object-locator": {
      "schema-name": "INVENTORY",
      "table-name": "%",
      "table-tablespace-name": "%"
   },
   "value": "INVENTORYSPACE"
}
```

Para obter mais informações sobre transformações, consulte [Especificar a seleção de tabelas e as regras de transformação utilizando JSON](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.md).

Se o Oracle for origem e destino, será possível preservar as atribuições de tablespace de tabela ou índice existentes definindo o atributo de conexão extra de origem Oracle, `enableHomogenousTablespace=true`. Para obter mais informações, consulte [Configurações de endpoint ao usar o Oracle como fonte para AWS DMS](CHAP_Source.Oracle.md#CHAP_Source.Oracle.ConnectionAttrib).

Para obter detalhes adicionais sobre como trabalhar com bancos de dados Oracle como destino AWS DMS, consulte as seções a seguir: 

**Topics**
+ [Limitações do Oracle como alvo para AWS Database Migration Service](#CHAP_Target.Oracle.Limitations)
+ [Privilégios da conta de usuário necessários para utilizar o Oracle como destino](#CHAP_Target.Oracle.Privileges)
+ [Configurando um banco de dados Oracle como destino para AWS Database Migration Service](#CHAP_Target.Oracle.Configuration)
+ [Configurações de endpoint ao usar o Oracle como destino para AWS DMS](#CHAP_Target.Oracle.ConnectionAttrib)
+ [Tipos de dados de destino do Oracle](#CHAP_Target.Oracle.DataTypes)

## Limitações do Oracle como alvo para AWS Database Migration Service
<a name="CHAP_Target.Oracle.Limitations"></a>

Veja a seguir as limitações ao utilizar o Oracle como destino para a migração de dados:
+ AWS DMS não cria esquema no banco de dados Oracle de destino. Você deve criar todos os esquemas que deseja no banco de dados de destino do Oracle. O nome do esquema já deve existir para o destino do Oracle. As tabelas do esquema de origem são importadas para o usuário ou esquema, que é AWS DMS usado para se conectar à instância de destino. Para migrar vários esquemas, crie várias tarefas de replicação. Também é possível migrar dados para diferentes esquemas em um destino. Para fazer isso, você precisa usar as regras de transformação do esquema nos mapeamentos da AWS DMS tabela.
+ AWS DMS não suporta a `Use direct path full load` opção de tabelas com INDEXTYPE CONTEXT. Como solução, use o carregamento de matriz. 
+ Com a opção de aplicar o lote otimizado, o carregamento na tabela de alterações líquidas usa um caminho direto, que não é compatível com o tipo XML. Como solução, use o modo de aplicação transacional.
+ As strings vazias migradas de bancos de dados de origem podem ser tratadas de forma diferente pelo destino do Oracle (convertido em strings de um espaço, por exemplo). Isso pode resultar no relatório de AWS DMS validação de uma incompatibilidade.
+ É possível expressar o número total de colunas por tabela compatível com o modo de aplicação otimizado em lote, utilizando a seguinte fórmula:

  ```
  2 * columns_in_original_table + columns_in_primary_key <= 999
  ```

  Por exemplo, se a tabela original tiver 25 colunas e a sua chave primária consistir em 5 colunas, o número total de colunas será 55. Se uma tabela exceder o número suportado de colunas, todas as alterações serão aplicadas no one-by-one modo.
+ AWS DMS não oferece suporte ao banco de dados autônomo no Oracle Cloud Infrastructure (OCI).
+ No modo de aplicação transacional, um destino Oracle pode processar instruções do DML de até 32 KB. Embora esse limite seja suficiente para muitos casos de uso, instruções do DML que excedam 32 KB falharão com o erro: “ORA-01460: unimplemented or unreasonable conversion requested”. Para resolver esse problema, você deve habilitar o recurso de aplicação em lote definindo a configuração da tarefa `BatchApplyEnabled` como `true`. A aplicação em lote reduz o tamanho geral da declaração, permitindo que você ignore a limitação de 32 KB. Para obter mais informações, consulte [Configurações de tarefa de metadados de destino](CHAP_Tasks.CustomizingTasks.TaskSettings.TargetMetadata.md).
+ AWS DMS A carga total do caminho direto para tabelas LOB pode falhar com o erro ORA-39777 devido a requisitos especiais de tratamento de dados LOB. Esse erro ocorre durante o processo de carregamento do caminho direto e pode interromper as tarefas de migração que envolvem colunas de LOB. Para resolver, desabilite a configuração `useDirectPathFullLoad` no endpoint de destino e repita a operação de carregamento.

## Privilégios da conta de usuário necessários para utilizar o Oracle como destino
<a name="CHAP_Target.Oracle.Privileges"></a>

Para usar um alvo Oracle em uma AWS Database Migration Service tarefa, conceda os seguintes privilégios no banco de dados Oracle. É possível conceder esses privilégios à conta do usuário especificada nas definições do banco de dados Oracle do AWS DMS.
+ SELECT ANY TRANSACTION 
+ SELECT on V\$1NLS\$1PARAMETERS 
+ SELECT on V\$1TIMEZONE\$1NAMES 
+ SELECT on ALL\$1INDEXES 
+ SELECT on ALL\$1OBJECTS 
+ SELECT on DBA\$1OBJECTS
+ SELECT on ALL\$1TABLES 
+ SELECT on ALL\$1USERS 
+ SELECT on ALL\$1CATALOG 
+ SELECT on ALL\$1CONSTRAINTS 
+ SELECT on ALL\$1CONS\$1COLUMNS 
+ SELECT on ALL\$1TAB\$1COLS 
+ SELECT on ALL\$1IND\$1COLUMNS 
+ DROP ANY TABLE 
+ SELECT ANY TABLE
+ INSERT ANY TABLE 
+ UPDATE ANY TABLE
+ CREATE ANY VIEW
+ DROP ANY VIEW
+ CREATE ANY PROCEDURE
+ ALTER ANY PROCEDURE
+ DROP ANY PROCEDURE
+ CREATE ANY SEQUENCE
+ ALTER ANY SEQUENCE
+ DROP ANY SEQUENCE 
+ DELETE ANY TABLE

Para os requisitos a seguir, conceda estes privilégios adicionais:
+ Para utilizar uma lista de tabela específica, conceda SELECT em qualquer tabela replicada e ALTER em qualquer tabela replicada.
+ Para permitir que um usuário crie uma tabela no espaço de tabela padrão, conceda o privilégio GRANT UNLIMITED TABLESPACE.
+ Para fazer logon, conceda o privilégio CREATE SESSION.
+ Ao utilizar um caminho direto (que é o padrão para carga máxima), `GRANT LOCK ANY TABLE to dms_user;`.
+ Se o esquema for diferente ao utilizar o modo de preparação de tabela “DROP e CREATE”, `GRANT CREATE ANY INDEX to dms_user;`.
+ Para alguns cenários de carga máxima, é possível escolher a opção “DROP and CREATE table” ou “TRUNCATE before loading” em que um esquema de tabela de destino é diferente daquele do usuário do DMS. Nesse caso, conceda DROP ANY TABLE.
+ Para armazenar alterações em tabelas de alterações ou em uma tabela de auditoria em que o esquema da tabela de destino é diferente daquele do usuário do DMS, conceda CREATE ANY TABLE e CREATE ANY INDEX.
+ Para validar colunas de LOB com o recurso de validação, conceda o privilégio EXECUTE em `SYS.DBMS_CRYPTO` ao usuário do DMS.

### Privilégios de leitura necessários para o AWS Database Migration Service banco de dados de destino
<a name="CHAP_Target.Oracle.Privileges.Read"></a>

A conta AWS DMS do usuário deve receber permissões de leitura para as seguintes tabelas do DBA:
+ SELECT on DBA\$1USERS
+ SELECT on DBA\$1TAB\$1PRIVS
+ SELECT on DBA\$1OBJECTS
+ SELECT on DBA\$1SYNONYMS
+ SELECT on DBA\$1SEQUENCES
+ SELECT on DBA\$1TYPES
+ SELECT on DBA\$1INDEXES
+ SELECT on DBA\$1TABLES
+ SELECT on DBA\$1TRIGGERS
+ SELECT on SYS.DBA\$1REGISTRY

Se algum dos privilégios necessários não puder ser concedido a V\$1xxx, conceda-o a V\$1\$1xxx.

### Avaliações de pré-migração
<a name="CHAP_Target.Oracle.Privileges.Premigration"></a>

Para utilizar as avaliações de pré-migração listadas em [Avaliações do Oracle](CHAP_Tasks.AssessmentReport.Oracle.md) com o Oracle como destino, adicione as seguintes permissões à conta de usuário especificada no endpoint de destino do banco de dados Oracle:

```
GRANT SELECT ON V_$INSTANCE TO dms_user;
GRANT EXECUTE ON SYS.DBMS_XMLGEN TO dms_user;
```

## Configurando um banco de dados Oracle como destino para AWS Database Migration Service
<a name="CHAP_Target.Oracle.Configuration"></a>

Antes de usar um banco de dados Oracle como destino de migração de dados, você deve fornecer uma conta de usuário Oracle para AWS DMS o. A conta do usuário deve ter read/write privilégios no banco de dados Oracle, conforme especificado em[Privilégios da conta de usuário necessários para utilizar o Oracle como destino](#CHAP_Target.Oracle.Privileges).

## Configurações de endpoint ao usar o Oracle como destino para AWS DMS
<a name="CHAP_Target.Oracle.ConnectionAttrib"></a>

É possível utilizar as configurações de endpoint para configurar o banco de dados de destino do Oracle de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--oracle-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o Oracle como destino.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.Oracle.html)

## Tipos de dados de destino do Oracle
<a name="CHAP_Target.Oracle.DataTypes"></a>

Um banco de dados Oracle de destino usado com AWS DMS suporta a maioria dos tipos de dados Oracle. A tabela a seguir mostra os tipos de dados de destino da Oracle que são suportados durante o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados. Para obter mais informações sobre como visualizar o tipo de dados mapeado da origem, consulte a seção relativa à origem que você está usando.


|  AWS DMS tipo de dados  |  Tipo de dados do Oracle  | 
| --- | --- | 
|  BOOLEAN  |  NUMBER (1)  | 
|  BYTES  |  RAW (tamanho)  | 
|  DATE  |  DATETIME  | 
|  TIME  | TIMESTAMP (0) | 
|  DATETIME  |  TIMESTAMP (escala)  | 
|  INT1  | NUMBER (3) | 
|  INT2  |  NUMBER (5)  | 
|  INT4  | NUMBER (10) | 
|  INT8  |  NUMBER (19)  | 
|  NUMERIC  |  NUMBER (p,s)  | 
|  REAL4  |  FLOAT  | 
|  REAL8  | FLOAT | 
|  STRING  |  Com indicação de data: DATE  Com indicação de tempo: TIMESTAMP  Com indicação de time stamp: TIMESTAMP  Com indicação de time stamp com fuso horário: TIMESTAMP WITH TIMEZONE  Com indicação de time stamp com fuso horário local: TIMESTAMP WITH LOCAL TIMEZONE Com indicação de intervalo de tempo em anos e meses: INTERVAL YEAR TO MONTH  Com indicação de intervalo de tempo em dias e segundos: INTERVAL DAY TO SECOND  Se comprimento > 4.000: CLOB Em todos os outros casos: VARCHAR2 (comprimento)  | 
|  UINT1  |  NUMBER (3)  | 
|  UINT2  |  NUMBER (5)  | 
|  UINT4  |  NUMBER (10)  | 
|  UINT8  |  NUMBER (19)  | 
|  WSTRING  |  Se o comprimento > 2000: NCLOB Em todos os outros casos: NVARCHAR2 (comprimento)  | 
|  BLOB  |  BLOB Para usar esse tipo de dados com AWS DMS, você deve habilitar o uso de BLOBs para uma tarefa específica. Os tipos de dados BLOB são compatíveis somente com tabelas que possuem uma chave primária  | 
|  CLOB  |  CLOB Para usar esse tipo de dados com AWS DMS, você deve habilitar o uso de CLOBs para uma tarefa específica. Durante uma captura de dados de alteração (CDC), os tipos de dados CLOB são compatíveis somente em tabelas que incluem uma chave primária. STRING Um tipo de VARCHAR2 dados Oracle na origem com um tamanho declarado maior que 4000 bytes mapeia por meio do AWS DMS CLOB para uma STRING no destino Oracle.  | 
|  NCLOB  |  NCLOB Para usar esse tipo de dados com AWS DMS, você deve habilitar o uso de NCLOBs para uma tarefa específica. Durante uma captura de dados de alteração (CDC), os tipos de dados NCLOB são compatíveis somente com tabelas que possuem uma chave primária. WSTRING Um tipo de VARCHAR2 dados Oracle na origem com um tamanho declarado maior que 4000 bytes mapeia por meio do AWS DMS NCLOB para um WSTRING no destino Oracle.   | 
| XMLTYPE |  O tipo de dados de destino XMLTYPE só é relevante em tarefas de Oracle-to-Oracle replicação. Quando o banco de dados de origem é o Oracle, os tipos de dados de origem são replicados como estão para o destino do Oracle. Por exemplo, um tipo de dados XMLTYPE na origem é criado como um tipo de dados XMLTYPE no destino.  | 

# Usando um banco de dados Microsoft SQL Server como destino para AWS Database Migration Service
<a name="CHAP_Target.SQLServer"></a>

Você pode migrar dados para bancos de dados do Microsoft SQL Server usando o. AWS DMS Com um banco de dados SQL Server como destino, é possível migrar dados de outro banco de dados SQL Server ou de um dos outros bancos de dados compatíveis.

Para obter informações sobre as versões do SQL Server que oferecem AWS DMS suporte como destino, consulte[Metas para AWS DMS](CHAP_Introduction.Targets.md). 

AWS DMS oferece suporte às edições locais e do Amazon RDS do Enterprise, Standard, Workgroup e Developer.

Para obter detalhes adicionais sobre como trabalhar com bancos AWS DMS de dados de destino do SQL Server, consulte o seguinte.

**Topics**
+ [Limitações no uso do SQL Server como alvo para AWS Database Migration Service](#CHAP_Target.SQLServer.Limitations)
+ [Requisitos de segurança ao usar o SQL Server como alvo para AWS Database Migration Service](#CHAP_Target.SQLServer.Security)
+ [Configurações de endpoint ao usar o SQL Server como destino para AWS DMS](#CHAP_Target.SQLServer.ConnectionAttrib)
+ [Tipos de dados de destino do Microsoft SQL Server](#CHAP_Target.SQLServer.DataTypes)

## Limitações no uso do SQL Server como alvo para AWS Database Migration Service
<a name="CHAP_Target.SQLServer.Limitations"></a>

As seguintes limitações se aplicam à utilização de um banco de dados SQL Server como destino do AWS DMS:
+ Ao criar manualmente uma tabela de destino do SQL Server com uma coluna calculada, a replicação de carga máxima não é compatível ao utilizar o utilitário de cópia em massa BCP. Para utilizar a replicação de carga máxima, desative o carregamento de BCP definindo o atributo de conexão adicional (ECA) `'useBCPFullLoad=false'` no endpoint. Para obter informações sobre a configuração ECAs em endpoints, consulte[Criar endpoints de origem e de destino](CHAP_Endpoints.Creating.md). Para obter mais informações sobre como trabalhar com o BCP, consulte a [documentação do Microsoft SQL Server](https://docs.microsoft.com/en-us/sql/relational-databases/import-export/import-and-export-bulk-data-by-using-the-bcp-utility-sql-server).
+ Ao replicar tabelas com tipos de dados espaciais do SQL Server (GEOMETRIA e GEOGRAFIA), AWS DMS substitui qualquer identificador de referência espacial (SRID) que você possa ter inserido pelo SRID padrão. O SRID padrão é 0 para GEOMETRY e 4326 para GEOGRAPHY.
+ Tabelas temporais não são compatíveis. A migração de tabelas temporais pode funcionar com uma tarefa somente replicação no modo de aplicação transacional se essas tabelas forem criadas manualmente no destino.
+ Atualmente, `boolean` os tipos de dados em uma fonte do PostgreSQL são migrados para SQLServer um destino como o tipo de dados com valores `bit` inconsistentes. 

  Como alternativa, faça o seguinte:
  + Pré-crie a tabela com um tipo de `VARCHAR(1)` dados para a coluna (ou deixe AWS DMS criar a tabela). Depois, deixe o processamento downstream tratar um "F" como Falso e um "T" como Verdadeiro.
  + Para evitar a necessidade de alterar o processamento downstream, adicione uma regra de transformação à tarefa para alterar os valores “F” para “0" e os valores “T” para 1 e armazená-los como o tipo de dados de bits do servidor SQL.
+ AWS DMS não oferece suporte ao processamento de alterações para definir a nulidade da coluna (usando a `ALTER COLUMN [SET|DROP] NOT NULL` cláusula com instruções). `ALTER TABLE`
+ A Autenticação do Windows não é compatível.

## Requisitos de segurança ao usar o SQL Server como alvo para AWS Database Migration Service
<a name="CHAP_Target.SQLServer.Security"></a>

A seguir, descrevemos os requisitos de segurança para uso AWS DMS com um destino do Microsoft SQL Server:
+ A conta de AWS DMS usuário deve ter pelo menos a função de `db_owner` usuário no banco de dados do SQL Server ao qual você está se conectando.
+ Um administrador de sistema do SQL Server deve fornecer essa permissão a todas as contas de usuário do AWS DMS .

## Configurações de endpoint ao usar o SQL Server como destino para AWS DMS
<a name="CHAP_Target.SQLServer.ConnectionAttrib"></a>

É possível utilizar as configurações de endpoint para configurar o banco de dados de destino do SQL Server de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--microsoft-sql-server-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o SQL Server como destino.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.SQLServer.html)

## Tipos de dados de destino do Microsoft SQL Server
<a name="CHAP_Target.SQLServer.DataTypes"></a>

A tabela a seguir mostra os tipos de dados de destino do Microsoft SQL Server que são suportados durante o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados. Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipo de dados  |  Tipo de dados do SQL Server  | 
| --- | --- | 
|  BOOLEAN  |  TINYINT  | 
|  BYTES  |  VARBINARY(tamanho)  | 
|  DATE  |  No SQL Server 2008 e superior, utilize DATE. Para versões anteriores, se a escala for menor ou igual a 3, use DATETIME. Em todos os demais casos, use VARCHAR (37).  | 
|  TIME  |  Para o SQL Server 2008 e superior, use DATETIME2 (%d). Para versões anteriores, se a escala for menor ou igual a 3, use DATETIME. Em todos os demais casos, use VARCHAR (37).  | 
|  DATETIME  |  Para o SQL Server 2008 e superior, use DATETIME2 (escala).  Para versões anteriores, se a escala for menor ou igual a 3, use DATETIME. Em todos os demais casos, use VARCHAR (37).  | 
|  INT1  | SMALLINT | 
|  INT2  |  SMALLINT  | 
|  INT4  | INT | 
|  INT8  |  BIGINT  | 
|  NUMERIC  |  NUMERIC (p,s)  | 
|  REAL4  |  REAL  | 
|  REAL8  | FLOAT | 
|  STRING  |  Se a coluna for de data ou hora, faça o seguinte:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.SQLServer.html) Se a coluna não é uma data ou hora, use VARCHAR (tamanho).  | 
|  UINT1  |  TINYINT  | 
|  UINT2  |  SMALLINT  | 
|  UINT4  |  INT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  NVARCHAR (tamanho)  | 
|  BLOB  |  VARBINARY(máximo) IMAGE Para usar esse tipo de dados com AWS DMS, você deve habilitar o uso de BLOBs para uma tarefa específica. AWS DMS suporta tipos de dados BLOB somente em tabelas que incluem uma chave primária.  | 
|  CLOB  |  VARCHAR(máximo) Para usar esse tipo de dados com AWS DMS, você deve habilitar o uso de CLOBs para uma tarefa específica. Durante uma captura de dados de alteração (CDC), o AWS DMS é compatível com os tipos de dados CLOB somente em tabelas que incluem uma chave primária.  | 
|  NCLOB  |  NVARCHAR(máximo) Para usar esse tipo de dados com AWS DMS, você deve habilitar o uso de NCLOBs para uma tarefa específica. Durante o CDC, AWS DMS suporta tipos de dados NCLOB somente em tabelas que incluem uma chave primária.  | 

# Usando um banco de dados PostgreSQL como alvo para AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL"></a>

Você pode migrar dados para bancos de dados PostgreSQL AWS DMS usando, seja de outro banco de dados PostgreSQL ou de um dos outros bancos de dados compatíveis. 

Para obter informações sobre as versões do PostgreSQL AWS DMS que oferecem suporte como destino, consulte. [Metas para AWS DMS](CHAP_Introduction.Targets.md)

**nota**  
O Amazon Aurora Sem Servidor está disponível como destino para o Amazon Aurora compatível com PostgreSQL. Para ter mais informações sobre o Amazon Aurora Sem Servidor, consulte [Usar o Aurora Serverless v2](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html) no *Guia do usuário do Amazon Aurora*.
Os clusters de banco de dados do Aurora Sem Servidor são acessíveis apenas de uma Amazon VPC e não podem utilizar um [Endereço IP público](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.requirements.html). Portanto, se você tiver uma instância de replicação em uma região diferente da do Aurora PostgreSQL Sem Servidor, configure o [Emparelhamento da VPC](https://docs.aws.amazon.com//dms/latest/userguide/CHAP_ReplicationInstance.VPC.html#CHAP_ReplicationInstance.VPC.Configurations.ScenarioVPCPeer). Caso contrário, verifique a disponibilidade das [regiões](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/Concepts.AuroraFeaturesRegionsDBEngines.grids.html#Concepts.Aurora_Fea_Regions_DB-eng.Feature.Serverless) do Aurora PostgreSQL Sem Servidor e decida utilizar uma dessas regiões para o Aurora PostgreSQL Sem Servidor e a instância de replicação.
O recurso Babelfish está incorporado ao Amazon Aurora sem custo adicional. Para obter mais informações, consulte [Utilizar o Babelfish para Aurora PostgreSQL como destino do AWS Database Migration Service](#CHAP_Target.PostgreSQL.Babelfish).

AWS DMS adota uma table-by-table abordagem ao migrar dados da origem para o destino na fase de carga total. Não é possível garantir a ordem da tabela durante a fase de Carregamento total. As tabelas ficam dessincronizadas durante a fase de Carregamento total e enquanto transações em cache de tabelas individuais estão sendo aplicadas. Como resultado, restrições de integridade referencial ativa podem gerar falhas de tarefas durante a fase de Carregamento total.

No PostgreSQL, chaves externas (restrições de integridade referencial) são implementadas usando triggers. Durante a fase de carga total, AWS DMS carrega cada tabela uma de cada vez. Recomendamos que você desative as restrições de chave externa durante um carregamento total, usando um dos seguintes métodos:
+ Desative temporariamente todos os triggers da instância e conclua o carregamento total.
+ Use o parâmetro `session_replication_role` no PostgreSQL.

Em determinado momento, um trigger pode estar em um dos seguintes estados: `origin`, `replica`, `always`, ou `disabled`. Quando o parâmetro `session_replication_role` é definido como `replica`, apenas triggers no estado `replica` ficam ativos, e eles são disparados quando chamados. Caso contrário, os triggers permanecem inativos. 

PostgreSQL tem um mecanismo à prova de falhas para impedir que uma tabela seja truncada, mesmo quando `session_replication_role` é definido. É possível utilizar isso como alternativa para desativar os acionadores, para ajudar a executar a carga máxima até a conclusão. Para isso, defina o modo de preparação da tabela de destino `DO_NOTHING`. Caso contrário, as operações DROP e TRUNCATE falharão quando houver restrições de chave externa.

No Amazon RDS, é possível controlar esse parâmetro utilizando um grupo de parâmetros. Para uma instância do PostgreSQL em execução no Amazon EC2, é possível definir o parâmetro diretamente.



Para obter detalhes adicionais sobre como trabalhar com um banco de dados PostgreSQL como destino, consulte as AWS DMS seções a seguir: 

**Topics**
+ [Limitações no uso do PostgreSQL como alvo para AWS Database Migration Service](#CHAP_Target.PostgreSQL.Limitations)
+ [Limitações no uso do Amazon Aurora PostgreSQL Limitless como destino para AWS Database Migration Service](#CHAP_Target.PostgreSQL.Aurora.Limitations)
+ [Requisitos de segurança ao usar um banco de dados PostgreSQL como alvo para AWS Database Migration Service](#CHAP_Target.PostgreSQL.Security)
+ [Configurações de endpoint e atributos extras de conexão (ECAs) ao usar o PostgreSQL como destino para AWS DMS](#CHAP_Target.PostgreSQL.ConnectionAttrib)
+ [Tipos de dados de destino do PostgreSQL](#CHAP_Target.PostgreSQL.DataTypes)
+ [Usando o Babelfish para Aurora PostgreSQL como alvo para AWS Database Migration Service](#CHAP_Target.PostgreSQL.Babelfish)

## Limitações no uso do PostgreSQL como alvo para AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Limitations"></a>

As seguintes limitações aplicam-se à utilização de um banco de dados PostgreSQL como destino para o AWS DMS:
+ Para migrações heterogêneas, o tipo de dados JSON é convertido internamente no tipo de dados CLOB nativo.
+ Em uma migração do Oracle para o PostgreSQL, se uma coluna no Oracle contiver um caractere NULL (valor hexadecimal U\$10000), converterá o caractere NULL em um espaço (valor hexadecimal U\$10020) AWS DMS . Isso deve-se a uma limitação do PostgreSQL.
+ AWS DMS não oferece suporte à replicação para uma tabela com um índice exclusivo criado com a função coalesce.
+ Se suas tabelas usarem sequências, atualize o valor de `NEXTVAL` para cada sequência no banco de dados de destino depois de interromper a replicação do banco de dados de origem. AWS DMS copia dados do seu banco de dados de origem, mas não migra sequências para o destino durante a replicação contínua.

## Limitações no uso do Amazon Aurora PostgreSQL Limitless como destino para AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Aurora.Limitations"></a>

As seguintes limitações se aplicam ao usar o Amazon Aurora PostgreSQL Limitless como destino para: AWS DMS
+ AWS DMS A validação de dados não é compatível com o Amazon Aurora PostgreSQL Limitless.
+ AWS DMS migra as tabelas de origem como tabelas padrão, que não são distribuídas. Após a migração, você pode converter essas tabelas padrão em tabelas ilimitadas seguindo o guia oficial de conversão.

## Requisitos de segurança ao usar um banco de dados PostgreSQL como alvo para AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Security"></a>

Para fins de segurança, a conta de usuário usada para a migração de dados deve ser um usuário registrado em qualquer banco de dados PostgreSQL que você use como destino.

Seu endpoint de destino do PostgreSQL exige permissões mínimas de usuário para executar AWS DMS uma migração. Veja os exemplos a seguir.

```
    CREATE USER newuser WITH PASSWORD 'your-password';
    ALTER SCHEMA schema_name OWNER TO newuser;
```

Ou

```
    GRANT USAGE ON SCHEMA schema_name TO myuser;
    GRANT CONNECT ON DATABASE postgres to myuser;
    GRANT CREATE ON DATABASE postgres TO myuser;
    GRANT CREATE ON SCHEMA schema_name TO myuser;
    GRANT UPDATE, INSERT, SELECT, DELETE, TRUNCATE ON ALL TABLES IN SCHEMA schema_name TO myuser;
    GRANT TRUNCATE ON schema_name."BasicFeed" TO myuser;
```

## Configurações de endpoint e atributos extras de conexão (ECAs) ao usar o PostgreSQL como destino para AWS DMS
<a name="CHAP_Target.PostgreSQL.ConnectionAttrib"></a>

Você pode usar as configurações do endpoint e Extra Connection Attributes (ECAs) para configurar seu banco de dados de destino do PostgreSQL. 

Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--postgre-sql-settings '{"EndpointSetting": "value", ...}'` JSON.

Você especifica ECAs usando o `ExtraConnectionAttributes` parâmetro para seu endpoint.

A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o PostgreSQL como destino.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.PostgreSQL.html)

## Tipos de dados de destino do PostgreSQL
<a name="CHAP_Target.PostgreSQL.DataTypes"></a>

O endpoint do banco de dados PostgreSQL é AWS DMS compatível com a maioria dos tipos de dados do banco de dados PostgreSQL. A tabela a seguir mostra os tipos de dados de destino do banco de dados PostgreSQL que são compatíveis com o AWS DMS uso e o mapeamento AWS DMS padrão dos tipos de dados.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipo de dados  |  Tipo de dados do PostgreSQL  | 
| --- | --- | 
|  BOOLEAN  |  BOOLEAN  | 
|  BLOB  |  BYTEA  | 
|  BYTES  |  BYTEA  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  DATETIME  |  Se a escala for de 0 a 6, use TIMESTAMP. Se a escala for de 7 a 9, use VARCHAR (37).  | 
|  INT1  |  SMALLINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INTEGER  | 
|  INT8  |  BIGINT  | 
|  NUMERIC   |  DECIMAL (P,S)  | 
|  REAL4  |  FLOAT4  | 
|  REAL8  |  FLOAT8  | 
|  STRING  |  Se o tamanho for de 1 a 21.845, use VARCHAR (tamanho em bytes).  Se o tamanho for de 21.846 a 2.147.483.647, use VARCHAR (65535).  | 
|  UINT1  |  SMALLINT  | 
|  UINT2  |  INTEGER  | 
|  UINT4  |  BIGINT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  Se o tamanho for de 1 a 21.845, use VARCHAR (tamanho em bytes).  Se o tamanho for de 21.846 a 2.147.483.647, use VARCHAR (65535).  | 
|  NCLOB  |  TEXT  | 
|  CLOB  |  TEXT  | 

**nota**  
Ao replicar de uma fonte do PostgreSQL AWS DMS , cria a tabela de destino com os mesmos tipos de dados para todas as colunas, exceto as colunas com tipos de dados definidos pelo usuário. Nesses casos, o tipo de dados é criado como "variante de caractere" no destino.

## Usando o Babelfish para Aurora PostgreSQL como alvo para AWS Database Migration Service
<a name="CHAP_Target.PostgreSQL.Babelfish"></a>

É possível migrar as tabelas de origem do SQL Server para um destino do Babelfish para Amazon Aurora PostgreSQL utilizando o AWS Database Migration Service. Com o Babelfish, o Aurora PostgreSQL compreende o dialeto do T-SQL, do SQL proprietário do Microsoft SQL Server, e é compatível com o mesmo protocolo de comunicação. Portanto, as aplicações escritas para o SQL Server agora podem funcionar com o Aurora com menos alterações no código. O recurso Babelfish está incorporado ao Amazon Aurora sem custo adicional. É possível ativar o Babelfish no cluster do Amazon Aurora no console do Amazon RDS.

**Ao criar seu endpoint de AWS DMS destino usando os comandos do AWS DMS console, da API ou da CLI, especifique o mecanismo de destino como **Amazon Aurora PostgreSQL** e nomeie o banco de dados como babelfish\$1db.** Na seção **Configurações de endpoint**, adicione configurações para definir `DatabaseMode` como `Babelfish` e `BabelfishDatabaseName` para o nome do banco de dados Babelfish T-SQL de destino.

### Adicionar regras de transformação à tarefa de migração
<a name="CHAP_Target.PostgreSQL.Babelfish.transform"></a>

Ao definir uma tarefa de migração para um destino do Babelfish, inclua regras de transformação que garantam que o DMS utilize as tabelas T-SQL do Babelfish pré-criadas no banco de dados de destino.

Primeiro, adicione uma regra de transformação à tarefa de migração que coloque todos os nomes das tabelas em letras minúsculas. O Babelfish armazena em letras minúsculas no `pg_class` catálogo do PostgreSQL os nomes das tabelas que você cria utilizando o T-SQL. No entanto, quando você tem tabelas do SQL Server com nomes em maiúsculas e minúsculas, o DMS cria as tabelas utilizando tipos de dados nativos do PostgreSQL em vez dos tipos de dados compatíveis com T-SQL. Por esse motivo, adicione uma regra de transformação que torne todos os nomes de tabelas em minúsculas. Observe que os nomes de coluna não devem ser mudados para minúsculas.

Se você utilizou o modo de migração de vários bancos de dados ao definir o cluster, adicione uma regra de transformação que renomeia o esquema original do SQL Server. Renomeie o esquema do SQL Server para incluir o nome do banco de dados T-SQL. Por exemplo, se o nome do esquema original do SQL Server for dbo e o nome do banco de dados T-SQL for T-SQL, renomeie o esquema para mydb\$1dbo utilizando uma regra de transformação.

**nota**  
Ao usar o Babelfish para Aurora PostgreSQL 16 ou posterior, o modo de migração padrão é “mutidatabase”. Ao executar tarefas de migração do DMS, analise o parâmetro do modo de migração e atualize as regras de transformação, se necessário.

Se você utilizar o modo de banco de dados único, não será necessária uma regra de transformação para renomear os esquemas. Os nomes dos esquemas têm um one-to-one mapeamento com o banco de dados T-SQL de destino no Babelfish.

O exemplo de regra de transformação a seguir torna todos os nomes de tabelas em minúsculas e renomeia o esquema original do SQL Server de `dbo` para `mydb_dbo`.

```
{
   "rules": [
   {
      "rule-type": "transformation",
      "rule-id": "566251737",
      "rule-name": "566251737",
      "rule-target": "schema",
      "object-locator": {
         "schema-name": "dbo"
      },
      "rule-action": "rename",
      "value": "mydb_dbo",
      "old-value": null
   },
   {
      "rule-type": "transformation",
      "rule-id": "566139410",
      "rule-name": "566139410",
      "rule-target": "table",
      "object-locator": {
         "schema-name": "%",
         "table-name": "%"
      },
      "rule-action": "convert-lowercase",
      "value": null,
      "old-value": null
   },
   {
      "rule-type": "selection",
      "rule-id": "566111704",
      "rule-name": "566111704",
      "object-locator": {
         "schema-name": "dbo",
         "table-name": "%"
      },
      "rule-action": "include",
      "filters": []
   }
]
}
```

### Limitações ao utilizar um endpoint de destino do PostgreSQL com tabelas do Babelfish
<a name="CHAP_Target.PostgreSQL.Babelfish.limitations"></a>

As limitações a seguir se aplicam ao utilizar um endpoint de destino do PostgreSQL com tabelas do Babelfish:
+ Para o modo **Preparação da tabela de destino**, use somente os modos **Não fazer nada** ou **Truncar**. Não utilize o modo **Abandonar tabelas no destino**. Nesse modo, o DMS cria as tabelas como tabelas do PostgreSQL que o T-SQL talvez não reconheça.
+ AWS DMS não suporta o tipo de dados sql\$1variant.
+ O Babelfish no endpoint do Postgres não comporta os tipos de dados `HEIRARCHYID` , `GEOMETRY` (antes da 3.5.4) e `GEOGRAPHY` (antes da 3.5.4). Para migrar esses tipos de dados, é possível adicionar regras de transformação para converter o tipo de dados em wstring(250).
+ O Babelfish é compatível com a migração de tipos de dados `BINARY`, `VARBINARY` e `IMAGE` utilizando o tipo de dados `BYTEA`. Em versões anteriores do Aurora PostgreSQL, é possível utilizar o DMS para migrar essas tabelas para um [Endpoint de destino do Babelfish](CHAP_Target.Babelfish.md). Não é necessário especificar um tamanho para o tipo de dados `BYTEA`, conforme mostrado no exemplo a seguir.

  ```
  [Picture] [VARBINARY](max) NULL
  ```

  Altere o tipo de dados T-SQL anterior para o tipo de dados T-SQL compatível `BYTEA`.

  ```
  [Picture] BYTEA NULL
  ```
+ Para versões anteriores do Aurora PostgreSQL Babelfish, se você criar uma tarefa de migração para replicação contínua do SQL Server para o Babelfish utilizando endpoint de destino do PostgreSQL, precisará atribuir o tipo de dados `SERIAL` a qualquer tabela que utilize colunas `IDENTITY`. Desde o Aurora PostgreSQL (versão 15.3/14.8 e superior) e do Babelfish (versão 3.2.0 e superior), a coluna de identidade é compatível e não é mais necessário atribuir o tipo de dados SERIAL. Para obter mais informações, consulte [Utilizar SERIAL](https://docs.aws.amazon.com/dms/latest/sql-server-to-aurora-postgresql-migration-playbook/chap-sql-server-aurora-pg.tsql.sequences..html) na seção Sequências e identidade do *Manual de migração do SQL Server para o Aurora PostgreSQL*. Crie a tabela no Babelfish, altere a definição da coluna da seguinte forma.

  ```
      [IDCol] [INT] IDENTITY(1,1) NOT NULL PRIMARY KEY
  ```

  Altere a anterior para a seguinte.

  ```
      [IDCol] SERIAL PRIMARY KEY
  ```

  O Aurora PostgreSQL compatível com o Babelfish cria uma sequência utilizando a configuração padrão e adiciona uma restrição `NOT NULL` à coluna. A sequência recém-criada se comporta como uma sequência normal (incrementada em 1) e não tem a opção de `SERIAL` composta.
+ Depois de migrar dados com tabelas que utilizam colunas `IDENTITY` ou o tipo de dados `SERIAL`, redefina o objeto de sequência baseado em PostgreSQL com base no valor máximo da coluna. Depois de executar uma carga máxima das tabelas, utilize a consulta T-SQL a seguir para gerar instruções para definir o seed do objeto de sequência associado.

  ```
  DECLARE @schema_prefix NVARCHAR(200) = ''
  
  IF current_setting('babelfishpg_tsql.migration_mode') = 'multi-db'
          SET @schema_prefix = db_name() + '_'
  
  SELECT 'SELECT setval(pg_get_serial_sequence(''' + @schema_prefix + schema_name(tables.schema_id) + '.' + tables.name + ''', ''' + columns.name + ''')
                 ,(select max(' + columns.name + ') from ' + schema_name(tables.schema_id) + '.' + tables.name + '));'
  FROM sys.tables tables
  JOIN sys.columns columns ON tables.object_id = columns.object_id
  WHERE columns.is_identity = 1
  
  UNION ALL
  
  SELECT 'SELECT setval(pg_get_serial_sequence(''' + @schema_prefix + table_schema + '.' + table_name + ''', 
  ''' + column_name + '''),(select max(' + column_name + ') from ' + table_schema + '.' + table_name + '));'
  FROM information_schema.columns
  WHERE column_default LIKE 'nextval(%';
  ```

  A consulta gera uma série de instruções SELECT que você executa para atualizar os valores máximos de IDENTITY e SERIAL.
+ Em versões do Babelfish anteriores à 3.2, o **Modo LOB completo** pode resultar em um erro de tabela. Se isso acontecer, crie uma tarefa separada para as tabelas que falharam no carregamento. Utilize o **Modo LOB limitado** para especificar o valor apropriado para o **Tamanho máximo de LOB (KB)**. Outra opção é definir a configuração do atributo de conexão `ForceFullLob=True` do endpoint do SQL Server.
+ Para versões do Babelfish anteriores à 3.2, a execução da validação de dados com tabelas do Babelfish que não utilizam chaves primárias baseadas em números inteiros gera uma mensagem de que uma chave exclusiva adequada não pode ser encontrada. Desde o Aurora PostgreSQL (versão 15.3/14.8 e superior) e do Babelfish (versão 3.2.0 e superior), a validação de dados para chaves primárias de número não inteiro é compatível. 
+ Devido às diferenças de precisão no número de casas decimais de segundos, o DMS relata falhas na validação de dados para tabelas do Babelfish que utilizam tipos de dados `DATETIME`. Para suprimir essas falhas, é possível adicionar o seguinte tipo de regra de validação para os tipos de dados `DATETIME`.

  ```
  {
           "rule-type": "validation",
           "rule-id": "3",
           "rule-name": "3",
           "rule-target": "column",
           "object-locator": {
               "schema-name": "dbo",
               "table-name": "%",
               "column-name": "%",
               "data-type": "datetime"
           },
           "rule-action": "override-validation-function",
           "source-function": "case when ${column-name} is NULL then NULL else 0 end",
           "target-function": "case when ${column-name} is NULL then NULL else 0 end"
       }
  ```

# Usando um banco de dados compatível com MySQL como alvo para AWS Database Migration Service
<a name="CHAP_Target.MySQL"></a>

Você pode migrar dados para qualquer banco de dados compatível com MySQL usando AWS DMS, a partir de qualquer um dos mecanismos de dados de origem compatíveis. AWS DMS Se você estiver migrando para um banco de dados local compatível com o MySQL, é AWS DMS necessário que seu mecanismo de origem resida no ecossistema. AWS O mecanismo pode estar em um serviço AWS gerenciado, como Amazon RDS, Amazon Aurora ou Amazon S3. Ou o mecanismo pode estar em um banco de dados autogerenciado no Amazon EC2. 

Você pode usar o SSL para criptografar conexões entre o endpoint compatível com MySQL e a instância de replicação. Para obter mais informações sobre o uso do SSL com um endpoint compatível com MySQL, consulte [Usando SSL com AWS Database Migration Service](CHAP_Security.SSL.md). 

Para obter informações sobre as versões do MySQL que oferecem AWS DMS suporte como destino, consulte. [Metas para AWS DMS](CHAP_Introduction.Targets.md)

Você pode usar os seguintes bancos de dados compatíveis com MySQL como destinos para: AWS DMS
+ MySQL Community Edition
+ MySQL Standard Edition
+ MySQL Enterprise Edition
+ MySQL Cluster Carrier Grade Edition
+ MariaDB Community Edition
+ MariaDB Enterprise Edition
+ MariaDB Column Store
+ Amazon Aurora MySQL

**nota**  
Independentemente do mecanismo de armazenamento de origem (MyISAM, MEMÓRIA, etc.), o AWS DMS cria uma tabela de destino compatível com MySQL como InnoDB por padrão.   
Se precisar de uma tabela em um mecanismo de armazenamento diferente do InnoDB, será possível criar manualmente a tabela no destino compatível com MySQL e migrá-la utilizando a opção **Não fazer nada**. Para obter mais informações, consulte [Configurações de tarefa de carregamento completo](CHAP_Tasks.CustomizingTasks.TaskSettings.FullLoad.md).

Para obter mais detalhes sobre como trabalhar com bancos de dados compatíveis com MySQL como destino para o AWS DMS, consulte as seguintes seções. 

**Topics**
+ [Usando qualquer banco de dados compatível com MySQL como alvo para AWS Database Migration Service](#CHAP_Target.MySQL.Prerequisites)
+ [Limitações no uso de um banco de dados compatível com MySQL como alvo para AWS Database Migration Service](#CHAP_Target.MySQL.Limitations)
+ [Configurações de endpoint ao usar um banco de dados compatível com MySQL como destino para AWS DMS](#CHAP_Target.MySQL.ConnectionAttrib)
+ [Tipos de dados de destino do MySQL](#CHAP_Target.MySQL.DataTypes)

## Usando qualquer banco de dados compatível com MySQL como alvo para AWS Database Migration Service
<a name="CHAP_Target.MySQL.Prerequisites"></a>

Antes de começar a trabalhar com um banco de dados compatível com MySQL como destino do AWS DMS, confirme se você concluiu os seguintes pré-requisitos:
+ Forneça uma conta de usuário AWS DMS que tenha read/write privilégios no banco de dados compatível com MySQL. Para criar os privilégios necessários, execute os seguintes comandos.

  ```
  CREATE USER '<user acct>'@'%' IDENTIFIED BY '<user password>';
  GRANT ALTER, CREATE, DROP, INDEX, INSERT, UPDATE, DELETE, SELECT, CREATE TEMPORARY TABLES  ON <schema>.* TO 
  '<user acct>'@'%';
  GRANT ALL PRIVILEGES ON awsdms_control.* TO '<user acct>'@'%';
  ```
+ Durante a fase de migração de carga máxima, você precisa desativar as chaves externas nas suas tabelas de destino. Para desativar as verificações de chave estrangeira em um banco de dados compatível com MySQL durante um carregamento completo, você pode adicionar o seguinte comando à seção **Atributos de conexão extra** do AWS DMS console do seu endpoint de destino.

  ```
  Initstmt=SET FOREIGN_KEY_CHECKS=0;
  ```
+ Defina o parâmetro `local_infile = 1` do banco de dados para permitir que o AWS DMS carregue dados no banco de dados de destino.
+ Conceda os seguintes privilégios se você usar avaliações de pré-migração específicas do MySQL.

  ```
  grant select on mysql.user to <dms_user>;
  grant select on mysql.db to <dms_user>;
  grant select on mysql.tables_priv to <dms_user>;
  grant select on mysql.role_edges to <dms_user>  #only for MySQL version 8.0.11 and higher
  ```

## Limitações no uso de um banco de dados compatível com MySQL como alvo para AWS Database Migration Service
<a name="CHAP_Target.MySQL.Limitations"></a>

Ao usar um banco de dados MySQL como destino, AWS DMS não oferece suporte ao seguinte:
+ As instruções da linguagem de definição de dados (DDL) TRUNCATE PARTITION, DROP TABLE e RENAME TABLE.
+ Uso de uma declaração `ALTER TABLE table_name ADD COLUMN column_name` para adicionar colunas ao início ou meio de uma tabela.
+ Ao carregar dados em um destino compatível com MySQL em uma tarefa de carregamento total, AWS DMS não relata erros causados por restrições nos registros de tarefas, o que pode causar erros de chave duplicados ou incompatibilidades com o número de registros. Isso é causado pela forma como o MySQL trata dados locais com o comando `LOAD DATA`. Faça o seguinte durante a fase de carga máxima: 
  + Desativar restrições
  + Use a AWS DMS validação para garantir que os dados sejam consistentes.
+ Quando você atualiza o valor de uma coluna para seu valor existente, os bancos de dados compatíveis com MySQL retornam um aviso `0 rows affected`. Embora esse comportamento não seja tecnicamente um erro, ele é diferente de como a situação é controlada por outros mecanismos de banco de dados. Por exemplo, o Oracle executa uma atualização de uma linha. Para bancos de dados compatíveis com MySQL, AWS DMS gera uma entrada na tabela de controle awsdms\$1apply\$1exceptions e registra o seguinte aviso.

  ```
  Some changes from the source database had no impact when applied to
  the target database. See awsdms_apply_exceptions table for details.
  ```
+ O Aurora Sem Servidor está disponível como destino para o Amazon Aurora versão 2, compatível com o MySQL versão 5.7. (Selecione o Aurora Sem Servidor versão 2.07.1 para poder utilizar o Aurora Sem Servidor compatível com o MySQL 5.7.) Para ter mais informações sobre o Aurora Sem Servidor, consulte [Usar o Aurora Serverless v2](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html) no *Guia do usuário do Amazon Aurora*.
+ AWS DMS não suporta o uso de um endpoint de leitura para o Aurora ou o Amazon RDS, a menos que as instâncias estejam no modo gravável, ou seja, `read_only` os parâmetros `innodb_read_only` e estejam definidos como ou. `0` `OFF` Para obter mais informações sobre como utilizar o Amazon RDS e o Aurora como destinos, consulte:
  +  [Como determinar a qual instância de banco de dados você está conectado](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.BestPractices.html#AuroraMySQL.BestPractices.DeterminePrimaryInstanceConnection) 
  +  [Atualizar réplicas de leitura com o MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_MySQL.Replication.ReadReplicas.html#USER_MySQL.Replication.ReadReplicas.Updates) 
+ Ao replicar o tipo de dados TIME, a parte fracionária do valor de tempo não é replicada.
+ Ao replicar o tipo de dados TIME com o atributo de conexão adicional `loadUsingCSV=false`, o valor do tempo é limitado ao intervalo `[00:00:00, 23:59:59]`.

## Configurações de endpoint ao usar um banco de dados compatível com MySQL como destino para AWS DMS
<a name="CHAP_Target.MySQL.ConnectionAttrib"></a>

É possível utilizar as configurações do endpoint para configurar o destino compatível com o MySQL de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--my-sql-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações de endpoints que é possível utilizar com o MySQL como destino.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.MySQL.html)

Também é possível utilizar atributos de conexão adicionais para configurar o banco de dados de destino compatível com MySQL.

A tabela a seguir mostra os atributos de conexão adicionais que podem ser utilizados com o MySQL como origem.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.MySQL.html)

Como alternativa, é possível utilizar o parâmetro `AfterConnectScript` do comando `--my-sql-settings` para desativar as verificações de chave estrangeira e especificar o fuso horário do banco de dados.

## Tipos de dados de destino do MySQL
<a name="CHAP_Target.MySQL.DataTypes"></a>

A tabela a seguir mostra os tipos de dados de destino do banco de dados MySQL que são suportados durante o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipos de dados  |  Tipos de dados do MySQL  | 
| --- | --- | 
|  BOOLEAN  |  BOOLEAN  | 
|  BYTES  |  Se o tamanho for de 1 a 65.535, utilize VARBINARY (tamanho).  Se o tamanho for de 65.536 a 2.147.483.647, utilize LONGLOB.  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  TIMESTAMP  |  “Se a escala for => 0 e =< 6, use: DATETIME (escala) Se a escala for => 7 e =< 9, use: VARCHAR (37)”  | 
|  INT1  |  TINYINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INTEGER  | 
|  INT8  |  BIGINT  | 
|  NUMERIC  |  DECIMAL (p,s)  | 
|  REAL4  |  FLOAT  | 
|  REAL8  |  DOUBLE PRECISION  | 
|  STRING  |  Se o tamanho for de 1 a 21.845, utilize VARCHAR (tamanho). Se o tamanho for de 21.846 a 2.147.483.647, utilize LONGTEXT.  | 
|  UINT1  |  UNSIGNED TINYINT  | 
|  UINT2  |  UNSIGNED SMALLINT  | 
|  UINT4  |  UNSIGNED INTEGER  | 
|  UINT8  |  UNSIGNED BIGINT  | 
|  WSTRING  |  Se o tamanho for de 1 a 32.767, utilize VARCHAR (tamanho).  Se o tamanho for de 32.768 a 2.147.483.647, utilize LONGTEXT.  | 
|  BLOB  |  Se o tamanho for de 1 a 65.535, utilize BLOB. Se o tamanho for de 65.536 a 2.147.483.647, utilize LONGBLOB. Se o tamanho for 0, utilize LONGBLOB (suporte pleno ao tipo LOB).  | 
|  NCLOB  |  Se o tamanho for de 1 a 65.535, use TEXT. Se o tamanho for de 65.536 a 2.147.483.647, utilize LONGTEXT com ucs2 para CHARACTER SET. Se o tamanho for 0, utilize LONGTEXT (suporte pleno ao tipo LOB) e ucs2 para CHARACTER SET.  | 
|  CLOB  |  Se o tamanho for de 1 a 65.535, use TEXT. Se o tamanho for de 65.536 a 2147483647, utilize LONGTEXT. Se o tamanho for 0, utilize LONGTEXT (suporte pleno ao tipo LOB).  | 

# Usando um banco de dados do Amazon Redshift como destino para AWS Database Migration Service
<a name="CHAP_Target.Redshift"></a>

Você pode migrar dados para bancos de dados do Amazon Redshift usando o. AWS Database Migration Service O Amazon Redshift é um serviço de data warehouse totalmente gerenciado e em escala de petabytes na Nuvem . Com um banco de dados Amazon Redshift como destino, é possível migrar dados de todos os outros bancos de dados de origem compatíveis.

Você pode usar o Amazon Redshift Serverless como destino para. AWS DMS Para obter mais informações, consulte [Usando AWS DMS com o Amazon Redshift Serverless como destinoAmazon Redshift Sem Servidor](#CHAP_Target.Redshift.RSServerless) a seguir.

 O cluster do Amazon Redshift deve estar na mesma AWS conta e na mesma AWS região da instância de replicação. 

Durante uma migração de banco de dados para o Amazon Redshift, AWS DMS primeiro move os dados para um bucket do Amazon S3. Quando os arquivos residem em um bucket do Amazon S3, eles são AWS DMS transferidos para as tabelas adequadas no armazém de dados do Amazon Redshift. AWS DMS cria o bucket do S3 na mesma AWS região do banco de dados do Amazon Redshift. A instância AWS DMS de replicação deve estar localizada na mesma AWS região. 

Se você usa a API AWS CLI ou DMS para migrar dados para o Amazon Redshift, configure AWS Identity and Access Management uma função (IAM) para permitir o acesso ao S3. Para obter mais informações sobre a criação do perfil do IAM, consulte [Criação das funções do IAM para usar com AWS DMS](security-iam.md#CHAP_Security.APIRole).

O endpoint do Amazon Redshift fornece automação completa para:
+ Geração de schema e mapeamento de tipo de dados
+ Carregamento completo de tabelas de banco de dados de origem
+ Carregamento incremental de alterações feitas a tabelas de origem
+ Aplicação de alterações de schema em Data Definition Language (DDL - Linguagem de definição de dados) feitas a tabelas de origem
+ Sincronização entre processos de carregamento completo e de captura de dados de alteração (CDC).

AWS Database Migration Service suporta operações de carga total e processamento de alterações. AWS DMS lê os dados do banco de dados de origem e cria uma série de arquivos de valores separados por vírgula (.csv). Para operações de carga total, AWS DMS cria arquivos para cada tabela. AWS DMS em seguida, copia os arquivos de tabela de cada tabela em uma pasta separada no Amazon S3. Quando os arquivos são carregados para o Amazon S3, AWS DMS envia um comando de cópia e os dados nos arquivos são copiados para o Amazon Redshift. Para operações de processamento de alterações, AWS DMS copia as alterações líquidas nos arquivos.csv. AWS DMS em seguida, carrega os arquivos de alteração líquida para o Amazon S3 e copia os dados para o Amazon Redshift.

Para obter detalhes adicionais sobre como trabalhar com o Amazon Redshift como alvo AWS DMS, consulte as seguintes seções: 

**Topics**
+ [Pré-requisitos para usar um banco de dados do Amazon Redshift como destino para AWS Database Migration Service](#CHAP_Target.Redshift.Prerequisites)
+ [Privilégios necessários para utilizar o Redshift como destino](#CHAP_Target.Redshift.Privileges)
+ [Limitações no uso do Amazon Redshift como alvo para AWS Database Migration Service](#CHAP_Target.Redshift.Limitations)
+ [Configurando um banco de dados do Amazon Redshift como destino para AWS Database Migration Service](#CHAP_Target.Redshift.Configuration)
+ [Usando o roteamento de VPC aprimorado com o Amazon Redshift como destino para AWS Database Migration Service](#CHAP_Target.Redshift.EnhancedVPC)
+ [Criação e uso de AWS KMS chaves para criptografar dados de destino do Amazon Redshift](#CHAP_Target.Redshift.KMSKeys)
+ [Configurações de endpoint ao usar o Amazon Redshift como destino para AWS DMS](#CHAP_Target.Redshift.ConnectionAttrib)
+ [Utilizar uma chave de criptografia de dados e um bucket do Amazon S3 como armazenamento intermediário](#CHAP_Target.Redshift.EndpointSettings)
+ [Configurações de tarefas de vários threads para o Amazon Redshift](#CHAP_Target.Redshift.ParallelApply)
+ [Tipos de dados de destino do Amazon Redshift](#CHAP_Target.Redshift.DataTypes)
+ [Usando AWS DMS com o Amazon Redshift Serverless como destino](#CHAP_Target.Redshift.RSServerless)

## Pré-requisitos para usar um banco de dados do Amazon Redshift como destino para AWS Database Migration Service
<a name="CHAP_Target.Redshift.Prerequisites"></a>

A lista a seguir descreve os pré-requisitos necessários para trabalhar com o Amazon Redshift como destino para a migração de dados:
+ Use o AWS Management Console para iniciar um cluster do Amazon Redshift. Observe as informações básicas sobre sua AWS conta e seu cluster do Amazon Redshift, como sua senha, nome de usuário e nome do banco de dados. Esses valores são necessários para criar o endpoint de destino do Amazon Redshift. 
+ O cluster do Amazon Redshift deve estar na mesma AWS conta e na mesma AWS região da instância de replicação.
+ A instância AWS DMS de replicação precisa de conectividade de rede com o endpoint do Amazon Redshift (nome do host e porta) que seu cluster usa.
+ AWS DMS usa um bucket do Amazon S3 para transferir dados para o banco de dados do Amazon Redshift. Para o AWS DMS criar um bucket, o console usa um perfil do IAM, `dms-access-for-endpoint`. Se você usa a API AWS CLI ou DMS para criar uma migração de banco de dados com o Amazon Redshift como banco de dados de destino, você deve criar essa função do IAM. Para obter mais informações sobre a criação do perfil, consulte [Criação das funções do IAM para usar com AWS DMS](security-iam.md#CHAP_Security.APIRole). 
+ AWS DMS converte BLOBs, CLOBs, e NCLOBs em um VARCHAR na instância de destino do Amazon Redshift. O Amazon Redshift não oferece suporte a tipos de dados VARCHAR maiores que 64 KB, então você não pode armazenar dados tradicionais no Amazon LOBs Redshift. 
+ Defina a configuração da tarefa de metadados de destino como `true` for [BatchApplyEnabled](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md) AWS DMS para lidar com alterações nas tabelas de destino do Amazon Redshift durante o CDC. É necessária uma chave primária na tabela de origem e de destino. Sem uma chave primária, as alterações são aplicadas instrução por instrução. E isso pode afetar negativamente o desempenho da tarefa durante a CDC, casando latência de destino e afetando a fila de confirmação do cluster. 
+ Quando a segurança por linha está habilitada nas tabelas no Redshift, você deve conceder as permissões apropriadas a todos os seus usuários do DMS.

## Privilégios necessários para utilizar o Redshift como destino
<a name="CHAP_Target.Redshift.Privileges"></a>

Utilize o comando GRANT para definir os privilégios de acesso do usuário ou do grupo de usuários. Os privilégios incluem opções de acesso como leitura de dados em tabelas e exibições, gravação de dados e criação de tabelas. Para obter mais informações sobre como utilizar GRANT com o Amazon Redshift, consulte [GRANT](https://docs.aws.amazon.com//redshift/latest/dg/r_GRANT.html) no *Guia do desenvolvedor de banco de dados do Amazon Redshift*. 

Veja a seguir a sintaxe para fornecer privilégios específicos para uma tabela, banco de dados, esquema, perfil, procedimento ou privilégios em nível de linguagem em tabelas e visualizações do Amazon Redshift.

```
GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES } [,...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
    ON DATABASE db_name [, ...]
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
    ON SCHEMA schema_name [, ...]
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { FUNCTION function_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { PROCEDURE procedure_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL PROCEDURES IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

GRANT USAGE 
    ON LANGUAGE language_name [, ...]
    TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]
```

A seguir está a sintaxe para privilégios de nível de coluna em tabelas e visualizações do Amazon Redshift. 

```
GRANT { { SELECT | UPDATE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) }
     ON { [ TABLE ] table_name [, ...] }
     TO { username | GROUP group_name | PUBLIC } [, ...]
```

A seguir está a sintaxe para o privilégio ASSUMEROLE concedido a usuários e grupos com um perfil especificado.

```
GRANT ASSUMEROLE
    ON { 'iam_role' [, ...] | ALL }
    TO { username | GROUP group_name | PUBLIC } [, ...]
    FOR { ALL | COPY | UNLOAD } [, ...]
```

## Limitações no uso do Amazon Redshift como alvo para AWS Database Migration Service
<a name="CHAP_Target.Redshift.Limitations"></a>

As seguintes limitações se aplicam ao utilizar um banco de dados Amazon Redshift como destino:
+ Não ative o versionamento para o bucket do S3 utilizado como armazenamento intermediário para o destino do Amazon Redshift. Se o versionamento do S3 for necessário, utilize políticas de ciclo de vida para excluir ativamente as versões antigas. Caso contrário, é possível encontrar falhas na conexão de teste de endpoint devido ao tempo limite de uma chamada `list-object` do S3. Para criar uma política de ciclo de vida para um bucket do S3, consulte [Gerenciar o ciclo de vida do armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html). Para excluir a versão de um objeto do S3, consulte [Excluir versões de objetos de um bucket com versionamento ativado](https://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjectVersions.html).
+ O DDL a seguir não tem suporte:

  ```
  ALTER TABLE table name MODIFY COLUMN column name data type;
  ```
+  AWS DMS não é possível migrar ou replicar alterações em um esquema com um nome que comece com sublinhado (\$1). Se você tiver esquemas com um nome que começa com um sublinhado, utilize transformações de mapeamento para renomear o esquema no destino. 
+  O Amazon Redshift não oferece suporte a VARCHARs mais de 64 KB. LOBs dos bancos de dados tradicionais não podem ser armazenados no Amazon Redshift.
+  A aplicação de uma instrução DELETE a uma tabela com uma chave primária de várias colunas não tem suporte quando qualquer um dos nomes de coluna da chave primária usa uma palavra reservada. Acesse [aqui](https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html) para ver uma lista de palavras reservadas do Amazon Redshift.
+ Poderá haver problemas de desempenho se o sistema de origem executar operações UPDATE na chave primária de uma tabela de origem. Esses problemas de desempenho ocorrem ao aplicar alterações no destino. Isso ocorre porque as operações UPDATE (e DELETE) dependem do valor da chave primária para identificar a linha de destino. Se você atualizar a chave primária de uma tabela de origem, o log de tarefas conterá mensagens, como as seguintes:

  ```
  Update on table 1 changes PK to a PK that was previously updated in the same bulk update.
  ```
+ O DMS não é compatível com nomes de DNS personalizados ao configurar um endpoint para um cluster do Redshift, e você precisa utilizar o nome de DNS fornecido pela Amazon. Como o cluster do Amazon Redshift deve estar na mesma AWS conta e região da instância de replicação, a validação falhará se você usar um endpoint de DNS personalizado.
+ O Amazon Redshift tem um tempo limite padrão de sessão ociosa de 4 horas. Quando não há nenhuma atividade na tarefa de replicação do DMS, o Redshift desconecta a sessão após 4 horas. Os erros podem resultar da incapacidade do DMS de se conectar e da possível necessidade de reinicialização. Como solução alternativa, defina um limite de SESSION TIMEOUT maior que 4 horas para o usuário de replicação do DMS. Ou consulte a descrição de [ALTER USER](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_USER.html) no *Guia do desenvolvedor do banco de dados Amazon Redshift*.
+ Quando AWS DMS replica os dados da tabela de origem sem uma chave primária ou exclusiva, a latência do CDC pode ser alta, resultando em um nível de desempenho inaceitável.
+ Não é possível truncar partições durante a replicação de CDC da origem do Oracle para o destino do Redshift.
+ Registros duplicados podem aparecer nas tabelas de destino porque o Amazon Redshift não impõe chaves primárias e o AWS DMS pode reproduzir o CDC quando uma tarefa é retomada. Para evitar duplicatas, use a `ApplyErrorInsertPolicy=INSERT_RECORD` configuração. Para obter mais informações, consulte [Configurações de tarefa de tratamento de erros](CHAP_Tasks.CustomizingTasks.TaskSettings.ErrorHandling.md). Como alternativa, você pode implementar procedimentos de detecção de duplicatas e limpeza pós-migração em nível de aplicativo.

## Configurando um banco de dados do Amazon Redshift como destino para AWS Database Migration Service
<a name="CHAP_Target.Redshift.Configuration"></a>

AWS Database Migration Service deve ser configurado para funcionar com a instância do Amazon Redshift. A tabela a seguir descreve as propriedades de configuração disponíveis para o endpoint do Amazon Redshift.


| Propriedade | Description | 
| --- | --- | 
| servidor | O nome do cluster do Amazon Redshift que você está utilizando. | 
| porta | O número da porta do Amazon Redshift. O valor padrão é 5439. | 
| username | Um nome de usuário do Amazon Redshift de um usuário registrado. | 
| password | A senha do usuário nomeado na propriedade username. | 
| banco de dados | O nome do data warehouse (serviço) do Amazon Redshift com o qual você está trabalhando. | 

Se quiser adicionar atributos de string de conexão adicional ao endpoint do Amazon Redshift, especifique os atributos `maxFileSize` e `fileTransferUploadStreams`. Para obter mais informações sobre esses atributos, consulte [Configurações de endpoint ao usar o Amazon Redshift como destino para AWS DMS](#CHAP_Target.Redshift.ConnectionAttrib).

## Usando o roteamento de VPC aprimorado com o Amazon Redshift como destino para AWS Database Migration Service
<a name="CHAP_Target.Redshift.EnhancedVPC"></a>

Se você utilizar o roteamento aprimorado da VPC com o destino do Amazon Redshift, todo o tráfego de COPY entre o cluster do Amazon Redshift e os repositórios de dados trafegarão pela VPC. Como o roteamento aprimorado da VPC afeta a maneira como o Amazon Redshift acessa outros recursos, os comandos COPY poderão falhar se você não configurar a VPC corretamente.

AWS DMS pode ser afetado por esse comportamento porque ele usa o comando COPY para mover dados no S3 para um cluster do Amazon Redshift.

A seguir estão as etapas AWS DMS necessárias para carregar dados em um destino do Amazon Redshift:

1. AWS DMS copia dados da origem para arquivos.csv no servidor de replicação.

1. AWS DMS usa o AWS SDK para copiar os arquivos.csv em um bucket do S3 na sua conta.

1. AWS DMS em seguida, usa o comando COPY no Amazon Redshift para copiar dados dos arquivos.csv no S3 para uma tabela apropriada no Amazon Redshift.

Se o Enhanced VPC Routing não estiver habilitado, o Amazon Redshift roteará o tráfego pela Internet, incluindo o tráfego para outros serviços dentro da rede. AWS Se o recurso não estiver habilitado, não será necessário configurar o caminho de rede. Se o recurso estiver habilitado, você deverá criar especificamente um caminho de rede entre o cluster do VPC e os recursos de dados. Para obter mais informações sobre a configuração necessária, consulte [Roteamento aprimorado da VPC](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html) na documentação do Amazon Redshift. 

## Criação e uso de AWS KMS chaves para criptografar dados de destino do Amazon Redshift
<a name="CHAP_Target.Redshift.KMSKeys"></a>

É possível criptografar os dados de destino enviados ao Amazon S3 antes que sejam copiados no Amazon Redshift. Para fazer isso, você pode criar e usar AWS KMS chaves personalizadas. É possível utilizar a chave criada para criptografar os dados de destino utilizando um dos seguintes mecanismos ao criar o endpoint de destino do Amazon Redshift:
+ Utilize a opção a seguir ao executar o comando `create-endpoint` utilizando a AWS CLI.

  ```
  --redshift-settings '{"EncryptionMode": "SSE_KMS", "ServerSideEncryptionKmsKeyId": "your-kms-key-ARN"}'
  ```

  Aqui, `your-kms-key-ARN` é o nome de recurso da Amazon (ARN) de sua chave do KMS. Para obter mais informações, consulte [Utilizar uma chave de criptografia de dados e um bucket do Amazon S3 como armazenamento intermediário](#CHAP_Target.Redshift.EndpointSettings).
+ Defina o atributo de conexão adicional `encryptionMode` como o valor `SSE_KMS`, e o atributo de conexão adicional `serverSideEncryptionKmsKeyId` como o ARN de sua chave do KMS. Para obter mais informações, consulte [Configurações de endpoint ao usar o Amazon Redshift como destino para AWS DMS](#CHAP_Target.Redshift.ConnectionAttrib).

Para criptografar dados de destino do Amazon Redshift usando uma chave KMS, você precisa de AWS Identity and Access Management uma função (IAM) que tenha permissões para acessar os dados do Amazon Redshift. Esse perfil do IAM é acessado em uma política (uma política de chaves) anexada à chave de criptografia criada. É possível fazer isso no console do IAM criando o seguinte:
+ Uma função do IAM com uma política AWS gerenciada.
+ A chave do KMS com uma política de chaves que faz referência a esse perfil.

Os procedimentos a seguir descrevem como fazer isso.

**Para criar uma função do IAM com a política AWS gerenciada necessária**

1. Abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. No painel de navegação, escolha **Perfis**. A página **Roles (Funções)** é aberta.

1. Selecione **Criar perfil**. A página **Create role (Criar função)** é aberta.

1. Com o **Serviço da AWS ** escolhido como uma entidade confiável, escolha **DMS** como o serviço que utilizará esse perfil.

1. Escolha **Próximo: Permissões**. A página **Attach permissions policies (Anexar políticas de permissões)** é exibida.

1. Encontre e selecione a política `AmazonDMSRedshiftS3Role`.

1. Escolha **Próximo: tags**. A página **Adicionar tags** é exibida. Aqui, você pode adicionar todas as tags desejadas.

1. Escolha **Next: Review (Próximo: revisar)** e reveja os resultados.

1. Se as configurações forem o que você precisa, insira um nome para o perfil (por exemplo, `DMS-Redshift-endpoint-access-role`), e qualquer descrição adicional e escolha **Criar função**. A página **Roles (Funções)** é aberta com uma mensagem indicando que o perfil foi criado.

Agora, você criou o perfil para acessar os recursos do Amazon Redshift para criptografia com um nome especificado, por exemplo `DMS-Redshift-endpoint-access-role`.

**Para criar uma chave de AWS KMS criptografia com uma política de chaves que faça referência à sua função do IAM**
**nota**  
Para obter mais informações sobre como AWS DMS funciona com chaves de AWS KMS criptografia, consulte[Configurando uma chave de criptografia e especificando permissões AWS KMS](CHAP_Security.md#CHAP_Security.EncryptionKey).

1. Faça login no console Console de gerenciamento da AWS e abra o AWS Key Management Service (AWS KMS) em [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms).

1. Para alterar o Região da AWS, use o seletor de região no canto superior direito da página.

1. No painel de navegação, escolha **Chaves gerenciadas pelo cliente**.

1. Escolha **Criar chave**. A página **Configure key (Configurar chave)** é aberta.

1. Para **Key type (Tipo de chave)**, escolha **Symmetric (Simétrica)**.
**nota**  
Ao criar essa chave, você só pode criar uma chave simétrica, porque todos os AWS serviços, como o Amazon Redshift, funcionam somente com chaves de criptografia simétricas.

1. Escolha **Opções avançadas**. Para **Key material origin (Origem do material da chave)**, certifique-se de que o **KMS** está escolhido e escolha **Next (Próximo)**. A página **Add labels (Adicionar rótulos)** é aberta.

1. Em **Create alias and description (Criar alias e descrição)**, insira um alias para a chave (por exemplo, `DMS-Redshift-endpoint-encryption-key`) e qualquer descrição adicional.

1. Em **Tags**, adicione todas as tags desejadas para ajudar a identificar a chave e controlar seu uso e escolha **Next (Próximo)**. A página **Define key administrative permissions (Definir permissões administrativas de chaves)** é aberta mostrando uma lista de usuários e funções que podem ser escolhidos.

1. Adicione os usuários e as funções desejados para gerenciar a chave. Certifique-se de que esses usuários e funções tenham as permissões necessárias para gerenciar a chave. 

1. Em **Key deletion (Exclusão de chaves)**, escolha se os administradores de chaves podem excluir a chave e escolha **Next (Próximo)**. A página **Define key usage permissions (Definir permissões de uso de chaves)** é aberta mostrando uma lista adicional de usuários e funções que podem ser escolhidos.

1. Para **Esta conta**, escolha os usuários disponíveis que deseja que executem operações criptográficas em destinos do Amazon Redshift. Escolha também o perfil criado anteriormente em **Perfis** para ativar o acesso à criptografia dos objetos de destino do Amazon Redshift, por exemplo, `DMS-Redshift-endpoint-access-role`).

1. Se você quiser adicionar outras contas não listadas para ter esse mesmo acesso, em **Outras AWS contas**, escolha **Adicionar outra AWS conta** e escolha **Avançar**. A página **Review and edit key policy (Rever e editar política de chave)** é aberta mostrando o JSON da política de chave que você pode revisar e editar digitando no JSON existente. Aqui, a política de chave que faz referência à função e aos usuários é mostrada (por exemplo, `Admin` e `User1`) que você escolheu na etapa anterior. Você também pode ver as diferentes ações de chaves permitidas para as várias entidades principais (usuários e perfis), conforme mostrado no exemplo a seguir.

------
#### [ JSON ]

****  

   ```
   {
       "Id": "key-consolepolicy-3",
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Enable IAM User Permissions",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:root"
                   ]
               },
               "Action": "kms:*",
               "Resource": "*"
           },
           {
               "Sid": "Allow access for Key Administrators",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:role/Admin"
                   ]
               },
               "Action": [
                   "kms:Create*",
                   "kms:Describe*",
                   "kms:Enable*",
                   "kms:List*",
                   "kms:Put*",
                   "kms:Update*",
                   "kms:Revoke*",
                   "kms:Disable*",
                   "kms:Get*",
                   "kms:Delete*",
                   "kms:TagResource",
                   "kms:UntagResource",
                   "kms:ScheduleKeyDeletion",
                   "kms:CancelKeyDeletion"
               ],
               "Resource": "*"
           },
           {
               "Sid": "Allow use of the key",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:role/DMS-Redshift-endpoint-access-role",
                       "arn:aws:iam::111122223333:role/Admin",
                       "arn:aws:iam::111122223333:role/User1"
                   ]
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:ReEncrypt*",
                   "kms:GenerateDataKey*",
                   "kms:DescribeKey"
               ],
               "Resource": "*"
           },
           {
               "Sid": "Allow attachment of persistent resources",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:role/DMS-Redshift-endpoint-access-role",
                       "arn:aws:iam::111122223333:role/Admin",
                       "arn:aws:iam::111122223333:role/User1"
                   ]
               },
               "Action": [
                   "kms:CreateGrant",
                   "kms:ListGrants",
                   "kms:RevokeGrant"
               ],
               "Resource": "*",
               "Condition": {
                   "Bool": {
                       "kms:GrantIsForAWSResource": true
                   }
               }
           }
       ]
   }
   ```

------

1. Escolha **Terminar**. A página **Chaves de criptografia** é aberta com uma mensagem indicando que a sua AWS KMS key foi criada.

Agora, você criou uma nova chave do KMS com um alias especificado (por exemplo, `DMS-Redshift-endpoint-encryption-key`). Essa chave permite AWS DMS criptografar os dados de destino do Amazon Redshift.

## Configurações de endpoint ao usar o Amazon Redshift como destino para AWS DMS
<a name="CHAP_Target.Redshift.ConnectionAttrib"></a>

É possível utilizar as configurações de endpoint para configurar o destino do Amazon Redshift de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--redshift-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o Amazon Redshift como destino.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.Redshift.html)

## Utilizar uma chave de criptografia de dados e um bucket do Amazon S3 como armazenamento intermediário
<a name="CHAP_Target.Redshift.EndpointSettings"></a>

É possível utilizar as configurações de endpoint do Amazon Redshift para configurar o seguinte:
+ Uma chave de criptografia de AWS KMS dados personalizada. É possível utilizar essa chave para criptografar os dados enviados ao Amazon S3 antes que sejam copiados no Amazon Redshift.
+ Um bucket do S3 personalizado como armazenamento intermediário para dados migrados para o Amazon Redshift.
+ Mapeie um booleano como booleano de uma origem do PostgreSQL. Por padrão, um tipo BOOLEAN é migrado como varchar(1). É possível especificar `MapBooleanAsBoolean` para permitir que o destino do Redshift migre o tipo booleano como booleano, conforme mostrado no exemplo a seguir.

  ```
  --redshift-settings '{"MapBooleanAsBoolean": true}'
  ```

  Observe que você deve definir essa configuração nos endpoints de origem e de destino para que ela tenha efeito.

### Configurações de chave do KMS para criptografia de dados
<a name="CHAP_Target.Redshift.EndpointSettings.KMSkeys"></a>

Os exemplos a seguir mostram como configurar uma chave personalizada do KMS para criptografar os dados enviados por push ao S3. Para começar, é possível fazer a seguinte chamada de `create-endpoint` utilizando a AWS CLI.

```
aws dms create-endpoint --endpoint-identifier redshift-target-endpoint --endpoint-type target 
--engine-name redshift --username your-username --password your-password 
--server-name your-server-name --port 5439 --database-name your-db-name 
--redshift-settings '{"EncryptionMode": "SSE_KMS", 
"ServerSideEncryptionKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/24c3c5a1-f34a-4519-a85b-2debbef226d1"}'
```

Aqui, o objeto JSON especificado pela opção `--redshift-settings` define dois parâmetros. Um é um parâmetro `EncryptionMode` com o valor `SSE_KMS`. O outro é um parâmetro `ServerSideEncryptionKmsKeyId` com o valor `arn:aws:kms:us-east-1:111122223333:key/24c3c5a1-f34a-4519-a85b-2debbef226d1`. Esse valor é um Nome de recurso da Amazon (ARN) para a chave personalizada do KMS.

Por padrão, a criptografia dos dados do S3 ocorre usando a criptografia do lado do servidor do S3. Para o destino do Amazon Redshift do exemplo anterior, isso também é equivalente a especificar as configurações de endpoint, como no exemplo a seguir.

```
aws dms create-endpoint --endpoint-identifier redshift-target-endpoint --endpoint-type target 
--engine-name redshift --username your-username --password your-password 
--server-name your-server-name --port 5439 --database-name your-db-name 
--redshift-settings '{"EncryptionMode": "SSE_S3"}'
```

Para obter mais informações sobre como trabalhar com a criptografia do lado do servidor do S3, consulte [Proteger dados utilizando criptografia do lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html) no *Guia do usuário do Amazon Simple Storage Service*.

**nota**  
Também é possível utilizar o comando `modify-endpoint` na CLI para alterar o valor do parâmetro `EncryptionMode` para um endpoint existente de `SSE_KMS` para `SSE_S3`. Mas não é possível alterar o valor de `EncryptionMode` de `SSE_S3` para `SSE_KMS`.

### Configurações do bucket do Amazon S3
<a name="CHAP_Target.Redshift.EndpointSettings.S3Buckets"></a>

Quando você migra dados para um endpoint de destino do Amazon Redshift AWS DMS , usa um bucket padrão do Amazon S3 como armazenamento intermediário de tarefas antes de copiar os dados migrados para o Amazon Redshift. Por exemplo, os exemplos mostrados para a criação de um endpoint de destino do Amazon Redshift com uma chave de criptografia de dados do AWS KMS utilizam esse bucket padrão do S3 (consulte [Configurações de chave do KMS para criptografia de dados](#CHAP_Target.Redshift.EndpointSettings.KMSkeys)). 

Em vez disso, você pode especificar um bucket S3 personalizado para esse armazenamento intermediário incluindo os seguintes parâmetros no valor da sua `--redshift-settings` opção no AWS CLI `create-endpoint` comando:
+ `BucketName`: uma string que você especifica como o nome do armazenamento do bucket do S3. Se o perfil de acesso ao serviço for baseado na política `AmazonDMSRedshiftS3Role`, esse valor deverá ter um prefixo de `dms-`, por exemplo, `dms-my-bucket-name`.
+ `BucketFolder`: (opcional) uma string que é possível especificar como o nome da pasta de armazenamento no bucket do S3 especificado.
+ `ServiceAccessRoleArn`: o ARN de um perfil do IAM que permite acesso administrativo ao bucket do S3. Normalmente, você cria esse perfil com base na política `AmazonDMSRedshiftS3Role`. Para obter um exemplo, consulte o procedimento para criar um perfil do IAM com a política gerenciada pela AWS necessária em [Criação e uso de AWS KMS chaves para criptografar dados de destino do Amazon Redshift](#CHAP_Target.Redshift.KMSKeys).
**nota**  
Se você especificar o ARN de outro perfil do IAM utilizando a opção `--service-access-role-arn` do comando `create-endpoint`, essa opção de perfil do IAM terá precedência.

O exemplo a seguir mostra como é possível utilizar esses parâmetros para especificar um bucket personalizado do Amazon S3 na seguinte chamada de `create-endpoint` utilizando a AWS CLI. 

```
aws dms create-endpoint --endpoint-identifier redshift-target-endpoint --endpoint-type target 
--engine-name redshift --username your-username --password your-password 
--server-name your-server-name --port 5439 --database-name your-db-name 
--redshift-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", 
"BucketName": "your-bucket-name", "BucketFolder": "your-bucket-folder-name"}'
```

## Configurações de tarefas de vários threads para o Amazon Redshift
<a name="CHAP_Target.Redshift.ParallelApply"></a>

É possível melhorar o desempenho de tarefas de carga máxima e captura de dados de alteração (CDC) para um endpoint de destino do Amazon Redshift utilizando configurações de tarefas de vários threads. Elas permitem especificar os threads simultâneos e o número de registros a serem armazenados em um buffer.

### Configurações de tarefas de vários threads para o Amazon Redshift
<a name="CHAP_Target.Redshift.ParallelApply.FullLoad"></a>

Para promover o desempenho da carga máxima, é possível utilizar as seguintes configurações da tarefa `ParallelLoad*`:
+ `ParallelLoadThreads`: especifica o número de threads simultâneos que o DMS utiliza durante uma carga máxima para enviar registros de dados para um endpoint de destino do Amazon Redshift. O valor padrão é zero (0) e o valor máximo é 32. Para obter mais informações, consulte [Configurações de tarefa de carregamento completo](CHAP_Tasks.CustomizingTasks.TaskSettings.FullLoad.md).

  É possível utilizar o atributo `enableParallelBatchInMemoryCSVFiles` definido como `false` ao utilizar a configuração da tarefa `ParallelLoadThreads`. O atributo melhora o desempenho de tarefas de carga máxima maiores com vários threads, fazendo com que o DMS grave em disco em vez de na memória. O valor padrão é `true`.
+ `ParallelLoadBufferSize`: especifica o máximo de solicitações de registros de dados ao utilizar threads de carga paralela com o destino do Redshift. O valor padrão é 100 e o valor máximo é 1.000. Recomendamos que você use essa opção quando ParallelLoadThreads > 1 (maior que um).

**nota**  
Support para o uso de configurações de `ParallelLoad*` tarefas durante o FULL LOAD nos endpoints de destino do Amazon Redshift está disponível nas AWS DMS versões 3.4.5 e superiores.  
A configuração de `ReplaceInvalidChars` do endpoint do Redshift não é compatível para utilização durante a captura de dados de alteração (CDC) ou durante uma tarefa de migração FULL LOAD ativada para carga paralela. Ela é compatível com a migração FULL LOAD quando a carga paralela não está ativada. Para obter mais informações, consulte [RedshiftSettings](https://docs.aws.amazon.com/dms/latest/APIReference/API_RedshiftSettings.html)a *Referência AWS Database Migration Service da API*

### Configurações de tarefas de CDC de vários threads para o Amazon Redshift
<a name="CHAP_Target.Redshift.ParallelApply.CDC"></a>

Para promover o desempenho da CDC, é possível utilizar as seguintes configurações da tarefa `ParallelApply*`:
+ `ParallelApplyThreads`— Especifica o número de threads simultâneos que são AWS DMS usados durante um carregamento do CDC para enviar registros de dados para um endpoint de destino do Amazon Redshift. O valor padrão é zero (0) e o valor máximo é 32. O valor mínimo recomendado é igual ao número de fatias no cluster.
+ `ParallelApplyBufferSize`: especifica o máximo de solicitações de registro de dados ao utilizar threads de aplicação paralelos com o destino do Redshift. O valor padrão é 100 e o valor máximo é 1.000. Recomendamos usar essa opção quando ParallelApplyThreads > 1 (maior que um). 

  Para obter o máximo benefício do Redshift como destino, é recomendável que o valor de `ParallelApplyBufferSize` seja pelo menos duas vezes (o dobro ou mais) do número de `ParallelApplyThreads`.

**nota**  
Support para o uso de configurações de `ParallelApply*` tarefas durante o CDC para endpoints de destino do Amazon Redshift está disponível AWS DMS nas versões 3.4.3 e superiores.

O nível de paralelismo aplicado depende da correlação entre o *tamanho do lote* e o *tamanho máximo do arquivo* utilizado para transferir dados. Ao utilizar configurações de tarefas CDC de vários threads com um destino do Redshift, os benefícios são obtidos quando o tamanho do lote é grande em relação ao tamanho máximo do arquivo. Por exemplo, é possível utilizar a seguinte combinação de configurações de endpoint e de tarefa para ajustar o desempenho ideal. 

```
// Redshift endpoint setting
                
        MaxFileSize=250000;

// Task settings

        BatchApplyEnabled=true;
        BatchSplitSize =8000;
        BatchApplyTimeoutMax =1800;
        BatchApplyTimeoutMin =1800;
        ParallelApplyThreads=32;
        ParallelApplyBufferSize=100;
```

Utilizando as configurações do exemplo anterior, um cliente com uma workload transacional pesada se beneficia com seu buffer de lote, contendo 8.000 registros, sendo preenchido em 1800 segundos, utilizando 32 threads paralelos com um tamanho máximo de arquivo de 250 MB.

Para obter mais informações, consulte [Configurações de ajuste de processamento de alterações](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md).

**nota**  
As consultas do DMS executadas durante a replicação contínua em um cluster do Redshift podem compartilhar a mesma fila do WLM (gerenciamento da workload) com outras consultas de aplicações em execução. Portanto, considere configurar adequadamente as propriedades do WLM para influenciar o desempenho durante a replicação contínua para um destino do Redshift. Por exemplo, se outras consultas ETL paralelas estiverem em execução, o DMS será executado mais lentamente e os ganhos de desempenho serão perdidos.

## Tipos de dados de destino do Amazon Redshift
<a name="CHAP_Target.Redshift.DataTypes"></a>

O endpoint do Amazon Redshift é AWS DMS compatível com a maioria dos tipos de dados do Amazon Redshift. A tabela a seguir mostra os tipos de dados de destino do Amazon Redshift que são compatíveis com o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


| AWS DMS tipos de dados | Tipos de dados do Amazon Redshift | 
| --- | --- | 
| BOOLEAN | BOOL | 
| BYTES | VARCHAR (tamanho) | 
| DATE | DATE | 
| TIME | VARCHAR(20) | 
| DATETIME |  Se a escala for => 0 e =< 6, dependendo do tipo de coluna de destino do Redshift, uma das seguintes opções: TIMESTAMP (s) TIMESTAMPTZ (s): se o timestamp de origem contiver um deslocamento de zona (como no SQL Server ou Oracle), ele será convertido em UTC na inserção/atualização. Se ele não contiver um deslocamento, a hora já será considerada em UTC. Se a escala for => 7 e =< 9, use:  VARCHAR (37) | 
| INT1 | INT2 | 
| INT2 | INT2 | 
| INT4 | INT4 | 
| INT8 | INT8 | 
| NUMERIC | Se a escala for => 0 e =< 37, use:  NUMERIC (p,s)  Se a escala for => 38 e =< 127, use:  VARCHAR (tamanho) | 
| REAL4 | FLOAT4 | 
| REAL8 | FLOAT8 | 
| STRING | Se o tamanho for de 1 a 65.535, utilize VARCHAR (tamanho em bytes)  Se o tamanho for de 65.536 a 2.147.483.647, utilize VARCHAR (65535)  | 
| UINT1 | INT2 | 
| UINT2 | INT2 | 
| UINT4 | INT4 | 
| UINT8 | NUMERIC (20,0) | 
| WSTRING |  Se o tamanho for de 1 a 65.535, utilize NVARCHAR (tamanho em bytes)  Se o tamanho for de 65.536 a 2.147.483.647, utilize NVARCHAR (65535) | 
| BLOB | VARCHAR (tamanho máximo de LOB \$12)  O tamanho máximo de LOB não pode exceder 31 KB. O Amazon Redshift não oferece suporte a VARCHARs mais de 64 KB. | 
| NCLOB | NVARCHAR (tamanho máximo de LOB)  O tamanho máximo de LOB não pode exceder 63 KB. O Amazon Redshift não oferece suporte a VARCHARs mais de 64 KB. | 
| CLOB | VARCHAR (tamanho máximo de LOB)  O tamanho máximo de LOB não pode exceder 63 KB. O Amazon Redshift não oferece suporte a VARCHARs mais de 64 KB. | 

## Usando AWS DMS com o Amazon Redshift Serverless como destino
<a name="CHAP_Target.Redshift.RSServerless"></a>

AWS DMS suporta o uso do Amazon Redshift Serverless como um endpoint de destino. Para obter informações sobre como utilizar o Amazon Redshift sem servidor, consulte [Amazon Redshift sem servidor](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-serverless.html) no [Guia de gerenciamento do Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/welcome.html).

Este tópico descreve como usar um endpoint sem servidor do Amazon Redshift com. AWS DMS

**nota**  
Ao criar um endpoint sem servidor do Amazon Redshift, para o **DatabaseName**campo de configuração do seu [RedshiftSettings](https://docs.aws.amazon.com/dms/latest/APIReference/API_RedshiftSettings.html)endpoint, use o nome do data warehouse do Amazon Redshift ou o nome do endpoint do grupo de trabalho. Para o **ServerName**campo, use o valor de Endpoint exibido na página **Grupo de trabalho** do cluster sem servidor (por exemplo,). `default-workgroup.093291321484.us-east-1.redshift-serverless.amazonaws.com` Para obter informações sobre como criar um endpoint, consulte [Criar endpoints de origem e de destino](CHAP_Endpoints.Creating.md). Para obter informações sobre o endpoint do grupo de trabalho, consulte [Conexão com o Amazon Redshift sem servidor](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-connecting.html).

### Política de confiança com o Amazon Redshift sem servidor como destino
<a name="CHAP_Target.Redshift.RSServerless.policy"></a>

Ao utilizar o Amazon Redshift sem servidor como um endpoint de destino, adicione a seguinte seção destacada à política de confiança. Essa política de confiança é anexada ao perfil `dms-access-for-endpoint`.

Para obter mais informações sobre como usar uma política de confiança com AWS DMS, consulte[Criação das funções do IAM para usar com AWS DMS](security-iam.md#CHAP_Security.APIRole).

### Limitações ao utilizar o Amazon Redshift sem servidor como destino
<a name="CHAP_Target.Redshift.RSServerless.Limitations"></a>

A utilização do Redshift sem servidor como destino apresenta as seguintes limitações:
+ AWS DMS só oferece suporte ao Amazon Redshift Serverless como endpoint em regiões que oferecem suporte ao Amazon Redshift Serverless. Para obter informações sobre quais regiões são compatíveis com o Amazon Redshift sem servidor, consulte **API do Redshift sem servidor** no tópico [Endpoints e cotas do Amazon Redshift](https://docs.aws.amazon.com/general/latest/gr/redshift-service.html) na [Referência geral do AWS](https://docs.aws.amazon.com/general/latest/gr/Welcome.html).
+ Ao utilizar o roteamento aprimorado da VPC, crie um endpoint do Amazon S3 na mesma VPC do Redshift sem servidor ou no cluster provisionado pelo Redshift. Para obter mais informações, consulte [Usando o roteamento de VPC aprimorado com o Amazon Redshift como destino para AWS Database Migration Service](#CHAP_Target.Redshift.EnhancedVPC).
+ AWS DMS não oferece suporte à taxa de transferência aprimorada para o Amazon Redshift Serverless como destino. Para obter mais informações, consulte [Melhoria do throughput para migrações de carga máxima do Oracle para o Amazon Redshift e o Amazon S3](CHAP_Serverless.Components.md#CHAP_Serverless.Throughput).
+ AWS DMS não suporta conexões com o Amazon Redshift Redshift Serverless quando o modo SSL está definido como. `verify-full` Para conexões que exigem verificação de SSL para destinos sem servidor do Amazon Redshift, use modos SSL alternativos, como ou. `require` `verify-ca`

# Usando um banco de dados SAP ASE como alvo para AWS Database Migration Service
<a name="CHAP_Target.SAP"></a>

Você pode migrar dados para bancos de dados SAP Adaptive Server Enterprise (ASE) — anteriormente conhecido como Sybase — usando AWS DMS qualquer uma das fontes de banco de dados suportadas.

Para obter informações sobre as versões do SAP ASE que oferecem AWS DMS suporte como destino, consulte[Metas para AWS DMS](CHAP_Introduction.Targets.md).

## Pré-requisitos para usar um banco de dados SAP ASE como destino para AWS Database Migration Service
<a name="CHAP_Target.SAP.Prerequisites"></a>

Antes de começar a trabalhar com um banco de dados SAP ASE como destino AWS DMS, verifique se você tem os seguintes pré-requisitos:
+ Forneça acesso à conta SAP ASE ao AWS DMS usuário. Esse usuário deve ter read/write privilégios no banco de dados SAP ASE.
+ Em alguns casos, é possível replicar para o SAP ASE versão 15.7 instalado em uma instância do Amazon EC2 no Microsoft Windows configurada com caracteres não latinos (por exemplo, chinês). Nesses casos, AWS DMS exige que o SAP ASE 15.7 SP121 seja instalado na máquina SAP ASE de destino.

## Limitações ao usar um banco de dados SAP ASE como destino para AWS DMS
<a name="CHAP_Target.SAP.Limitations"></a>

As seguintes limitações se aplicam ao utilizar um banco de dados SAP ASE como destino do AWS DMS:
+ AWS DMS não oferece suporte a tabelas que incluam campos com os seguintes tipos de dados. As colunas replicadas com esses tipos de dados são exibidas com valores nulos. 
  + Tipos definidos pelo usuário (UDT)

## Configurações de endpoint ao usar o SAP ASE como destino para AWS DMS
<a name="CHAP_Target.SAP.ConnectionAttrib"></a>

É possível utilizar as configurações de endpoint para configurar o destino do SAP ASE de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--sybase-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o SAP ASE como destino.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.SAP.html)

## Tipos de dados de destino do SAP ASE
<a name="CHAP_Target.SAP.DataTypes"></a>

A tabela a seguir mostra os tipos de dados de destino do banco de dados SAP ASE que são suportados durante o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipos de dados  |  Tipos de dados do SAP ASE  | 
| --- | --- | 
| BOOLEAN | BIT | 
| BYTES | VARBINARY (tamanho) | 
| DATE | DATE | 
| TIME | TIME | 
| TIMESTAMP |  Se a escala for => 0 e =< 6, use: BIGDATETIME  Se a escala for => 7 e =< 9, use: VARCHAR (37)  | 
| INT1 | TINYINT | 
| INT2 | SMALLINT | 
| INT4 | INTEGER | 
| INT8 | BIGINT | 
| NUMERIC | NUMERIC (p,s) | 
| REAL4 | REAL | 
| REAL8 | DOUBLE PRECISION | 
| STRING | VARCHAR (tamanho) | 
| UINT1 | TINYINT | 
| UINT2 | UNSIGNED SMALLINT | 
| UINT4 | UNSIGNED INTEGER | 
| UINT8 | UNSIGNED BIGINT | 
| WSTRING | VARCHAR (tamanho) | 
| BLOB | IMAGE | 
| CLOB | UNITEXT | 
| NCLOB | TEXT | 

# Usando o Amazon S3 como destino para AWS Database Migration Service
<a name="CHAP_Target.S3"></a>

Você pode migrar dados para o Amazon S3 AWS DMS usando qualquer uma das fontes de banco de dados suportadas. Ao usar o Amazon S3 como destino em uma AWS DMS tarefa, os dados de carga total e de captura de dados alterados (CDC) são gravados no formato de valores separados por vírgula (.csv) por padrão. Para obter mais opções de armazenamento compacto e de consultas mais rápidas, você também tem a opção de ter os dados gravados no formato do Apache Parquet (.parquet). 

AWS DMS nomeia arquivos criados durante um carregamento completo usando um contador hexadecimal incremental — por exemplo, .csv,... LOAD00001 LOAD00002 , LOAD00009, LOAD0000 A e assim por diante para arquivos.csv. AWS DMS nomeia arquivos CDC usando carimbos de data/hora, por exemplo, 20141029-1134010000.csv. Para cada tabela de origem que contém registros, AWS DMS cria uma pasta na pasta de destino especificada (se a tabela de origem não estiver vazia). AWS DMS grava todos os arquivos CDC e de carga completa no bucket do Amazon S3 especificado. Você pode controlar o tamanho dos arquivos AWS DMS criados usando a configuração do [MaxFileSize](https://docs.aws.amazon.com/dms/latest/APIReference/API_S3Settings.html#DMS-Type-S3Settings-MaxFileSize)endpoint. 

O parâmetro `bucketFolder` contém o local em que arquivos .csv ou .parquet são armazenados antes de serem carregados no bucket do S3. Com arquivos .csv, os dados de tabela são armazenados no seguinte formato no bucket do S3, mostrado com arquivos da carga máxima.

```
database_schema_name/table_name/LOAD00000001.csv
database_schema_name/table_name/LOAD00000002.csv
...
database_schema_name/table_name/LOAD00000009.csv
database_schema_name/table_name/LOAD0000000A.csv
database_schema_name/table_name/LOAD0000000B.csv
...database_schema_name/table_name/LOAD0000000F.csv
database_schema_name/table_name/LOAD00000010.csv
...
```

É possível especificar o delimitador de coluna, o delimitador de linha e outros parâmetros utilizando os atributos de conexão adicionais. Para obter mais informações sobre os atributos de conexão extra, consulte [Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring), no final desta seção.

Para evitar falsificações, AWS DMS valida a propriedade do bucket antes de realizar as operações. Por padrão, quando a configuração do endpoint do `ExpectedBucketOwner` Amazon S3 não é especificada, AWS DMS usa o ID da AWS conta que possui a função de AWS DMS serviço como o proprietário esperado do bucket.

Para migrar dados para um bucket do S3 pertencente a uma AWS conta diferente, você deve especificar explicitamente o proprietário real do bucket na configuração do endpoint do `ExpectedBucketOwner` Amazon S3, conforme mostrado a seguir. Caso contrário, a tarefa de replicação entre contas falhará.

```
--s3-settings '{"ExpectedBucketOwner": "AWS_Account_ID"}'
```

Quando você usa AWS DMS para replicar alterações de dados usando uma tarefa CDC, a primeira coluna do arquivo de saída.csv ou .parquet indica como os dados da linha foram alterados, conforme mostrado no seguinte arquivo.csv.

```
I,101,Smith,Bob,4-Jun-14,New York
U,101,Smith,Bob,8-Oct-15,Los Angeles
U,101,Smith,Bob,13-Mar-17,Dallas
D,101,Smith,Bob,13-Mar-17,Dallas
```

Neste exemplo, suponha que haja uma `EMPLOYEE` tabela no banco de dados de origem. AWS DMS grava dados no arquivo.csv ou .parquet, em resposta aos seguintes eventos:
+ Um novo funcionário (Bob Smith, ID de funcionário 101) é contratado em 4 de junho de 2014 no escritório de Nova York. No arquivo .csv ou .parquet, o `I` na primeira coluna indica que uma nova linha foi `INSERT` (inserida) na tabela EMPLOYEE no banco de dados de origem.
+ Em 8 de outubro de 2015, Bob é transferido para o escritório de Los Angeles. No arquivo .csv ou .parquet, o `U` indica que a linha correspondente na tabela EMPLOYEE foi `UPDATE` (atualizada) para refletir o local do novo escritório de Bob. O restante da linha reflete a linha na tabela EMPLOYEE conforme ela aparece após `UPDATE`. 
+ Em 13 de março de 2017, Bob é transferido novamente para o escritório de Dallas. No arquivo .csv ou .parquet, o `U` indica que essa linha foi `UPDATE` (atualizada) novamente. O restante da linha reflete a linha na tabela EMPLOYEE conforme ela aparece após `UPDATE`.
+ Depois de um tempo trabalhando em Dallas, Bob deixa a empresa. No arquivo .csv ou .parquet, o `D` indica que a linha foi `DELETE` (excluída) da tabela de origem. O restante da linha reflete como a linha na tabela EMPLOYEE aparecia antes de ser excluída.

Observe que, por padrão, para o CDC, AWS DMS armazena as alterações de linha para cada tabela do banco de dados, independentemente da ordem de transação. Para armazenar as alterações de linha nos arquivos de CDC de acordo com a ordem da transação, utilize as configurações do endpoint do S3 para especificar isso e o caminho da pasta em que deseja que os arquivos de transações da CDC sejam armazenados no destino do S3. Para obter mais informações, consulte [Captura de dados de alteração (CDC), incluindo a ordem de transações no destino do S3.](#CHAP_Target.S3.EndpointSettings.CdcPath).

Para controlar a frequência de gravações em um destino do Amazon S3 durante uma tarefa de replicação de dados, é possível configurar os atributos de conexão adicionais `cdcMaxBatchInterval` e `cdcMinFileSize`. Isso pode resultar em melhor desempenho ao analisar os dados sem operações adicionais de sobrecarga. Para obter mais informações, consulte [Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring). 

**Topics**
+ [Pré-requisitos da utilização do Amazon S3 como destino](#CHAP_Target.S3.Prerequisites)
+ [Limitações da utilização do Amazon S3 como destino](#CHAP_Target.S3.Limitations)
+ [Segurança](#CHAP_Target.S3.Security)
+ [Utilizar o Apache Parquet para armazenar objetos do Amazon S3](#CHAP_Target.S3.Parquet)
+ [Marcação de objetos do Amazon S3](#CHAP_Target.S3.Tagging)
+ [Criação de AWS KMS chaves para criptografar objetos de destino do Amazon S3](#CHAP_Target.S3.KMSKeys)
+ [Utilizar o particionamento de pastas com base em data](#CHAP_Target.S3.DatePartitioning)
+ [Carga paralela de fontes particionadas ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.ParallelLoad)
+ [Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring)
+ [Usando AWS Glue Data Catalog com um destino do Amazon S3 para AWS DMS](#CHAP_Target.S3.GlueCatalog)
+ [Utilizar criptografia de dados, arquivos de parquet e de CDC no destino do Amazon S3](#CHAP_Target.S3.EndpointSettings)
+ [Indicar operações de banco de dados de origem em dados migrados do S3](#CHAP_Target.S3.Configuring.InsertOps)
+ [Tipos de dados de destino do S3 Parquet](#CHAP_Target.S3.DataTypes)

## Pré-requisitos da utilização do Amazon S3 como destino
<a name="CHAP_Target.S3.Prerequisites"></a>

Antes de utilizar o Amazon S3 como destino, verifique se o seguinte é verdadeiro: 
+ O bucket do S3 que você está usando como destino está na mesma AWS região da instância de replicação do DMS que você está usando para migrar seus dados.
+ A AWS conta que você usa para a migração tem uma função do IAM com acesso de gravação e exclusão ao bucket do S3 que você está usando como destino.
+ Esse perfil tem acesso à marcação para que você possa marcar todos os objetos do S3 gravados no bucket de destino.
+ O perfil do IAM tem o DMS (dms.amazonaws.com) adicionado como *Entidade confiável.* 
+ Para a AWS DMS versão 3.4.7 e superior, o DMS deve acessar o bucket de origem por meio de um VPC endpoint ou de uma rota pública. Para ter informações sobre os endpoints da VPC, consulte [Configurando endpoints VPC para AWS DMS](CHAP_VPC_Endpoints.md).

Para configurar esse acesso à conta, verifique se o perfil atribuído à conta de usuário utilizada para criar a tarefa de migração tem o seguinte conjunto de permissões.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:PutObjectTagging"
            ],
            "Resource": [
                "arn:aws:s3:::buckettest2/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::buckettest2"
            ]
        }
    ]
}
```

------

Para obter os pré-requisitos para utilizar a validação com o S3 como destino, consulte [Pré-requisitos da validação do S3 de destino](CHAP_Validating_S3.md#CHAP_Validating_S3_prerequisites).

## Limitações da utilização do Amazon S3 como destino
<a name="CHAP_Target.S3.Limitations"></a>

Aplicam-se as seguintes limitações ao utilizar o Amazon S3 como destino:
+ Não ative o versionamento para o S3. Se o versionamento do S3 for necessário, utilize políticas de ciclo de vida para excluir ativamente as versões antigas. Caso contrário, é possível encontrar falhas na conexão de teste de endpoint devido ao tempo limite de uma chamada `list-object` do S3. Para criar uma política de ciclo de vida para um bucket do S3, consulte [Gerenciar o ciclo de vida do armazenamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html). Para excluir a versão de um objeto do S3, consulte [Excluir versões de objetos de um bucket com versionamento ativado](https://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjectVersions.html).
+ Um bucket do S3 ativado para VPC (VPC do gateway) é compatível com as versões 3.4.7 e superiores.
+ Os seguintes comandos da linguagem de definição de dados (DDL) são compatíveis com a captura de dados de alteração (CDC): truncar tabela, descartar tabela, criar tabela, renomear tabela, adicionar coluna, descartar coluna, renomear coluna e alterar o tipo de dados de coluna. Observe que quando uma coluna é adicionada, descartada ou renomeada no banco de dados de origem, nenhuma instrução ALTER é registrada no bucket do S3 de destino e AWS DMS não altera os registros criados anteriormente para corresponder à nova estrutura. Após a alteração, AWS DMS cria todos os novos registros usando a nova estrutura da tabela.
**nota**  
Uma operação de truncamento da DDL remove todos os arquivos e pastas de tabelas correspondentes em um bucket do S3. É possível utilizar as configurações de tarefas para desativar esse comportamento e configurar a forma como o DMS trata o comportamento da DDL durante a captura de dados de alteração (CDC). Para obter mais informações, consulte [Configurações de tarefa para processamento de DDL de processamento de alterações](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md).
+ O modo Full LOB não é compatível.
+ As alterações na estrutura da tabela de origem durante a carga máxima não são compatíveis. As alterações nos dados são compatíveis durante a carga máxima.
+ Várias tarefas que replicam dados da mesma tabela de origem para o mesmo bucket de endpoint do S3 de destino resultam em tarefas sendo gravadas no mesmo arquivo. Recomendamos que você especifique diferentes endpoints de destino (buckets) se sua fonte de dados estiver na mesma tabela.
+ `BatchApply` não é compatível com um endpoint do S3. A utilização da aplicação em lote (por exemplo, a configuração da tarefa de metadados de destino `BatchApplyEnabled`) para um destino do S3 pode resultar em perda de dados.
+ Não é possível utilizar `DatePartitionEnabled` ou `addColumnName` em conjunto com `PreserveTransactions` ou `CdcPath`.
+ AWS DMS não suporta renomear várias tabelas de origem para a mesma pasta de destino usando regras de transformação.
+ Se houver gravação intensa na tabela de origem durante a fase de carregamento completo, o DMS poderá gravar registros duplicados no bucket do S3 ou nas alterações armazenadas em cache.
+ Se você configurar a tarefa com um `TargetTablePrepMode` definido como `DO_NOTHING`, o DMS poderá gravar registros duplicados no bucket do S3 se a tarefa for interrompida e retomada abruptamente durante a fase de carregamento completo.
+ Se você configurar o endpoint de destino com a configuração `PreserveTransactions` definida como `true`, o recarregamento de uma tabela não limpará os arquivos de CDC gerados anteriormente. Para obter mais informações, consulte [Captura de dados de alteração (CDC), incluindo a ordem de transações no destino do S3.](#CHAP_Target.S3.EndpointSettings.CdcPath).

Para obter as limitações da utilização da validação com o S3 como destino, consulte [Limitações da utilização da validação de destino do S3.](CHAP_Validating_S3.md#CHAP_Validating_S3_limitations).

## Segurança
<a name="CHAP_Target.S3.Security"></a>

Para utilizar o Amazon S3 como destino, a conta utilizada para a migração deve ter acesso de gravação e exclusão ao bucket do Amazon S3 utilizado como o destino. Especifique o nome do recurso da Amazon (ARN) de um perfil do IAM que tem as permissões necessárias para acessar o Amazon S3. 

AWS DMS oferece suporte a um conjunto de concessões predefinidas para o Amazon S3, conhecidas como listas de controle de acesso predefinidas (). ACLs Cada ACL pré-configurada tem um conjunto de concessões e permissões que podem ser utilizadas para definir permissões para o bucket do Amazon S3. É possível especificar uma ACL pré-configurada utilizando `cannedAclForObjects` no atributo da string de conexão para o endpoint de destino do S3. Para obter mais informações sobre como utilizar o atributo de conexão adicional `cannedAclForObjects`, consulte [Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring). [Para obter mais informações sobre o Amazon S3 enlatado ACLs, consulte ACL enlatado.](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl)

O perfil do IAM que você utiliza para a migração deve ser capaz de executar a operação da API `s3:PutObjectAcl`.

## Utilizar o Apache Parquet para armazenar objetos do Amazon S3
<a name="CHAP_Target.S3.Parquet"></a>

O formato de valores separados por vírgulas (.csv) é o formato do armazenamento padrão para objetos de destino do Amazon S3. Para obter armazenamento compacto e consultas mais rápidas, é possível utilizar o Apache Parquet (.parquet) como o formato de armazenamento.

O Apache Parquet é um formato de armazenamento de arquivos de código aberto originalmente projetado para o Hadoop. Para obter mais informações sobre o Apache Parquet, consulte [https://parquet.apache.org/](https://parquet.apache.org/).

Para definir o .parquet como o formato de armazenamento para os objetos de destino do S3, é possível utilizar os seguintes mecanismos:
+ Configurações de endpoint que você fornece como parâmetros de um objeto JSON ao criar o endpoint utilizando a AWS CLI ou a API do AWS DMS. Para obter mais informações, consulte [Utilizar criptografia de dados, arquivos de parquet e de CDC no destino do Amazon S3](#CHAP_Target.S3.EndpointSettings).
+ Atributos de conexão adicionais que você fornece como uma lista separada por ponto-e-vírgula ao criar o endpoint. Para obter mais informações, consulte [Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring).

## Marcação de objetos do Amazon S3
<a name="CHAP_Target.S3.Tagging"></a>

É possível marcar objetos do Amazon S3 criados por uma instância de replicação especificando objetos JSON adequados como parte das regras de mapeamento de tarefa-tabela. Para obter mais informações sobre os requisitos e as opções de marcação de objetos do S3, incluindo nomes de tag válidos, consulte [Marcação de objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-tagging.html) no *Guia do usuário do Amazon Simple Storage Service*. Para obter mais informações sobre o mapeamento de tabelas utilizando JSON, consulte [Especificar a seleção de tabelas e as regras de transformação utilizando JSON](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.md).

Você marca objetos do S3 criados para tabelas e esquemas especificados utilizando um ou mais objetos JSON do tipo de regra `selection`. Então, você segue esse objeto (ou objetos) `selection` por um ou mais objetos JSON do tipo de regra `post-processing` com a ação `add-tag`. Essas regras de pós-processamento identificam os objetos do S3 que você deseja marcar e especificar os nomes e valores das tags que você deseja adicionar a esses objetos do S3.

É possível encontrar os parâmetros para especificar em objetos JSON do tipo de regra `post-processing` na tabela a seguir.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.S3.html)

Ao especificar vários tipos de regra `post-processing` para marcar uma seleção de objetos do S3, cada objeto do S3 é marcado utilizando apenas um objeto `tag-set` de uma regra de pós-processamento. O conjunto de tags específico utilizado para marcar um determinado objeto do S3 é aquele da regra de pós-processamento cujo localizador de objeto associado corresponde melhor ao objeto do S3. 

Por exemplo, suponha que duas regras de pós-processamento identificam o mesmo objeto do S3. Suponha também que o localizador de objetos de uma regra use curingas, e que o localizador de objetos de outra regra use uma correspondência exata para identificar o objeto do S3 (sem curingas). Nesse caso, o conjunto de tags associado à regra pós-processamento com a correspondência exata é utilizado para marcar o objeto do S3. Se várias regras de pós-processamento corresponderem a um determinado objeto do S3 igualmente bem, o conjunto de tags associado à primeira regra de pós-processamento será utilizado para marcar o objeto.

**Example Adicionar tags estáticas a um objeto do S3 criado para uma única tabela e esquema**  
As seguintes regras de seleção e pós-processamento adicionam três tags (`tag_1`, `tag_2` e `tag_3` com valores estáticos correspondentes, `value_1`, `value_2` e `value_3`) a um objeto do S3 criado. Esse objeto do S3 corresponde a uma única tabela na origem chamada `STOCK` com um esquema chamado `aat2`.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "5",
            "rule-name": "5",
            "object-locator": {
                "schema-name": "aat2",
                "table-name": "STOCK"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "post-processing",
            "rule-id": "41",
            "rule-name": "41",
            "rule-action": "add-tag",
            "object-locator": {
                "schema-name": "aat2",
                "table-name": "STOCK"
            },
            "tag-set": [
              {
                "key": "tag_1",
                "value": "value_1"
              },
              {
                "key": "tag_2",
                "value": "value_2"
              },
              {
                "key": "tag_3",
                "value": "value_3"
              }                                     
           ]
        }
    ]
}
```

**Example Adicionar tags estáticas e dinâmicas a objetos do S3 criados para várias tabelas e esquemas**  
O exemplo a seguir tem uma seleção e duas regras de pós-processamento, em que a entrada da origem inclui todas as tabelas e todos os seus esquemas.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "%",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "post-processing",
            "rule-id": "21",
            "rule-name": "21",
            "rule-action": "add-tag",
            "object-locator": {
                "schema-name": "%",
                "table-name": "%",
            },
            "tag-set": [
              { 
                "key": "dw-schema-name",
                "value":"${schema-name}"
              },
              {
                "key": "dw-schema-table",
                "value": "my_prefix_${table-name}"
              }
            ]
        },
        {
            "rule-type": "post-processing",
            "rule-id": "41",
            "rule-name": "41",
            "rule-action": "add-tag",
            "object-locator": {
                "schema-name": "aat",
                "table-name": "ITEM",
            },
            "tag-set": [
              {
                "key": "tag_1",
                "value": "value_1"
              },
              {
                "key": "tag_2",
                "value": "value_2"
              }           ]
        }
    ]
}
```
A primeira regra de pós-processamento adiciona duas tags (`dw-schema-name` e `dw-schema-table`) com valores dinâmicos correspondentes (`${schema-name}` e `my_prefix_${table-name}`) a quase todos os objetos do S3 criados no destino. A exceção é o objeto do S3 identificado e marcado com a segunda regra de pós-processamento. Assim, cada objeto de destino do S3 identificado pelo localizador de objetos curinga é criado com tags que identificam o esquema e a tabela à qual ele corresponde na origem.  
A segunda regra de pós-processamento adiciona `tag_1` e `tag_2` com valores estáticos correspondentes `value_1` e `value_2` a um objeto do S3 criado, que é identificado por um localizador de objetos de correspondência exata. Esse objeto do S3 criado, portanto, corresponde à uma única tabela na origem chamada `ITEM` com um esquema chamado `aat`. Devido à correspondência exata, essas tags substituem todas as tags nesse objeto adicionado na primeira regra de pós-processamento, que corresponde a objetos do S3 apenas por meio de curinga.

**Example Adicionar nomes e valores de tags dinâmicas a objetos do S3**  
O exemplo a seguir tem duas regras de seleção e uma regra de pós-processamento. Aqui, a entrada da origem inclui apenas a tabela `ITEM` no esquema `retail` ou `wholesale`.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "retail",
                "table-name": "ITEM"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "wholesale",
                "table-name": "ITEM"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "post-processing",
            "rule-id": "21",
            "rule-name": "21",
            "rule-action": "add-tag",
            "object-locator": {
                "schema-name": "%",
                "table-name": "ITEM",
            },
            "tag-set": [
              { 
                "key": "dw-schema-name",
                "value":"${schema-name}"
              },
              {
                "key": "dw-schema-table",
                "value": "my_prefix_ITEM"
              },
              {
                "key": "${schema-name}_ITEM_tag_1",
                "value": "value_1"
              },
              {
                "key": "${schema-name}_ITEM_tag_2",
                "value": "value_2"
              }
            ]
    ]
}
```
O conjunto de tags da regra de pós-processamento adiciona duas tags (`dw-schema-name` e `dw-schema-table`) para todos os objetos do S3 criados para a tabela `ITEM` no destino. A primeira tag tem o valor dinâmico `"${schema-name}"`, e a segunda tag tem um valor estático, `"my_prefix_ITEM"`. Assim, cada objeto de destino do S3 é criado com tags que identificam o esquema e a tabela à qual ele corresponde na origem.   
Além disso, o conjunto de tags adiciona duas tags adicionais com nomes dinâmicos (`${schema-name}_ITEM_tag_1` e `"${schema-name}_ITEM_tag_2"`). Essas têm valores estáticos correspondentes `value_1` e `value_2`. Portanto, cada uma dessas tags são nomeadas pelo esquema atual, `retail` ou `wholesale`. Não é possível criar um nome de tag dinâmico duplicado nesse objeto, porque cada objeto é criado para um único nome de esquema exclusivo. O nome do esquema é utilizado para criar um nome de tag exclusivo de outra forma.

## Criação de AWS KMS chaves para criptografar objetos de destino do Amazon S3
<a name="CHAP_Target.S3.KMSKeys"></a>

Você pode criar e usar AWS KMS chaves personalizadas para criptografar seus objetos de destino do Amazon S3. Depois de criar uma chave do KMS, é possível utilizá-la para criptografar objetos utilizando uma das seguintes abordagens ao criar o endpoint de destino do S3:
+ Utilize as seguintes opções para objetos de destino do S3 (com o formato de armazenamento de arquivo .csv padrão) ao executar o comando `create-endpoint` utilizando a AWS CLI.

  ```
  --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", 
  "CsvRowDelimiter": "\n", "CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", 
  "BucketName": "your-bucket-name", "EncryptionMode": "SSE_KMS", 
  "ServerSideEncryptionKmsKeyId": "your-KMS-key-ARN"}'
  ```

  Aqui, `your-KMS-key-ARN` é o nome do recurso da Amazon (ARN) da sua chave do KMS. Além disso, seu perfil do IAM deve ter permissões de acesso (consulte [Utilizar criptografia de dados, arquivos de parquet e de CDC no destino do Amazon S3](#CHAP_Target.S3.EndpointSettings)).
+ Defina o atributo de conexão adicional `encryptionMode` como o valor `SSE_KMS`, e o atributo de conexão adicional `serverSideEncryptionKmsKeyId` como o ARN de sua chave do KMS. Para obter mais informações, consulte [Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring).

Para criptografar os objetos de destino do Amazon S3 utilizando uma chave do KMS, você precisa de um perfil do IAM que tenha permissões para acessar o bucket do Amazon S3. Esse perfil do IAM é acessado em uma política (uma política de chaves) anexada à chave de criptografia criada. É possível fazer isso no console do IAM criando o seguinte:
+ Uma política com permissões para acessar o bucket do Amazon S3.
+ Um perfil do IAM com essa política.
+ A chave de criptografia do KMS com uma política de chaves que faz referência a esse perfil.

Os procedimentos a seguir descrevem como fazer isso.

**Para criar uma política do IAM com permissões para acessar o bucket do Amazon S3.**

1. Abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. No painel de navegação, escolha **Policies (Políticas)**. A página **Policies (Políticas)** é aberta.

1. Selecione **Criar política**. A página **Create policy (Criar política)** é aberta.

1. Escolha **Service (Serviço)** e escolha **S3**. Uma lista de permissões de ação é exibida.

1. Escolha **Expand all (Expandir tudo)** para expandir a lista e escolha as seguintes permissões no mínimo:
   + **ListBucket**
   + **PutObject**
   + **DeleteObject**

   Escolha todas as outras permissões necessárias e escolha **Collapse all (Recolher tudo)** para recolher a lista.

1. Escolha **Resouces (Recursos)** para especificar os recursos que você deseja acessar. No mínimo, escolha **Todos os recursos** para fornecer acesso geral aos recursos do Amazon S3.

1. Adicione todas as outras condições ou permissões necessárias e escolha **Review policy (Revisar política)**. Verifique os resultados na página **Review policy (Revisar política)**.

1. Se as configurações forem o que você precisa, insira um nome para a política (por exemplo, `DMS-S3-endpoint-access`), e qualquer descrição adicional e escolha **Criar política**. A página **Policies (Políticas)** é aberta com uma mensagem indicando que sua política foi criada.

1. Pesquise e escolha o nome da política na lista **Policies (Políticas)**. A página **Summary (Resumo)** é aberta exibindo o JSON da política, semelhante ao seguinte.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject",
                   "s3:ListBucket",
                   "s3:DeleteObject"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

Agora, você criou a política para acessar os recursos do Amazon S3 para a criptografia com um nome específico, por exemplo `DMS-S3-endpoint-access`.

**Como criar um perfil do IAM com essa política**

1. No console do IAM, escolha **Perfis** no painel de navegação. A página de detalhes de **Perfis** é aberta.

1. Selecione **Criar perfil**. A página **Create role (Criar função)** é aberta.

1. Com o AWS serviço selecionado como a entidade confiável, escolha **DMS** como o serviço para usar a função do IAM.

1. Escolha **Próximo: Permissões**. A visualização **Attach permissions policies (Anexar políticas de permissões)** é exibida na página **Create role (Criar função)**.

1. Encontre e selecione a política do IAM para o perfil do IAM criado no procedimento anterior (`DMS-S3-endpoint-access`).

1. Escolha **Próximo: tags**. A visualização **Add tags (Adicionar tags)** é exibida na página **Create role (Criar função)**. Aqui, você pode adicionar todas as tags desejadas.

1. Escolha **Próximo: revisar**. A visualização **Review (Revisão)** é exibida na página **Create role (Criar função)**. Aqui, é possível verificar os resultados.

1. Se as configurações forem o que você precisa, insira um nome para o perfil (obrigatório, por exemplo, `DMS-S3-endpoint-access-role`), e qualquer descrição adicional e escolha **Criar função**. A página de detalhes **Funções** é aberta com uma mensagem indicando que o perfil foi criado.

Agora, você criou o perfil para acessar os recursos do Amazon S3 para criptografia com um nome especificado, por exemplo, `DMS-S3-endpoint-access-role`.

**Como criar uma chave de criptografia do KMS com uma política de chave que faz referência ao perfil do IAM**
**nota**  
Para obter mais informações sobre como AWS DMS funciona com chaves de AWS KMS criptografia, consulte[Configurando uma chave de criptografia e especificando permissões AWS KMS](CHAP_Security.md#CHAP_Security.EncryptionKey).

1. Faça login no console Console de gerenciamento da AWS e abra o AWS Key Management Service (AWS KMS) em [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms).

1. Para alterar o Região da AWS, use o seletor de região no canto superior direito da página.

1. No painel de navegação, escolha **Chaves gerenciadas pelo cliente**.

1. Escolha **Criar chave**. A página **Configure key (Configurar chave)** é aberta.

1. Para **Key type (Tipo de chave)**, escolha **Symmetric (Simétrica)**.
**nota**  
Ao criar essa chave, você só pode criar uma chave simétrica, porque todos os AWS serviços, como o Amazon S3, só funcionam com chaves de criptografia simétricas.

1. Escolha **Opções avançadas**. Para **Key material origin (Origem do material da chave)**, certifique-se de que o **KMS** está escolhido e escolha **Next (Próximo)**. A página **Add labels (Adicionar rótulos)** é aberta.

1. Em **Create alias and description (Criar alias e descrição)**, insira um alias para a chave (por exemplo, `DMS-S3-endpoint-encryption-key`) e qualquer descrição adicional.

1. Em **Tags**, adicione todas as tags desejadas para ajudar a identificar a chave e controlar seu uso e escolha **Next (Próximo)**. A página **Define key administrative permissions (Definir permissões administrativas de chaves)** é aberta mostrando uma lista de usuários e funções que podem ser escolhidos.

1. Adicione os usuários e as funções desejados para gerenciar a chave. Certifique-se de que esses usuários e funções tenham as permissões necessárias para gerenciar a chave. 

1. Em **Key deletion (Exclusão de chaves)**, escolha se os administradores de chaves podem excluir a chave e escolha **Next (Próximo)**. A página **Define key usage permissions (Definir permissões de uso de chaves)** é aberta mostrando uma lista adicional de usuários e funções que podem ser escolhidos.

1. Para **Esta conta**, escolha os usuários disponíveis que você deseja que executem operações criptográficas em destinos do Amazon S3. Escolha também o perfil criado anteriormente em **Perfis** para ativar o acesso à criptografia dos objetos de destino do Amazon S3, por exemplo, `DMS-S3-endpoint-access-role`).

1. Se você quiser adicionar outras contas não listadas para ter esse mesmo acesso, em **Outras AWS contas**, escolha **Adicionar outra AWS conta** e escolha **Avançar**. A página **Review and edit key policy (Rever e editar política de chave)** é aberta mostrando o JSON da política de chave que você pode revisar e editar digitando no JSON existente. Aqui, a política de chave que faz referência à função e aos usuários é mostrada (por exemplo, `Admin` e `User1`) que você escolheu na etapa anterior. Também é possível ver as diferentes ações de chaves permitidas para as várias entidades principais (usuários e perfis), conforme mostrado no exemplo a seguir.

------
#### [ JSON ]

****  

   ```
   {
       "Id": "key-consolepolicy-3",
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Enable IAM User Permissions",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:root"
                   ]
               },
               "Action": "kms:*",
               "Resource": "*"
           },
           {
               "Sid": "Allow access for Key Administrators",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:role/Admin"
                   ]
               },
               "Action": [
                   "kms:Create*",
                   "kms:Describe*",
                   "kms:Enable*",
                   "kms:List*",
                   "kms:Put*",
                   "kms:Update*",
                   "kms:Revoke*",
                   "kms:Disable*",
                   "kms:Get*",
                   "kms:Delete*",
                   "kms:TagResource",
                   "kms:UntagResource",
                   "kms:ScheduleKeyDeletion",
                   "kms:CancelKeyDeletion"
               ],
               "Resource": "*"
           },
           {
               "Sid": "Allow use of the key",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:role/DMS-S3-endpoint-access-role",
                       "arn:aws:iam::111122223333:role/Admin",
                       "arn:aws:iam::111122223333:role/User1"
                   ]
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:ReEncrypt*",
                   "kms:GenerateDataKey*",
                   "kms:DescribeKey"
               ],
               "Resource": "*"
           },
           {
               "Sid": "Allow attachment of persistent resources",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:role/DMS-S3-endpoint-access-role",
                       "arn:aws:iam::111122223333:role/Admin",
                       "arn:aws:iam::111122223333:role/User1"
                   ]
               },
               "Action": [
                   "kms:CreateGrant",
                   "kms:ListGrants",
                   "kms:RevokeGrant"
               ],
               "Resource": "*",
               "Condition": {
                   "Bool": {
                       "kms:GrantIsForAWSResource": true
                   }
               }
           }
       ]
   }
   ```

------

1. Escolha **Terminar**. A página **Chaves de criptografia** é aberta com uma mensagem indicando que a chave do KMS foi criada.

Agora, você criou uma nova chave do KMS com um alias especificado (por exemplo, `DMS-S3-endpoint-encryption-key`). Essa chave permite AWS DMS criptografar objetos de destino do Amazon S3.

## Utilizar o particionamento de pastas com base em data
<a name="CHAP_Target.S3.DatePartitioning"></a>

AWS DMS suporta partições de pastas do S3 com base na data de confirmação da transação quando você usa o Amazon S3 como seu endpoint de destino. Utilizando o particionamento de pastas com base em data, é possível gravar dados de uma única tabela de origem em uma estrutura de pastas com hierarquia temporal em um bucket do S3. Ao particionar pastas ao criar um endpoint de destino do S3, é possível fazer o seguinte:
+ Gerenciar melhor os objetos do S3
+ Limitar o tamanho de cada pasta do S3
+ Otimizar consultas de data lake ou outras operações subsequentes

É possível ativar o particionamento de pastas com base em data ao criar um endpoint de destino do S3. É possível ativá-lo ao migrar dados existentes e ao replicar alterações em andamento (carga máxima \$1 CDC) ou replicar somente alterações de dados (somente CDC). Ao migrar dados existentes e replicar alterações contínuas, somente as alterações contínuas serão particionadas. Utilize as seguintes configurações de endpoint de destino:
+ `DatePartitionEnabled`: especifica o particionamento com base em datas. Defina esta opção Boolean como `true` para particionar pastas de bucket do S3 com base nas datas de confirmação da transação. 

  Não é possível utilizar essa configuração com `PreserveTransactions` ou `CdcPath`.

  O valor padrão é `false`. 
+ `DatePartitionSequence`: identifica a sequência do formato de data a ser utilizado durante o particionamento de pastas. Defina esta opção ENUM como `YYYYMMDD`, `YYYYMMDDHH`, `YYYYMM`, `MMYYYYDD` ou `DDMMYYYY`. O valor padrão é `YYYYMMDD`. Utilize essa configuração quando `DatePartitionEnabled` estiver definido como `true.`.
+ `DatePartitionDelimiter`: especifica um delimitador de separação de datas a ser utilizado durante o particionamento de pastas. Defina esta opção ENUM como `SLASH`, `DASH`, `UNDERSCORE` ou `NONE`. O valor padrão é `SLASH`. Utilize essa configuração quando `DatePartitionEnabled` estiver definido como `true`.
+ `DatePartitionTimezone`: ao criar um endpoint de destino do S3, defina `DatePartitionTimezone` para converter a hora UTC atual em um fuso horário especificado. A conversão ocorre quando uma pasta de partição de data é criada e um nome de CDC é gerado. O formato do fuso horário é Área/Localização. Use esse parâmetro quando `DatePartitionedEnabled` for definido como `true`, conforme mostrado no seguinte exemplo:

  ```
  s3-settings='{"DatePartitionEnabled": true, "DatePartitionSequence": "YYYYMMDDHH", "DatePartitionDelimiter": "SLASH", "DatePartitionTimezone":"Asia/Seoul", "BucketName": "dms-nattarat-test"}'
  ```

O exemplo a seguir mostra como ativar o particionamento de pastas com base em data, com valores padrão para a sequência e o delimitador da partição de dados. Ele usa a `--s3-settings '{json-settings}'` opção do AWS CLI. `create-endpoint`comando. 

```
   --s3-settings '{"DatePartitionEnabled": true,"DatePartitionSequence": "YYYYMMDD","DatePartitionDelimiter": "SLASH"}'
```

## Carga paralela de fontes particionadas ao usar o Amazon S3 como destino para AWS DMS
<a name="CHAP_Target.S3.ParallelLoad"></a>

É possível configurar uma carga máxima paralela de fontes de dados particionadas para destinos do Amazon S3. Essa abordagem melhora os tempos de carga da migração de dados particionados nos mecanismos de banco de dados de origem compatíveis para o destino do S3. Para melhorar os tempos de carga dos dados de origem particionados, crie subpastas de destino do S3 mapeadas para as partições de cada tabela no banco de dados de origem. Essas subpastas vinculadas à partição permitem AWS DMS executar processos paralelos para preencher cada subpasta no destino.

Para configurar uma carga máxima paralela de um destino do S3, o S3 é compatível com os três tipos de regra `parallel-load` para a regra `table-settings` de mapeamento de tabela:
+ `partitions-auto`
+ `partitions-list`
+ `ranges`

Para obter mais informações sobre esses tipos de regra de carga paralela, consulte [Regras e operações de configurações de tabelas e coleções](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md).

Para os tipos de regra `partitions-auto` e `partitions-list`, o AWS DMS utiliza o nome de cada partição do endpoint de origem para identificar a estrutura da subpasta de destino, da seguinte forma.

```
bucket_name/bucket_folder/database_schema_name/table_name/partition_name/LOADseq_num.csv
```

Aqui, o caminho da subpasta em que os dados são migrados e armazenados no destino do S3 inclui uma subpasta `partition_name` adicional que corresponde a uma partição de origem com o mesmo nome. Essa subpasta `partition_name` armazena um ou mais arquivos `LOADseq_num.csv` contendo os dados migrados da partição de origem especificada. Aqui, `seq_num` é o sufixo do número de sequência no nome do arquivo .csv, como `00000001` no arquivo .csv com o nome `LOAD00000001.csv`.

No entanto, alguns mecanismos de banco de dados, como MongoDB e o DocumentDB, não têm o conceito de partições. Para esses mecanismos de banco de dados, AWS DMS adiciona o índice do segmento de origem em execução como um prefixo ao nome do arquivo.csv de destino, da seguinte maneira.

```
.../database_schema_name/table_name/SEGMENT1_LOAD00000001.csv
.../database_schema_name/table_name/SEGMENT1_LOAD00000002.csv
...
.../database_schema_name/table_name/SEGMENT2_LOAD00000009.csv
.../database_schema_name/table_name/SEGMENT3_LOAD0000000A.csv
```

Aqui, os arquivos `SEGMENT1_LOAD00000001.csv` e `SEGMENT1_LOAD00000002.csv` são nomeados com o mesmo prefixo de índice do segmento de origem em execução, `SEGMENT1`. Eles são nomeados assim porque os dados de origem migrados para esses dois arquivos .csv estão associados ao mesmo índice de segmento de origem em execução. Por outro lado, os dados migrados armazenados em cada um dos arquivos `SEGMENT2_LOAD00000009.csv` e `SEGMENT3_LOAD0000000A.csv` de destino estão associados a diferentes índices de segmentos de origem em execução. Cada arquivo tem seu nome prefixado com o nome de seu índice de segmento em execução, `SEGMENT2` e `SEGMENT3`.

Para o tipo de carga paralela `ranges`, defina os nomes e valores das colunas utilizando as configurações `columns` e `boundaries` das regras `table-settings`. Com essas regras, é possível especificar partições correspondentes aos nomes dos segmentos, da seguinte maneira.

```
"parallel-load": {
    "type": "ranges",
    "columns": [
         "region",
         "sale"
    ],
    "boundaries": [
          [
               "NORTH",
               "1000"
          ],
          [
               "WEST",
               "3000"
          ]
    ],
    "segment-names": [
          "custom_segment1",
          "custom_segment2",
          "custom_segment3"
    ]
}
```

Aqui, a configuração de `segment-names` define nomes de três partições para migrar dados em paralelo no destino do S3. Os dados migrados são carregados paralelamente e armazenados em arquivos .csv nas subpastas da partição em ordem, da seguinte maneira.

```
.../database_schema_name/table_name/custom_segment1/LOAD[00000001...].csv
.../database_schema_name/table_name/custom_segment2/LOAD[00000001...].csv
.../database_schema_name/table_name/custom_segment3/LOAD[00000001...].csv
```

Aqui, AWS DMS armazena uma série de arquivos.csv em cada uma das três subpastas de partição. A série de arquivos .csv em cada subpasta de partição é nomeada de forma incremental, começando com `LOAD00000001.csv` até que todos os dados sejam migrados.

Em alguns casos, é possível não nomear explicitamente as subpastas de partição para um tipo de carga paralela `ranges` utilizando a configuração `segment-names`. Nesse caso, AWS DMS aplica o padrão de criação de cada série de arquivos.csv em sua `table_name` subpasta. Aqui, o AWS DMS prefixa os nomes dos arquivos de cada série de arquivos .csv com o nome do índice do segmento de origem em execução, da seguinte forma.

```
.../database_schema_name/table_name/SEGMENT1_LOAD[00000001...].csv
.../database_schema_name/table_name/SEGMENT2_LOAD[00000001...].csv
.../database_schema_name/table_name/SEGMENT3_LOAD[00000001...].csv
...
.../database_schema_name/table_name/SEGMENTZ_LOAD[00000001...].csv
```

## Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS
<a name="CHAP_Target.S3.Configuring"></a>

É possível utilizar as configurações de endpoint para configurar o banco de dados de destino do Amazon S3 de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--s3-settings '{"EndpointSetting": "value", ...}'` JSON.

**nota**  
O DMS grava alterações em arquivos Parquet com base na ordem de confirmação do banco de dados de origem, mas, ao migrar várias tabelas, a ordem da transação original não é preservada devido ao particionamento em nível de tabela. Para manter as informações de sequência da transação, defina a configuração de endpoint `TimestampColumnName` para incluir o carimbo de data/hora de confirmação de origem para cada linha, que você pode usar no processamento posterior para reconstruir a sequência da transação original. Ao contrário do formato CSV, que oferece a configuração `PreserveTransactions`, os arquivos Parquet lidam com as transações de forma diferente devido à respectiva estrutura de armazenamento em colunas, mas essa abordagem permite o rastreamento preciso dos tempos de confirmação da origem, possibilita reconstruir a ordem de transação pós-migração e permite o processamento eficiente dos dados, mantendo a consistência de dados.

A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o Amazon S3 como destino.


| **Opção** | **Descrição** | 
| --- | --- | 
| CsvNullValue |  Um parâmetro opcional que especifica como AWS DMS trata valores nulos. Ao tratar o valor nulo, é possível utilizar esse parâmetro para passar uma string definida pelo usuário como nula ao gravar no destino. Por exemplo, quando as colunas de destino forem anuláveis, é possível utilizar essa opção para diferenciar entre o valor de string vazia e o valor nulo.  Valor padrão: `""` Valores válidos: qualquer string válida. Exemplo: `--s3-settings '{"CsvNullValue": "NULL"}'` Se o valor da coluna do banco de dados de origem for nulo, no arquivo CSV do S3, o valor da coluna será `NULL` em vez da string “”.  | 
| AddColumnName |  Um parâmetro opcional que, quando definido como `true` ou `y`, pode ser utilizado para adicionar informações de nome de coluna ao arquivo .csv de saída. Não é possível utilizar esse parâmetro com `PreserveTransactions` ou `CdcPath`. Valor padrão: `false` Valores válidos: `true`, `false`, `y`, `n` Exemplo: `--s3-settings '{"AddColumnName": true}'`  | 
| AddTrailingPaddingCharacter |  Utilize a configuração `AddTrailingPaddingCharacter` do endpoint de destino do S3 para adicionar preenchimento aos dados da string. O valor padrão é `false`. Tipo: booliano Exemplo: `--s3-settings '{"AddTrailingPaddingCharacter": true}'`  | 
| BucketFolder |  Um parâmetro opcional para definir um nome de pasta no bucket do S3. Se fornecidos, os objetos de destino serão criados como arquivos .csv ou .parquet no caminho `BucketFolder/schema_name/table_name/`. Se esse parâmetro não for especificado, o caminho utilizado será `schema_name/table_name/`.  Exemplo: `--s3-settings '{"BucketFolder": "testFolder"}'`  | 
| BucketName |  O nome do bucket do S3 no qual os objetos de destino do S3 são criados como arquivos .csv ou .parquet. Exemplo: `--s3-settings '{"BucketName": "buckettest"}'`  | 
| CannedAclForObjects |  Um valor que AWS DMS permite especificar uma lista de controle de acesso predefinida (padrão) para objetos criados no bucket do S3 como arquivos.csv ou .parquet. *Para obter mais informações sobre o Amazon S3 canned ACLs, consulte [Canned ACL no Amazon S3 Developer](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl) Guide.* Valor padrão: NONE Os valores válidos para esse atributo são: NONE; PRIVATE; PUBLIC\$1READ; PUBLIC\$1READ\$1WRITE; AUTHENTICATED\$1READ; \$1READ; BUCKET\$1OWNER\$1READ; BUCKET\$1OWNER\$1FULL\$1CONTROL. AWS\$1EXEC Exemplo: `--s3-settings '{"CannedAclForObjects": "PUBLIC_READ"}'`  | 
| CdcInsertsOnly |  Um parâmetro opcional durante um carga de captura de dados de alteração (CDC) para gravar apenas operações INSERT nos arquivos de saída de valores separados por vírgulas (.csv) ou de armazenamento colunar (.parquet). Por padrão (a configuração `false`), o primeiro campo em um registro .csv ou .parquet contém a letra I (INSERT), U (UPDATE) ou D (DELETE). Esta carta indica se a linha foi inserida, atualizada ou excluída no banco de dados de origem para um carregamento CDC no destino. Se `cdcInsertsOnly` estiver definido como `true` ou`y`, somente INSERTs do banco de dados de origem serão migrados para o arquivo.csv ou .parquet. Somente no caso do formato .csv, a maneira como esses INSERTS são registrados depende do valor `IncludeOpForFullLoad`. Se `IncludeOpForFullLoad` estiver definido como `true`, o primeiro campo de cada registro CDC será definido como I para indicar a operação INSERT na origem. Se `IncludeOpForFullLoad` estiver definido como `false`, os registros CDC serão gravados sem um primeiro campo indicando a operação INSERT na origem. Para obter mais informações sobre como esses parâmetros funcionam juntos, consulte [Indicar operações de banco de dados de origem em dados migrados do S3](#CHAP_Target.S3.Configuring.InsertOps). Valor padrão: `false` Valores válidos: `true`, `false`, `y`, `n` Exemplo: `--s3-settings '{"CdcInsertsOnly": true}'`  | 
| CdcInsertsAndUpdates |  Habilita uma carga de captura de dados de alteração (CDC) para gravar operações INSERT e UPDATE em arquivos de saída .csv ou .parquet (armazenamento colunar). A configuração padrão é`false`, mas quando `cdcInsertsAndUpdates` é definido como `true` ou`y`, INSERTs e UPDATEs do banco de dados de origem são migrados para o arquivo.csv ou .parquet.  Somente para o formato de arquivo.csv, a forma como esses INSERTs e UPDATEs são gravados depende do valor do `includeOpForFullLoad` parâmetro. Se `includeOpForFullLoad` estiver definido como `true`, o primeiro campo de cada registro CDC será definido como `I` ou `U` para indicar operações INSERT e UPDATE na origem. Mas se `includeOpForFullLoad` for definido como `false`, os registros CDC serão gravados sem uma indicação de operações INSERT ou UPDATE na origem.   Para obter mais informações sobre como esses parâmetros funcionam juntos, consulte [Indicar operações de banco de dados de origem em dados migrados do S3](#CHAP_Target.S3.Configuring.InsertOps).  `CdcInsertsOnly` e `cdcInsertsAndUpdates` não podem ambos serem definidos como true para o mesmo endpoint. Defina `cdcInsertsOnly` ou `cdcInsertsAndUpdates` `true` para o mesmo endpoint, mas não os dois.   Valor padrão: `false` Valores válidos: `true`, `false`, `y`, `n` Exemplo: `--s3-settings '{"CdcInsertsAndUpdates": true}'`  | 
|  `CdcPath`  |  Especifica o caminho da pasta dos arquivos CDC. Para uma origem do S3, essa configuração é necessária se uma tarefa captura os dados de alterações; caso contrário, ela é opcional. Se `CdcPath` estiver definido, o DMS lerá os arquivos da CDC nesse caminho e replicará as alterações de dados no endpoint de destino. Para um destino do S3, se você definir `PreserveTransactions` como verdadeiro, o DMS verificará se você definiu esse parâmetro para um caminho de pasta no destino do S3, em que o DMS pode salvar a ordem das transações na carga da CDC. O DMS cria esse caminho de pasta CDC no diretório de trabalho de destino do S3 ou no local de destino do S3 especificado por `BucketFolder` e `BucketName`. Não é possível utilizar esse parâmetro com `DatePartitionEnabled` ou `AddColumnName`. Tipo: string Por exemplo, se você especificar `CdcPath` como `MyChangedData` e especificar `BucketName` como `MyTargetBucket`, mas não especificar `BucketFolder`, o DMS criará o seguinte caminho da pasta CDC: `MyTargetBucket/MyChangedData`.  Se você especificar o mesmo `CdcPath` e especificar `BucketName` como `MyTargetBucket` e `BucketFolder` como `MyTargetData`, o DMS criará o seguinte caminho da pasta CDC: `MyTargetBucket/MyTargetData/MyChangedData`. Essa configuração é suportada nas AWS DMS versões 3.4.2 e superiores. Ao capturar alterações de dados na ordem da transação, o DMS sempre armazena as alterações de linha em arquivos.csv, independentemente do valor da configuração do DataFormat S3 no destino.   | 
|  `CdcMaxBatchInterval`  |  Condição de tamanho máximo do intervalo, definido em segundos, para a saída de um arquivo para o Amazon S3. Valor padrão: 60 segundos Quando `CdcMaxBatchInterval` e `CdcMinFileSize` forem especificados, a gravação do arquivo será acionada por qualquer condição de parâmetro que seja atendida primeiro.  A partir da AWS DMS versão 3.5.3, ao usar o PostgreSQL ou o Aurora PostgreSQL como origem e o Amazon S3 com o Parquet como destino, a frequência das atualizações depende da quantidade de dados que o endpoint de destino está configurado para reter `confirmed_flush_lsn` na memória. AWS DMS envia o de `confirmed_flush_lsn` volta para a fonte somente depois que os dados na memória são gravados no Amazon S3. Se você configurar o parâmetro `CdcMaxBatchInterval` com um valor maior, poderá observar um aumento no uso do slot de replicação no banco de dados de origem.   | 
|  `CdcMinFileSize`  |  Condição de tamanho mínimo do arquivo, definido em kilobytes, para a saída de um arquivo para o Amazon S3. Valor padrão: 32000 KB Quando `CdcMinFileSize` e `CdcMaxBatchInterval` forem especificados, a gravação do arquivo será acionada por qualquer condição de parâmetro que seja atendida primeiro.  | 
|  `PreserveTransactions`  |  Se definido como `true`, o DMS salvará a ordem da transação para a captura de dados de alteração (CDC) no destino do Amazon S3 especificado por `CdcPath`. Não é possível utilizar esse parâmetro com `DatePartitionEnabled` ou `AddColumnName`. Tipo: booliano Ao capturar alterações de dados na ordem da transação, o DMS sempre armazena as alterações de linha em arquivos.csv, independentemente do valor da configuração do DataFormat S3 no destino. Essa configuração é suportada nas AWS DMS versões 3.4.2 e superiores.   | 
| IncludeOpForFullLoad |  Um parâmetro opcional durante um carga máxima para gravar operações INSERT só nos arquivos de saída de valores separados por vírgulas (.csv). Em cargas máximas, os registros só podem ser inseridos. Por padrão (a configuração `false`), não há informações gravadas nesses arquivos de saída para um carga máxima indicando que as linhas foram inseridas no banco de dados de origem. Se `IncludeOpForFullLoad` estiver definido como `true` ou `y`, INSERT será registrado utilizando a letra I no primeiro campo do arquivo .csv.  Esse parâmetro funciona em conjunto com `CdcInsertsOnly` ou `CdcInsertsAndUpdates` somente para arquivos .csv de saída. Para obter mais informações sobre como esses parâmetros funcionam juntos, consulte [Indicar operações de banco de dados de origem em dados migrados do S3](#CHAP_Target.S3.Configuring.InsertOps).  Valor padrão: `false` Valores válidos: `true`, `false`, `y`, `n` Exemplo: `--s3-settings '{"IncludeOpForFullLoad": true}'`  | 
| CompressionType |  Um parâmetro opcional ao definir como `GZIP` utiliza o GZIP para compactar os arquivos .csv ou .parquet de destino. Quando esse parâmetro é definido como o padrão, ele deixa os arquivos descompactados. Valor padrão: `NONE` Valores válidos: `GZIP` ou `NONE` Exemplo: `--s3-settings '{"CompressionType": "GZIP"}'`  | 
| CsvDelimiter |  O delimitador utilizado para separar colunas nos arquivos .csv de origem. O padrão é uma vírgula (,). Exemplo: `--s3-settings '{"CsvDelimiter": ","}'`  | 
| CsvRowDelimiter |  O delimitador utilizado para separar linhas nos arquivos .csv de origem. O padrão é uma nova linha (\$1n). Exemplo: `--s3-settings '{"CsvRowDelimiter": "\n"}'`  | 
|   `MaxFileSize`   |  Um valor que especifica o tamanho máximo (em KB) de qualquer arquivo .csv a ser criado ao migrar para um destino do S3 durante a carga máxima. Valor padrão: 1.048.576 KB (1 GB) Valores válidos: 1 a 1.048.576 Exemplo: `--s3-settings '{"MaxFileSize": 512}'`  | 
| Rfc4180 |  Um parâmetro opcional utilizado para definir o comportamento com o propósito de determinar a conformidade com RFC para os dados migrados para o Amazon S3 utilizando somente o formato de arquivo .csv. Quando esse valor é definido como `true` ou `y` usando o Amazon S3 como destino, se os dados tiverem aspas, vírgulas ou caracteres de nova linha, AWS DMS inclua a coluna inteira com um par adicional de aspas duplas (“). Cada aspa dentro dos dados é repetida duas vezes. Essa formatação está em conformidade com RFC 4180. Valor padrão: `true` Valores válidos: `true`, `false`, `y`, `n` Exemplo: `--s3-settings '{"Rfc4180": false}'`  | 
| EncryptionMode |  O modo de criptografia do lado do servidor que você deseja utilizar para criptografar os arquivos de objetos .csv ou .parquet copiados no S3. Os valores válidos são `SSE_S3` (criptografia no lado do servidor do S3) ou `SSE_KMS` (criptografia da chave do KMS). Se você escolher `SSE_KMS`, defina o parâmetro `ServerSideEncryptionKmsKeyId` como o Nome do recurso da Amazon (ARN) para a chave do KMS a ser usada para a criptografia.  Também é possível utilizar o comando `modify-endpoint` da CLI para alterar o valor do atributo `EncryptionMode` de um endpoint existente de `SSE_KMS` para `SSE_S3`. Mas não é possível alterar o valor de `EncryptionMode` de `SSE_S3` para `SSE_KMS`.  Valor padrão: `SSE_S3` Valores válidos: `SSE_S3` ou `SSE_KMS` Exemplo: `--s3-settings '{"EncryptionMode": SSE_S3}'`  | 
| ServerSideEncryptionKmsKeyId |  Se você definir `EncryptionMode` como `SSE_KMS`, defina esse parâmetro como o nome do recurso da Amazon (ARN) da chave do KMS. Você pode encontrar esse ARN selecionando o alias da chave na lista de AWS KMS chaves criadas para sua conta. Ao criar a chave, você deve associar políticas e perfis específicos associadas a essa chave do KMS. Para obter mais informações, consulte [Criação de AWS KMS chaves para criptografar objetos de destino do Amazon S3](#CHAP_Target.S3.KMSKeys). Exemplo: `--s3-settings '{"ServerSideEncryptionKmsKeyId":"arn:aws:kms:us-east-1:111122223333:key/11a1a1a1-aaaa-9999-abab-2bbbbbb222a2"}'`  | 
| DataFormat |  O formato de saída dos arquivos AWS DMS usados para criar objetos do S3. Para destinos do Amazon S3, AWS DMS oferece suporte a arquivos.csv ou .parquet. Os arquivos .parquet têm um formato de armazenamento colunar binário com opções de compactação eficientes e desempenho de consulta mais rápido. Para obter mais informações sobre os arquivos .parquet, consulte [https://parquet.apache.org/](https://parquet.apache.org/). Valor padrão: `csv` Valores válidos: `csv` ou `parquet` Exemplo: `--s3-settings '{"DataFormat": "parquet"}'`  | 
| EncodingType |  O tipo de codificação Parquet. As opções do tipo de compactação incluem as seguintes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.S3.html) Valor padrão: `rle-dictionary` Valores válidos: `rle-dictionary`, `plain` ou `plain-dictionary` Exemplo: `--s3-settings '{"EncodingType": "plain-dictionary"}'`  | 
| DictPageSizeLimit |  O tamanho máximo permitido, em bytes, para uma página de dicionário em um arquivo .parquet. Se uma página de dicionário exceder esse valor, a página usará a codificação simples. Valor padrão: 1.024.000 (1 MB) Valores válidos: qualquer valor inteiro válido Exemplo: `--s3-settings '{"DictPageSizeLimit": 2,048,000}'`  | 
| RowGroupLength |  O número de linhas em um grupo de linhas de um arquivo .parquet. Valor padrão: 10.024 (10 KB) Valores válidos: qualquer número inteiro válido Exemplo: `--s3-settings '{"RowGroupLength": 20,048}'`  | 
| DataPageSize |  O tamanho máximo permitido, em bytes, para uma página de dados em um arquivo .parquet. Valor padrão: 1.024.000 (1 MB) Valores válidos: qualquer número inteiro válido Exemplo: `--s3-settings '{"DataPageSize": 2,048,000}'`  | 
| ParquetVersion |  A versão do formato do arquivo .parquet. Valor padrão: `PARQUET_1_0` Valores válidos: `PARQUET_1_0` ou `PARQUET_2_0` Exemplo: `--s3-settings '{"ParquetVersion": "PARQUET_2_0"}'`  | 
| EnableStatistics |  Defina como `true` ou `y` para ativar as estatísticas sobre páginas e grupos de linhas do arquivo .parquet. Valor padrão: `true` Valores válidos: `true`, `false`, `y`, `n` Exemplo: `--s3-settings '{"EnableStatistics": false}'`  | 
| TimestampColumnName |  Um parâmetro opcional para incluir uma coluna de timestamp nos dados de endpoint de destino do S3. AWS DMS inclui uma `STRING` coluna adicional nos arquivos de objeto .csv ou .parquet dos dados migrados quando você define `TimestampColumnName` um valor que não esteja em branco. Em uma carga completa, cada linha da coluna de timestamp contém um timestamp para quando os dados foram transferidos da origem para o destino pelo DMS.  Em um carregamento de CDC, cada linha da coluna de timestamp contém o timestamp da confirmação da linha no banco de dados de origem. O formato de string para esse valor de coluna de timestamp é `yyyy-MM-dd HH:mm:ss.SSSSSS`. Por padrão, a precisão desse valor é em microssegundos. Para uma carga de CDC, o arredondamento da precisão depende do carimbo de data e hora de confirmação compatível com o DMS para o banco de dados de origem. Quando o parâmetro `AddColumnName` for definido como `true`, o DMS também inclui o nome da coluna de timestamp definida como o valor não vazio de `TimestampColumnName`. Exemplo: `--s3-settings '{"TimestampColumnName": "TIMESTAMP"}'`  | 
| UseTaskStartTimeForFullLoadTimestamp |  Quando definido como `true`, esse parâmetro utiliza a hora de início da tarefa como o valor da coluna de timestamp em vez da hora em que os dados são gravados no destino. Para carga completa, quando o `UseTaskStartTimeForFullLoadTimestamp` for definido como `true`, cada linha da coluna de carimbo de data/hora mostrará a hora de início da tarefa. Para cargas de CDC, cada linha da coluna de data e hora contém o tempo de confirmação da transação. Quando `UseTaskStartTimeForFullLoadTimestamp` está definido como `false`, o timestamp da carga máxima na coluna de timestamp é incrementado com data e hora em que os dados chegam ao destino. Valor padrão: `false` Valores válidos: `true`, `false` Exemplo: `--s3-settings '{"UseTaskStartTimeForFullLoadTimestamp": true}'` `UseTaskStartTimeForFullLoadTimestamp: true` ajuda a tornar `TimestampColumnName` do destino do S3 de uma carga máxima classificável com `TimestampColumnName` para uma carga de CDC.  | 
| ParquetTimestampInMillisecond |  Um parâmetro opcional que especifica a precisão de qualquer valor de coluna `TIMESTAMP` gravado em um arquivo de objeto do S3 no formato .parquet. Quando esse atributo é definido como `true` ou`y`, AWS DMS grava todas as `TIMESTAMP` colunas em um arquivo formatado.parquet com precisão de milissegundos. Caso contrário, o DMS grava com precisão de microssegundos. Atualmente, Amazon Athena e AWS Glue pode lidar com precisão de apenas milissegundos para `TIMESTAMP` valores. Defina esse atributo como verdadeiro para arquivos de objeto do endpoint do S3 formatados como .parquet somente se quiser consultar ou processar os dados com o Athena ou o AWS Glue.    AWS DMS grava qualquer valor de `TIMESTAMP` coluna gravado em um arquivo S3 no formato.csv com precisão de microssegundos.   A configuração desse atributo não tem efeito sobre o formato da string do valor da coluna de timestamp inserido definindo o atributo `TimestampColumnName`.    Valor padrão: `false` Valores válidos: `true`, `false`, `y`, `n` Exemplo: `--s3-settings '{"ParquetTimestampInMillisecond": true}'`  | 
| GlueCatalogGeneration |  Para gerar um AWS Glue Data Catalog, defina essa configuração de endpoint como. `true` Valor padrão: `false` Valores válidos: `true`, `false`. Exemplo: `--s3-settings '{"GlueCatalogGeneration": true}'` **Observação:** não utilize `GlueCatalogGeneration` com `PreserveTransactions` e `CdcPath`.  | 

## Usando AWS Glue Data Catalog com um destino do Amazon S3 para AWS DMS
<a name="CHAP_Target.S3.GlueCatalog"></a>

AWS Glue é um serviço que fornece maneiras simples de categorizar dados e consiste em um repositório de metadados conhecido como. AWS Glue Data Catalog Você pode se integrar AWS Glue Data Catalog ao seu endpoint de destino do Amazon S3 e consultar dados do Amazon S3 por meio de outros serviços, AWS como o Amazon Athena. O Amazon Redshift funciona com AWS DMS isso AWS Glue , mas não oferece suporte a isso como uma opção pré-criada. 

Para gerar o catálogo de dados, defina a configuração do `GlueCatalogGeneration` endpoint como`true`, conforme mostrado no AWS CLI exemplo a seguir.

```
aws dms create-endpoint --endpoint-identifier s3-target-endpoint 
            --engine-name s3 --endpoint-type target--s3-settings '{"ServiceAccessRoleArn": 
            "your-service-access-ARN", "BucketFolder": "your-bucket-folder", "BucketName": 
            "your-bucket-name", "DataFormat": "parquet", "GlueCatalogGeneration": true}'
```

Para uma tarefa de replicação de carga máxima que inclua o tipo de dados `csv`, defina `IncludeOpForFullLoad` como `true`.

Não utilize `GlueCatalogGeneration` com `PreserveTransactions` e `CdcPath`. O AWS Glue rastreador não consegue reconciliar os diferentes esquemas de arquivos armazenados sob o especificado. `CdcPath`

Para que o Amazon Athena indexe os dados do Amazon S3, e para você consultar os dados utilizando consultas SQL padrão por meio do Amazon Athena, o perfil do IAM anexado ao endpoint deve ter a seguinte política:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	  
    "Statement": [ 
        {
            "Effect": "Allow", 
            "Action": [
                "s3:GetBucketLocation", 
                "s3:GetObject",
                "s3:ListBucket", 
                "s3:ListBucketMultipartUploads", 
                "s3:ListMultipartUploadParts", 
                "s3:AbortMultipartUpload" 
            ], 
            "Resource": [
                "arn:aws:s3:::bucket123", 
                "arn:aws:s3:::bucket123/*" 
            ]
        },
        {
            "Effect": "Allow", 
            "Action": [ 
                "glue:CreateDatabase", 
                "glue:GetDatabase", 
                "glue:CreateTable", 
                "glue:DeleteTable", 
                "glue:UpdateTable", 
                "glue:GetTable", 
                "glue:BatchCreatePartition", 
                "glue:CreatePartition", 
                "glue:UpdatePartition", 
                "glue:GetPartition", 
                "glue:GetPartitions", 
                "glue:BatchGetPartition"
            ], 
            "Resource": [
                "arn:aws:glue:*:111122223333:catalog", 
                "arn:aws:glue:*:111122223333:database/*", 
                "arn:aws:glue:*:111122223333:table/*" 
            ]
        }, 
        {
            "Effect": "Allow",
            "Action": [
                "athena:StartQueryExecution",
                "athena:GetQueryExecution", 
                "athena:CreateWorkGroup"
            ],
            "Resource": "arn:aws:athena:*:111122223333:workgroup/glue_catalog_generation_for_task_*"
        }
    ]
}
```

------

**Referências**
+ Para obter mais informações sobre AWS Glue, consulte [Conceitos](https://docs.aws.amazon.com//glue/latest/dg/components-key-concepts.html) no *Guia do AWS Glue desenvolvedor*.
+ Para obter mais informações, AWS Glue Data Catalog consulte [Componentes](https://docs.aws.amazon.com/glue/latest/dg/components-overview.html) no *Guia do AWS Glue desenvolvedor*.

## Utilizar criptografia de dados, arquivos de parquet e de CDC no destino do Amazon S3
<a name="CHAP_Target.S3.EndpointSettings"></a>

É possível utilizar as configurações do endpoint de destino do S3 para configurar o seguinte:
+ Uma chave do KMS personalizada para criptografar os objetos de destino do S3.
+ Arquivos parquet como o formato de armazenamento para objetos de destino do S3.
+ Captura de dados de alteração (CDC), incluindo a ordem de transações no destino do S3.
+  AWS Glue Data Catalog Integre-se ao seu endpoint de destino do Amazon S3 e consulte dados do Amazon S3 por meio de outros serviços, como o Amazon Athena.

### AWS KMS configurações principais para criptografia de dados
<a name="CHAP_Target.S3.EndpointSettings.KMSkeys"></a>

Os exemplos a seguir mostram como configurar uma chave do KMS personalizada para criptografar os objetos de destino do S3. Para iniciar, execute o seguinte comando `create-endpoint` na CLI,

```
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target 
--s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "CsvRowDelimiter": "\n", 
"CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", 
"BucketName": "your-bucket-name", 
"EncryptionMode": "SSE_KMS", 
"ServerSideEncryptionKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480"}'
```

Aqui, o objeto JSON especificado pela opção `--s3-settings` define dois parâmetros. Um é um parâmetro `EncryptionMode` com o valor `SSE_KMS`. O outro é um parâmetro `ServerSideEncryptionKmsKeyId` com o valor de `arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480`. Esse valor é um Nome de recurso da Amazon (ARN) para a chave personalizada do KMS. Para um destino do S3, você também pode especificar configurações adicionais. Esses identificam o perfil de acesso ao servidor, fornecem delimitadores para o formato de armazenamento de objetos CSV padrão e fornecem o local e o nome do bucket para armazenar objetos de destino do S3.

Por padrão, a criptografia dos dados do S3 ocorre usando a criptografia do lado do servidor do S3. Para o destino do S3 do exemplo anterior, isso também é equivalente a especificar suas configurações de endpoint, como no exemplo a seguir.

```
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target
--s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "CsvRowDelimiter": "\n", 
"CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", 
"BucketName": "your-bucket-name", 
"EncryptionMode": "SSE_S3"}'
```

Para obter mais informações sobre como trabalhar com a criptografia do lado do servidor do S3, consulte [Proteger dados utilizando a criptografia do lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html).

**nota**  
Também é possível utilizar o comando `modify-endpoint` na CLI para alterar o valor do parâmetro `EncryptionMode` para um endpoint existente de `SSE_KMS` para `SSE_S3`. Mas não é possível alterar o valor de `EncryptionMode` de `SSE_S3` para `SSE_KMS`.

### Configurações para utilizar arquivos .parquet para armazenar objetos de destino do S3
<a name="CHAP_Target.S3.EndpointSettings.Parquet"></a>

O formato padrão para criar objetos de destino do S3 é arquivos .csv. Os exemplos a seguir mostram algumas configurações de endpoint para especificar arquivos .parquet como o formato para criar objetos de destino do S3. É possível especificar o formato .parquet de arquivos com todos os padrões, como no exemplo a seguir.

```
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target 
--s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "DataFormat": "parquet"}'
```

Aqui, o parâmetro `DataFormat` é definido como `parquet` para ativar o formato com todos os padrões do S3. Esses padrões incluem a codificação de um dicionário (`"EncodingType: "rle-dictionary"`) que utiliza uma combinação de empacotamento de bits e de codificação de run-length para armazenar valores repetidos.

É possível adicionar outras configurações para opções diferentes do padrão, como no exemplo a seguir.

```
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target
--s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "BucketFolder": "your-bucket-folder",
"BucketName": "your-bucket-name", "DataFormat": "parquet", "EncodingType: "plain-dictionary", "DictPageSizeLimit": 3,072,000,
"EnableStatistics": false }'
```

Aqui, além dos parâmetros para várias opções padrão de bucket do S3 e do parâmetro `DataFormat`, os seguintes parâmetros adicionais de arquivo .parquet são definidos:
+ `EncodingType`: defina uma codificação de dicionário (`plain-dictionary`) que armazena os valores encontrados em cada coluna em um bloco por coluna da página do dicionário.
+ `DictPageSizeLimit`: defina um tamanho máximo de página do dicionário de 3 MB.
+ `EnableStatistics`: desativa o padrão que ativa a coleção de estatísticas sobre páginas de arquivos Parquet e grupos de linhas.

### Captura de dados de alteração (CDC), incluindo a ordem de transações no destino do S3.
<a name="CHAP_Target.S3.EndpointSettings.CdcPath"></a>

Por padrão, quando AWS DMS executa uma tarefa do CDC, ela armazena todas as alterações de linha registradas em seu banco de dados de origem (ou bancos de dados) em um ou mais arquivos para cada tabela. Cada conjunto de arquivos contendo alterações para a mesma tabela reside em um único diretório de destino associado a essa tabela. AWS DMS cria tantos diretórios de destino quanto tabelas de banco de dados migradas para o endpoint de destino do Amazon S3. Os arquivos são armazenados no destino do S3 nesses diretórios, independentemente da ordem da transação. Para obter mais informações sobre as convenções de nomenclatura, o conteúdo e o formato dos dados, consulte [Usando o Amazon S3 como destino para AWS Database Migration Service](#CHAP_Target.S3).

Para capturar as alterações do banco de dados de origem de uma forma que também capture a ordem da transação, você pode especificar as configurações do endpoint do S3 que AWS DMS direcionam o armazenamento das alterações de linha de *todas as* tabelas do banco de dados em um ou mais arquivos.csv criados dependendo do tamanho da transação. Esses *arquivos de transação* .csv contêm todas as alterações de linhas listadas sequencialmente na ordem da transação de todas as tabelas envolvidas em cada transação. Esses arquivos de transação residem juntos em um único *diretório de transações* que você também especifica no destino do S3. Em cada arquivo de transação, a operação da transação e a identidade do banco de dados e a tabela de origem de cada alteração de linha são armazenadas como parte dos dados da linha, da seguinte maneira. 

```
operation,table_name,database_schema_name,field_value,...
```

Aqui, `operation` é a operação da transação na linha alterada, `table_name` é o nome da tabela do banco de dados em que a linha foi alterada, `database_schema_name` é o nome do esquema do banco de dados em que a tabela reside e `field_value` é o primeiro de um ou mais valores de campo que especificam os dados da linha.

O exemplo a seguir de um arquivo de transação mostra as linhas alteradas de uma ou mais transações que envolvem duas tabelas.

```
I,Names_03cdcad11a,rdsTempsdb,13,Daniel
U,Names_03cdcad11a,rdsTempsdb,23,Kathy
D,Names_03cdcad11a,rdsTempsdb,13,Cathy
I,Names_6d152ce62d,rdsTempsdb,15,Jane
I,Names_6d152ce62d,rdsTempsdb,24,Chris
I,Names_03cdcad11a,rdsTempsdb,16,Mike
```

Aqui, a operação da transação em cada linha é indicada por `I` (inserir), `U` (atualizar) ou `D` (excluir) na primeira coluna. O nome da tabela é o valor da segunda coluna (por exemplo, `Names_03cdcad11a`). O nome do esquema do banco de dados é o valor da terceira coluna (por exemplo, `rdsTempsdb`). E as colunas restantes são preenchidas com seus próprios dados da linha (por exemplo, `13,Daniel`).

Além disso, AWS DMS nomeia os arquivos de transação que ele cria no destino do Amazon S3 usando um registro de data e hora de acordo com a seguinte convenção de nomenclatura.

```
CDC_TXN-timestamp.csv
```

Aqui, `timestamp` é a hora em que o arquivo de transação foi criado, como no exemplo a seguir. 

```
CDC_TXN-20201117153046033.csv
```

Esse timestamp no nome do arquivo garante que os arquivos de transação sejam criados e listados na ordem da transação quando você os lista no diretório de transações.

**nota**  
Ao capturar alterações de dados na ordem da transação, AWS DMS sempre armazena as alterações de linha em arquivos.csv, independentemente do valor da configuração do `DataFormat` S3 no destino.

Para controlar a frequência de gravações em um destino do Amazon S3 durante uma tarefa de replicação de dados, é possível definir as configurações `CdcMaxBatchInterval` e `CdcMinFileSize`. Isso pode resultar em melhor desempenho ao analisar os dados sem operações adicionais de sobrecarga. Para obter mais informações, consulte [Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring). 

**Para pedir AWS DMS para armazenar todas as alterações de linha na ordem da transação**

1. Defina a configuração `PreserveTransactions` do S3 no destino como `true`.

1. Defina a configuração do `CdcPath` S3 no destino para um caminho de pasta relativo no qual você AWS DMS deseja armazenar os arquivos de transação.csv.

   AWS DMS cria esse caminho no bucket de destino e no diretório de trabalho padrão do S3 ou na pasta do bucket e do bucket que você especifica usando as configurações `BucketName` e do `BucketFolder` S3 no destino.

## Indicar operações de banco de dados de origem em dados migrados do S3
<a name="CHAP_Target.S3.Configuring.InsertOps"></a>

Ao AWS DMS migrar registros para um destino do S3, ele pode criar um campo adicional em cada registro migrado. Esse campo adicional indica a operação aplicada ao registro no banco de dados de origem. AWS DMS A forma como cria e define esse primeiro campo depende do tipo de tarefa de migração e das configurações de `includeOpForFullLoad``cdcInsertsOnly`, `cdcInsertsAndUpdates` e.

Em uma carga máxima, quando `includeOpForFullLoad` é `true`, o AWS DMS sempre cria um primeiro campo adicional em cada registro .csv. Esse campo contém a letra I (INSERT) para indicar que a linha foi inserida no banco de dados de origem. Para uma carga de CDC when `cdcInsertsOnly` is `false` (o padrão), AWS DMS também sempre cria um primeiro campo adicional em cada registro.csv ou .parquet. Esse campo contém a letra I (INSERT), U (UPDATE) ou D (DELETE) para indicar se a linha foi inserida, atualizada ou excluída no banco de dados de origem.

Na tabela a seguir, é possível ver como as configurações dos atributos `includeOpForFullLoad` e `cdcInsertsOnly` funcionam em conjunto e afetam a configuração dos registros migrados.


| Com essas configurações de parâmetros | O DMS define os registros de destino para a saída .csv e .parquet da seguinte maneira  | includeOpForFullLoad | cdcInsertsOnly | Para carga completa | Para carga de CDC | 
| --- | --- | --- | --- | --- | --- | 
| true | true | O valor do primeiro campo definido como I é adicionado | O valor do primeiro campo definido como I é adicionado | 
| false | false | Nenhum campo é adicionado | O valor do primeiro campo definido como I, U ou D é adicionado | 
| false | true | Nenhum campo é adicionado | Nenhum campo é adicionado | 
| true | false | O valor do primeiro campo definido como I é adicionado | O valor do primeiro campo definido como I, U ou D é adicionado | 

Quando `includeOpForFullLoad` e `cdcInsertsOnly` forem definidos com o mesmo valor, os registros de destino serão definidos de acordo com o atributo que controla as configurações de registro para o tipo de migração atual. Esse atributo é `includeOpForFullLoad` para a carga máxima e `cdcInsertsOnly` para a carga da CDC.

Quando `includeOpForFullLoad` e `cdcInsertsOnly` são definidos com valores diferentes, AWS DMS torna as configurações de registro de destino consistentes tanto para o CDC quanto para a carga total. Isso é feito fazendo com que as configurações de registro de uma carga de CDC com as configurações de qualquer carga máxima anterior especificada por `includeOpForFullLoad` estejam em conformidade. 

Ou seja, suponha que uma carga máxima está configurada para adicionar um primeiro campo para indicar um registro inserido. Nesse caso, um carregamento de CDC seguinte será configurado para adicionar um primeiro campo que indica um registro inserido, atualizado ou excluído de acordo com a origem. Por outro lado, suponha que um carga máxima está configurada para *não* adicionar um primeiro campo indicando um registro inserido. Nesse caso, uma carga de CDC também será definida para não adicionar um primeiro campo para cada registro, independentemente das operações de registro correspondentes na origem.

Da mesma forma, a maneira como o DMS cria e define um primeiro campo adicional depende das configurações de `includeOpForFullLoad` e de `cdcInsertsAndUpdates`. Na tabela a seguir, é possível ver como as configurações dos atributos `includeOpForFullLoad` e `cdcInsertsAndUpdates` funcionam em conjunto e afetam a configuração dos registros migrados neste formato. 


| Com essas configurações de parâmetros | O DMS define os registros de destino para a saída .csv da seguinte forma  | includeOpForFullLoad | cdcInsertsAndAtualizações | Para carga completa | Para carga de CDC | 
| --- | --- | --- | --- | --- | --- | 
| true | true | O valor do primeiro campo definido como I é adicionado | O valor do primeiro campo definido como I ou U | 
| false | false | Nenhum campo é adicionado | O valor do primeiro campo definido como I, U ou D é adicionado | 
| false | true | Nenhum campo é adicionado | O valor do primeiro campo definido como I ou U | 
| true | false | O valor do primeiro campo definido como I é adicionado | O valor do primeiro campo definido como I, U ou D é adicionado | 

## Tipos de dados de destino do S3 Parquet
<a name="CHAP_Target.S3.DataTypes"></a>

A tabela a seguir mostra os tipos de dados de destino do Parquet que são suportados durante o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipo de dados  |  Tipo de dados parquet do S3   | 
| --- | --- | 
| BYTES | BINARY | 
| DATE | DATE32 | 
| TIME | TIME32 | 
| DATETIME | TIMESTAMP | 
| INT1 | INT8 | 
| INT2 | INT16 | 
| INT4 | INT32 | 
| INT8 | INT64 | 
| NUMERIC | DECIMAL | 
| REAL4 | FLOAT | 
| REAL8 | DOUBLE | 
| STRING | STRING | 
| UINT1 | UINT8 | 
| UINT2 | UINT16 | 
| UINT4 | UINT32 | 
| UINT8 | UINT64 | 
| WSTRING | STRING | 
| BLOB | BINARY | 
| NCLOB | STRING | 
| CLOB | STRING | 
| BOOLEAN | BOOL | 

# Usando um banco de dados do Amazon DynamoDB como destino para AWS Database Migration Service
<a name="CHAP_Target.DynamoDB"></a>

Você pode usar AWS DMS para migrar dados para uma tabela do Amazon DynamoDB. O Amazon DynamoDB é um serviço de banco de dados NoSQL totalmente gerenciado que fornece desempenho rápido e previsível com escalabilidade perfeita. AWS DMS suporta o uso de um banco de dados relacional ou MongoDB como fonte.

No DynamoDB, tabelas, itens e atributos são os componentes principais com que você trabalha. Uma *tabela* é uma coleção de itens, e cada *item* é uma coleção de atributos. O DynamoDB utiliza chaves primárias, chamadas chaves de partição, para identificar de modo exclusivo cada item em uma tabela. Também é possível utilizar chaves e índices secundários para fornecer mais flexibilidade de consulta.

O mapeamento de objeto é utilizado para migrar os dados de um banco de dados de origem para uma tabela de destino do DynamoDB. O mapeamento de objetos permite que você determine onde os dados de origem estão localizados no destino. 

Ao AWS DMS criar tabelas em um endpoint de destino do DynamoDB, ele cria tantas tabelas quanto no endpoint do banco de dados de origem. AWS DMS também define vários valores de parâmetros do DynamoDB. O custo de criação da tabela depende da quantidade de dados e do número de tabelas a serem migradas.

**nota**  
A opção **Modo SSL** no AWS DMS console ou na API não se aplica a alguns serviços de streaming de dados e NoSQL, como Kinesis e DynamoDB. Eles são seguros por padrão, então AWS DMS mostra que a configuração do modo SSL é igual a nenhuma (**Modo SSL** = Nenhuma). Não é necessário fornecer nenhuma configuração adicional para que o endpoint utilize o SSL. Por exemplo, ao utilizar o DynamoDB como um endpoint de destino, ele é seguro por padrão. Todas as chamadas de API para o DynamoDB usam SSL, portanto, não há necessidade de uma opção adicional de SSL no endpoint. AWS DMS É possível inserir e recuperar dados com segurança por meio de endpoints SSL utilizando o protocolo HTTPS, que o AWS DMS utiliza por padrão ao se conectar a um banco de dados DynamoDB.

Para ajudar a aumentar a velocidade da transferência, AWS DMS oferece suporte a uma carga completa multiencadeada em uma instância de destino do DynamoDB. O DMS oferece suporte a esse multithreading com configurações de tarefa que incluem o seguinte:
+ `MaxFullLoadSubTasks`: utilize esta opção para indicar o número máximo de tabelas de origem a serem carregadas em paralelo. O DMS carrega cada tabela na tabela de destino do DynamoDB correspondente utilizando uma subtarefa dedicada. O valor padrão é 8. O valor máximo é 49.
+ `ParallelLoadThreads`— Use essa opção para especificar o número de threads AWS DMS usados para carregar cada tabela em sua tabela de destino do DynamoDB. O valor padrão é 0 (segmento único). O valor máximo é 200. Você pode solicitar o aumento desse limite máximo.
**nota**  
O DMS atribui cada segmento de uma tabela ao seu próprio thread para carregar. Portanto, defina `ParallelLoadThreads` como o número máximo de segmentos que você especifica para uma tabela na origem.
+ `ParallelLoadBufferSize`: utilize essa opção para especificar o número máximo de registros a serem armazenados em buffer utilizado pelos threads paralelos para carregar dados no destino do DynamoDB. O valor padrão é 50. Valor máximo de 1.000. Use essa configuração com `ParallelLoadThreads`; `ParallelLoadBufferSize` é válido somente quando há mais de um thread.
+ Configurações de mapeamento de tabela para tabelas individuais: utilize as regras `table-settings` para identificar tabelas individuais da origem que você deseja carregar em paralelo. Além disso, utilize essas regras para especificar como segmentar as linhas de cada tabela para carregamento multithread. Para obter mais informações, consulte [Regras e operações de configurações de tabelas e coleções](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md).

**nota**  
Quando AWS DMS define os valores dos parâmetros do DynamoDB para uma tarefa de migração, o valor padrão do parâmetro Read Capacity Units (RCU) é definido como 200.  
O valor do parâmetro das Unidades de capacidade de gravação (WCU) também é definido, mas o valor depende de várias outras configurações:  
O valor padrão do parâmetro WCU é 200.
Se a configuração de tarefa `ParallelLoadThreads` for definida com um valor maior que 1 (o padrão é 0), o parâmetro WCU será definido como 200 vezes o valor de `ParallelLoadThreads`.
As taxas AWS DMS de uso padrão se aplicam aos recursos que você usa.

## Migração de um banco de dados relacional para uma tabela do DynamoDB
<a name="CHAP_Target.DynamoDB.RDBMS2DynamoDB"></a>

AWS DMS suporta a migração de dados para tipos de dados escalares do DynamoDB. Para migrar de um banco de dados relacional, como o Oracle ou o MySQL, para o DynamoDB, reestruture a forma como você armazena esses dados.

Atualmente, AWS DMS oferece suporte à reestruturação de tabela única para tabela única para atributos do tipo escalar do DynamoDB. Se você estivesse migrando dados para o DynamoDB a partir de uma tabela de banco de dados relacional, pegaria dados de uma tabela e os reformataria como atributos de tipo de dados escalares. Esses atributos podem aceitar dados de várias colunas, e é possível mapear uma coluna diretamente para um atributo.

AWS DMS é compatível com os seguintes tipos de dados escalares do DynamoDB:
+ String
+ Número
+ Booleano

**nota**  
Os dados NULL da origem são ignorados no destino.

## Pré-requisitos para usar o DynamoDB como destino para AWS Database Migration Service
<a name="CHAP_Target.DynamoDB.Prerequisites"></a>

Antes de começar a trabalhar com um banco de dados do DynamoDB como destino, certifique-se AWS DMS de criar uma função do IAM. Essa função do IAM deve AWS DMS permitir assumir e conceder acesso às tabelas do DynamoDB para as quais estão sendo migradas. O conjunto mínimo de permissões de acesso é mostrado na seguinte política do IAM.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "",
         "Effect": "Allow",
         "Principal": {
            "Service": "dms.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
      }
   ]
}
```

------

O perfil utilizado para a migração para o DynamoDB deve ter as seguintes permissões:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem",
                "dynamodb:CreateTable",
                "dynamodb:DescribeTable",
                "dynamodb:DeleteTable",
                "dynamodb:DeleteItem",
                "dynamodb:UpdateItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-west-2:111122223333:table/name1",
                "arn:aws:dynamodb:us-west-2:111122223333:table/OtherName*",
                "arn:aws:dynamodb:us-west-2:111122223333:table/awsdms_apply_exceptions",
                "arn:aws:dynamodb:us-west-2:111122223333:table/awsdms_full_load_exceptions"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:ListTables"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## Limitações ao usar o DynamoDB como destino para AWS Database Migration Service
<a name="CHAP_Target.DynamoDB.Limitations"></a>

Aplicam-se as seguintes limitações ao utilizar o DynamoDB como destino:
+ O DynamoDB limita a precisão do tipo de dados Número a 38 locais. Armazene todos os tipos de dados com mais precisão como uma string. É necessário especificar isso explicitamente utilizando o recurso de mapeamento de objetos.
+ Como o DynamoDB não tem um tipo de dados Date, os dados que utilizam esse tipo Date são convertidos em strings.
+ O DynamoDB não permite atualizações nos atributos da chave primária. Essa restrição é importante quando se usa a replicação contínua com captura de dados de alterações (CDC), pois ela pode gerar dados indesejados no destino. Dependendo de como é o seu mapeamento de objetos, uma operação de CDC que atualiza a chave primária pode fazer uma de duas coisas. Pode falhar ou inserir um novo item com a chave primária atualizada e dados incompletos.
+ AWS DMS só oferece suporte à replicação de tabelas com chaves primárias não compostas. A exceção é se você especificar um mapeamento de objetos para a tabela de destino com uma chave de partição personalizada ou chave de classificação, ou ambas.
+ AWS DMS não suporta dados LOB, a menos que seja um CLOB. AWS DMS converte dados CLOB em uma string do DynamoDB ao migrar os dados.
+ Ao utilizar o DynamoDB como destino, somente a tabela de controle Aplicar exceções (`dmslogs.awsdms_apply_exceptions`) será compatível. Para obter mais informações sobre tabelas de controle, consulte [Configurações de tarefa de tabela de controle](CHAP_Tasks.CustomizingTasks.TaskSettings.ControlTable.md).
+ AWS DMS não suporta a configuração `TargetTablePrepMode=TRUNCATE_BEFORE_LOAD` de tarefas do DynamoDB como destino. 
+ AWS DMS não suporta a configuração `TaskRecoveryTableEnabled` de tarefas do DynamoDB como destino. 
+ O `BatchApply` não é compatível com um endpoint do DynamoDB.
+ AWS DMS não é possível migrar atributos cujos nomes correspondam às palavras reservadas no DynamoDB. Para ter mais informações, consulte [Palavras reservadas no DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html) no *Guia do desenvolvedor Amazon DynamoDB*.

## Utilizar o mapeamento de objetos para migrar dados para o DynamoDB
<a name="CHAP_Target.DynamoDB.ObjectMapping"></a>

AWS DMS usa regras de mapeamento de tabelas para mapear dados da tabela de origem para a tabela do DynamoDB de destino. Para mapear dados para um destino do DynamoDB, utilize um tipo de regra de mapeamento de tabela chamada *object-mapping*. O mapeamento de objetos permite definir os nomes de atributos e os dados a serem migrados para eles. Você deve ter regras de seleção ao utilizar o mapeamento de objetos.

O DynamoDB não tem uma estrutura predefinida além de ter uma chave de partição e uma chave de classificação opcional. Se você tiver uma chave primária não composta, use-a AWS DMS . Se você tiver uma chave primária composta ou quiser utilizar uma chave de classificação, defina as chaves e os outros atributos na tabela de destino do DynamoDB.

Para criar uma regra de mapeamento de objetos, especifique `rule-type` como *object-mapping*. Essa regra especifica o tipo de mapeamento de objeto que você deseja usar. 

A estrutura da regra é a seguinte:

```
{ "rules": [
    {
      "rule-type": "object-mapping",
      "rule-id": "<id>",
      "rule-name": "<name>",
      "rule-action": "<valid object-mapping rule action>",
      "object-locator": {
      "schema-name": "<case-sensitive schema name>",
      "table-name": ""
      },
      "target-table-name": "<table_name>"
    }
  ]
}
```

AWS DMS atualmente suporta `map-record-to-record` e `map-record-to-document` como os únicos valores válidos para o `rule-action` parâmetro. Esses valores especificam o que AWS DMS acontece por padrão com registros que não são excluídos como parte da lista de `exclude-columns` atributos. Esses valores não afetam os mapeamentos de atributos de forma alguma. 
+ É possível utilizar `map-record-to-record` ao migrar de um banco de dados relacional para o DynamoDB. Ele utiliza a chave primária do banco de dados relacional como a chave de partição no DynamoDB e cria um atributo para cada coluna no banco de dados de origem. Ao usar`map-record-to-record`, para qualquer coluna na tabela de origem não listada na lista de atributos, AWS DMS cria um `exclude-columns` atributo correspondente na instância do DynamoDB de destino. Isso é feito, independentemente de a coluna de origem ser utilizada ou não em um mapeamento de atributos. 
+ Você utiliza `map-record-to-document` para colocar colunas de origem em um único mapa sem formatação do DynamoDB no destino, utilizando o nome de atributo "\$1doc". Ao usar`map-record-to-document`, AWS DMS coloca os dados em um único atributo de mapa plano do DynamoDB na fonte. Esse atributo é chamado "\$1doc". Esse posicionamento se aplica a qualquer coluna na tabela de origem que não aparece na lista de atributos `exclude-columns`. 

Uma maneira de compreender a diferença entre os parâmetros de `rule-action`, `map-record-to-record` e `map-record-to-document`, é ver os dois parâmetros em ação. Para este exemplo, suponha que você está começando com uma linha de tabela de banco de dados relacional com a seguinte estrutura e dados:

![\[exemplo de banco de dados\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/images/datarep-dynamodb1.png)


Para migrar essas informações para o DynamoDB, você criaria regras para mapear os dados para um item de tabela do DynamoDB. Observe as colunas listadas para o parâmetro `exclude-columns`. Essas colunas não são mapeadas diretamente para o destino. Em vez disso, o mapeamento de atributos é usado para combinar os dados em novos itens, como onde *FirstName*e *LastName*são agrupados para se tornarem *CustomerName*no destino do DynamoDB. *NickName*e a *renda* não está excluída.

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToDDB",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "test",
                "table-name": "customer"
            },
            "target-table-name": "customer_t",
            "mapping-parameters": {
                "partition-key-name": "CustomerName",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${FirstName},${LastName}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "document",
                        "attribute-sub-type": "dynamodb-map",
                        "value": {
                            "M": {
                                "Home": {
                                    "M": {
                                        "Address": {
                                            "S": "${HomeAddress}"
                                        },
                                        "Phone": {
                                            "S": "${HomePhone}"
                                        }
                                    }
                                },
                                "Work": {
                                    "M": {
                                        "Address": {
                                            "S": "${WorkAddress}"
                                        },
                                        "Phone": {
                                            "S": "${WorkPhone}"
                                        }
                                    }
                                }
                            }
                        }
                    }
                ]
            }
        }
    ]
}
```

Ao usar o `rule-action` parâmetro *map-record-to-record*, os dados *NickName*e a *receita* são mapeados para itens com o mesmo nome no destino do DynamoDB. 

![\[Comece com AWS DMS\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/images/datarep-dynamodb2.png)


No entanto, suponha que você use as mesmas regras, mas altere o `rule-action` parâmetro para *map-record-to-document*. Nesse caso, as colunas não listadas no `exclude-columns` parâmetro *NickName*e *renda* são mapeadas para um item *\$1doc*.

![\[Comece com AWS DMS\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/images/datarep-dynamodb3.png)


### Utilizar expressões de condição personalizadas com o mapeamento de objetos
<a name="CHAP_Target.DynamoDB.ObjectMapping.ConditionExpression"></a>

É possível utilizar um recurso do DynamoDB chamado de expressões condicionais para manipular dados que estão sendo gravados em uma tabela do DynamoDB. Para obter mais informações sobre expressões condicionais no DynamoDB, consulte [Expressões de condição](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html).

Um membro de expressão condicional consiste em: 
+ uma expressão (obrigatória); 
+ valores de atributos de expressão (obrigatório). Especificam uma estrutura json do DynamoDB do valor de atributo. Isso é útil para comparar um atributo com um valor no DynamoDB que você talvez só conhecerá no runtime. Você pode definir um atributo de expressão como um espaço reservado para um valor real.
+ nomes de atributos de expressão (obrigatório). Isso ajuda a evitar possíveis conflitos com quaisquer palavras reservadas do DynamoDB, nomes de atributo que contêm caracteres especiais e similares.
+ opções para quando utilizar a expressão condicional (opcional). O padrão é apply-during-cdc = false e apply-during-full-load = true

A estrutura da regra é a seguinte:

```
"target-table-name": "customer_t",
      "mapping-parameters": {
        "partition-key-name": "CustomerName",
        "condition-expression": {
          "expression":"<conditional expression>",
          "expression-attribute-values": [
              {
                "name":"<attribute name>",
                "value":<attribute value>
              }
          ],
          "apply-during-cdc":<optional Boolean value>,
          "apply-during-full-load": <optional Boolean value>
        }
```

O exemplo a seguir destaca as seções utilizadas para expressão condicional.

![\[Comece com AWS DMS\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/images/datarep-Tasks-conditional1.png)


### Usar o mapeamento de atributo com mapeamento de objeto
<a name="CHAP_Target.DynamoDB.ObjectMapping.AttributeMapping"></a>

O mapeamento de atributo permite especificar uma string de modelo utilizando nomes de colunas de origem para reestruturar dados no destino. Não há formatação feita além do que o usuário especifica no modelo.

O exemplo a seguir mostra a estrutura do banco de dados de origem e a estrutura desejada do destino do DynamoDB. Primeiramente, é mostrada a estrutura da origem: nesse caso um banco de dados Oracle, e, depois, a estrutura desejada dos dados no DynamoDB. O exemplo termina com o JSON utilizado para criar a estrutura de destino desejada.

A estrutura dos dados do Oracle é a seguinte:


****  

| FirstName | LastName | StoreId | HomeAddress | HomePhone | WorkAddress | WorkPhone | DateOfBirth | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| Chave primária | N/D |  | 
| Randy | Marsh | 5 | 221B Baker Street  | 1234567890 | 31 Spooner Street, Quahog  | 9876543210  | 29/02/1988  | 

A estrutura dos dados do DynamoDB é a seguinte:


****  

| CustomerName | StoreId | ContactDetails | DateOfBirth | 
| --- | --- | --- | --- | 
| Chave de partição | Chave de classificação | N/D | 
| <pre>Randy,Marsh</pre> | <pre>5</pre> | <pre>{<br />    "Name": "Randy",<br />    "Home": {<br />        "Address": "221B Baker Street",<br />        "Phone": 1234567890<br />    },<br />    "Work": {<br />        "Address": "31 Spooner Street, Quahog",<br />        "Phone": 9876541230<br />    }<br />}</pre> | <pre>02/29/1988</pre> | 

O JSON a seguir mostra o mapeamento de objetos e o mapeamento de colunas utilizados para alcançar a estrutura do DynamoDB:

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToDDB",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "test",
                "table-name": "customer"
            },
            "target-table-name": "customer_t",
            "mapping-parameters": {
                "partition-key-name": "CustomerName",
                "sort-key-name": "StoreId",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${FirstName},${LastName}"
                    },
                    {
                        "target-attribute-name": "StoreId",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${StoreId}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "{\"Name\":\"${FirstName}\",\"Home\":{\"Address\":\"${HomeAddress}\",\"Phone\":\"${HomePhone}\"}, \"Work\":{\"Address\":\"${WorkAddress}\",\"Phone\":\"${WorkPhone}\"}}"
                    }
                ]
            }
        }
    ]
}
```

Outra maneira de utilizar o mapeamento de colunas é utilizar o formato do DynamoDB como o tipo de documento. O código a seguir utiliza *dynamodb-map* como `attribute-sub-type` para o mapeamento de atributo. 

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToDDB",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "test",
                "table-name": "customer"
            },
            "target-table-name": "customer_t",
            "mapping-parameters": {
                "partition-key-name": "CustomerName",
                "sort-key-name": "StoreId",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${FirstName},${LastName}"
                    },
                    {
                        "target-attribute-name": "StoreId",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${StoreId}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "document",
                        "attribute-sub-type": "dynamodb-map",
                        "value": {
                          "M": {
                            "Name": {
                              "S": "${FirstName}"
                            },
                            "Home": {
                                    "M": {
                                        "Address": {
                                            "S": "${HomeAddress}"
                                        },
                                        "Phone": {
                                            "S": "${HomePhone}"
                                        }
                                    }
                                },
                                "Work": {
                                    "M": {
                                        "Address": {
                                            "S": "${WorkAddress}"
                                        },
                                        "Phone": {
                                            "S": "${WorkPhone}"
                                        }
                                    }
                                }
                            }
                        }        
                    }
                ]
            }
        }
    ]
}
```

Como alternativa`dynamodb-map`, você pode usar `dynamodb-list` como mapeamento attribute-sub-type de atributos, conforme mostrado no exemplo a seguir.

```
{
"target-attribute-name": "ContactDetailsList",
"attribute-type": "document",
"attribute-sub-type": "dynamodb-list",
"value": {
    "L": [
            {
                "N": "${FirstName}"
            },
            {   
                "N": "${HomeAddress}"
            },
            {   
                "N": "${HomePhone}"
            },
            {
                "N": "${WorkAddress}"
            },
            {
                "N": "${WorkPhone}"
            }
        ]   
    }
}
```

### Exemplo 1: Usar o mapeamento de atributo com mapeamento de objeto
<a name="CHAP_Target.DynamoDB.ColumnMappingExample1"></a>

O exemplo a seguir migra dados de duas tabelas do banco de dados MySQL*, nfl\$1data e *sport\$1team*,* para duas tabelas do DynamoDB chamadas e. *NFLTeams*SportTeams** A estrutura das tabelas e do JSON utilizados para mapear os dados das tabelas do banco de dados MySQL para as tabelas do DynamoDB é mostrada a seguir.

A estrutura da tabela do banco de dados MySQL *nfl\$1data* é mostrada abaixo:

```
mysql> desc nfl_data;
+---------------+-------------+------+-----+---------+-------+
| Field         | Type        | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| Position      | varchar(5)  | YES  |     | NULL    |       |
| player_number | smallint(6) | YES  |     | NULL    |       |
| Name          | varchar(40) | YES  |     | NULL    |       |
| status        | varchar(10) | YES  |     | NULL    |       |
| stat1         | varchar(10) | YES  |     | NULL    |       |
| stat1_val     | varchar(10) | YES  |     | NULL    |       |
| stat2         | varchar(10) | YES  |     | NULL    |       |
| stat2_val     | varchar(10) | YES  |     | NULL    |       |
| stat3         | varchar(10) | YES  |     | NULL    |       |
| stat3_val     | varchar(10) | YES  |     | NULL    |       |
| stat4         | varchar(10) | YES  |     | NULL    |       |
| stat4_val     | varchar(10) | YES  |     | NULL    |       |
| team          | varchar(10) | YES  |     | NULL    |       |
+---------------+-------------+------+-----+---------+-------+
```

A estrutura do banco de dados MySQL *sport\$1team* é mostrada abaixo:

```
mysql> desc sport_team;
+---------------------------+--------------+------+-----+---------+----------------+
| Field                     | Type         | Null | Key | Default | Extra          |
+---------------------------+--------------+------+-----+---------+----------------+
| id                        | mediumint(9) | NO   | PRI | NULL    | auto_increment |
| name                      | varchar(30)  | NO   |     | NULL    |                |
| abbreviated_name          | varchar(10)  | YES  |     | NULL    |                |
| home_field_id             | smallint(6)  | YES  | MUL | NULL    |                |
| sport_type_name           | varchar(15)  | NO   | MUL | NULL    |                |
| sport_league_short_name   | varchar(10)  | NO   |     | NULL    |                |
| sport_division_short_name | varchar(10)  | YES  |     | NULL    |                |
```

As regras de mapeamento de tabela utilizadas para mapear as duas tabelas para as duas tabelas do DynamoDB são mostradas abaixo:

```
{
  "rules":[
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "dms_sample",
        "table-name": "nfl_data"
      },
      "rule-action": "include"
    },
    {
      "rule-type": "selection",
      "rule-id": "2",
      "rule-name": "2",
      "object-locator": {
        "schema-name": "dms_sample",
        "table-name": "sport_team"
      },
      "rule-action": "include"
    },
    {
      "rule-type":"object-mapping",
      "rule-id":"3",
      "rule-name":"MapNFLData",
      "rule-action":"map-record-to-record",
      "object-locator":{
        "schema-name":"dms_sample",
        "table-name":"nfl_data"
      },
      "target-table-name":"NFLTeams",
      "mapping-parameters":{
        "partition-key-name":"Team",
        "sort-key-name":"PlayerName",
        "exclude-columns": [
          "player_number", "team", "name"
        ],
        "attribute-mappings":[
          {
            "target-attribute-name":"Team",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"${team}"
          },
          {
            "target-attribute-name":"PlayerName",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"${name}"
          },
          {
            "target-attribute-name":"PlayerInfo",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"{\"Number\": \"${player_number}\",\"Position\": \"${Position}\",\"Status\": \"${status}\",\"Stats\": {\"Stat1\": \"${stat1}:${stat1_val}\",\"Stat2\": \"${stat2}:${stat2_val}\",\"Stat3\": \"${stat3}:${
stat3_val}\",\"Stat4\": \"${stat4}:${stat4_val}\"}"
          }
        ]
      }
    },
    {
      "rule-type":"object-mapping",
      "rule-id":"4",
      "rule-name":"MapSportTeam",
      "rule-action":"map-record-to-record",
      "object-locator":{
        "schema-name":"dms_sample",
        "table-name":"sport_team"
      },
      "target-table-name":"SportTeams",
      "mapping-parameters":{
        "partition-key-name":"TeamName",
        "exclude-columns": [
          "name", "id"
        ],
        "attribute-mappings":[
          {
            "target-attribute-name":"TeamName",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"${name}"
          },
          {
            "target-attribute-name":"TeamInfo",
            "attribute-type":"scalar",
            "attribute-sub-type":"string",
            "value":"{\"League\": \"${sport_league_short_name}\",\"Division\": \"${sport_division_short_name}\"}"
          }
        ]
      }
    }
  ]
}
```

O exemplo de saída para a tabela do *NFLTeams*DynamoDB é mostrado abaixo:

```
  "PlayerInfo": "{\"Number\": \"6\",\"Position\": \"P\",\"Status\": \"ACT\",\"Stats\": {\"Stat1\": \"PUNTS:73\",\"Stat2\": \"AVG:46\",\"Stat3\": \"LNG:67\",\"Stat4\": \"IN 20:31\"}",
  "PlayerName": "Allen, Ryan",
  "Position": "P",
  "stat1": "PUNTS",
  "stat1_val": "73",
  "stat2": "AVG",
  "stat2_val": "46",
  "stat3": "LNG",
  "stat3_val": "67",
  "stat4": "IN 20",
  "stat4_val": "31",
  "status": "ACT",
  "Team": "NE"
}
```

O exemplo de saída para a tabela do SportsTeams *DynamoDB* é mostrado abaixo:

```
{
  "abbreviated_name": "IND",
  "home_field_id": 53,
  "sport_division_short_name": "AFC South",
  "sport_league_short_name": "NFL",
  "sport_type_name": "football",
  "TeamInfo": "{\"League\": \"NFL\",\"Division\": \"AFC South\"}",
  "TeamName": "Indianapolis Colts"
}
```

## Tipos de dados de destino do DynamoDB
<a name="CHAP_Target.DynamoDB.DataTypes"></a>

O endpoint do DynamoDB for é AWS DMS compatível com a maioria dos tipos de dados do DynamoDB. A tabela a seguir mostra os tipos de dados de AWS DMS destino da Amazon que são compatíveis com o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).

Ao AWS DMS migrar dados de bancos de dados heterogêneos, mapeamos tipos de dados do banco de dados de origem para tipos de dados intermediários chamados AWS DMS tipos de dados. Em seguida, mapeamos os tipos de dados intermediários para os tipos de dados de destino. A tabela a seguir mostra cada tipo de AWS DMS dados e o tipo de dados para o qual ele é mapeado no DynamoDB:


| AWS DMS tipo de dados | Tipo de dados do DynamoDB | 
| --- | --- | 
|  String  |  String  | 
|  WString  |  String  | 
|  Booleano  |  Booleano  | 
|  Data  |  String  | 
|  DateTime  |  String  | 
|  INT1  |  Número  | 
|  INT2  |  Número  | 
|  INT4  |  Número  | 
|  INT8  |  Número  | 
|  Numérico  |  Número  | 
|  Real4  |  Número  | 
|  Real8  |  Número  | 
|  UINT1  |  Número  | 
|  UINT2  |  Número  | 
|  UINT4  |  Número  | 
| UINT8 | Número | 
| CLOB | String | 

# Usando o Amazon Kinesis Data Streams como alvo para AWS Database Migration Service
<a name="CHAP_Target.Kinesis"></a>

Você pode usar AWS DMS para migrar dados para um stream de dados do Amazon Kinesis. O Amazon Kinesis Data Streams faz parte do serviço Amazon Kinesis Data Streams. É possível utilizar os fluxos de dados do Kinesis para coletar e processar grandes registros de dados em tempo real.

O fluxo de dados do Kinesis é composto por fragmentos. O *estilhaço* é uma sequência de registros de dados identificada de forma exclusiva em um stream. Para obter mais informações sobre fragmentos no Amazon Kinesis Data Streams, consulte o [Fragmento](https://docs.aws.amazon.com/streams/latest/dev/key-concepts.html#shard) no *Guia do desenvolvedor do Amazon Kinesis Data Streams.*

AWS Database Migration Service publica registros em um stream de dados do Kinesis usando JSON. Durante a conversão, o AWS DMS serializa cada registro do banco de dados de origem em um par atributo/valor no formato JSON ou em um formato de mensagem JSON\$1UNFORMATTED. Um formato de mensagem JSON\$1UNFORMATTED é uma string JSON de linha única com novo delimitador de linha. Ele permite que o Amazon Data Firehose entregue dados do Kinesis para um destino do Amazon S3 e consulte-os utilizando vários mecanismos de consulta, incluindo o Amazon Athena.

O mapeamento de objetos é utilizado para migrar os dados de uma fonte de dados compatível para um fluxo de destino. Com o mapeamento do objeto, você determina como estruturar os registros de dados no stream. Também é possível definir uma chave de partição para cada tabela, que será utilizada pelo Kinesis Data Streams para agrupar os dados em fragmentos. 

AWS DMS também define vários valores de parâmetros do Kinesis Data Streams. O custo de criação da tabela depende da quantidade de dados e do número de tabelas a serem migradas.

**nota**  
A opção **Modo SSL** no AWS DMS console ou na API não se aplica a alguns serviços de streaming de dados e NoSQL, como Kinesis e DynamoDB. Eles são seguros por padrão, então AWS DMS mostra que a configuração do modo SSL é igual a nenhuma (**Modo SSL** = Nenhuma). Não é necessário fornecer nenhuma configuração adicional para que o endpoint utilize o SSL. Por exemplo, ao utilizar o Kinesis como um endpoint de destino, ele é seguro por padrão. Todas as chamadas de API para o Kinesis usam SSL, portanto, não há necessidade de uma opção adicional de SSL no endpoint. AWS DMS É possível colocar e recuperar dados com segurança por meio de endpoints SSL utilizando o protocolo HTTPS, que o AWS DMS utiliza por padrão ao se conectar a um fluxo de dados Kinesis.

**Configurações do endpoint do Kinesis Data Streams**

Ao usar os endpoints de destino do Kinesis Data Streams, você pode obter detalhes da transação e do controle `KinesisSettings` usando a opção na API. AWS DMS 

É possível definir as configurações da conexão de uma das seguintes maneiras:
+ No AWS DMS console, usando as configurações do endpoint.
+ Na CLI, usando a `kinesis-settings` opção do [CreateEndpoint](https://docs.aws.amazon.com/dms/latest/APIReference/API_CreateEndpoint.html)comando.

Na CLI, utilize os seguintes parâmetros de solicitação da opção `kinesis-settings`:
**nota**  
Compatibilidade com a configuração do endpoints do `IncludeNullAndEmpty` está disponível nas versões 3.4.1 e superiores do AWS DMS . Mas o suporte para as outras configurações de endpoint a seguir para destinos do Kinesis Data Streams está disponível em. AWS DMS
+ `MessageFormat`: o formato de saída dos registros criados no endpoint. O formato da mensagem é `JSON` (padrão) ou `JSON_UNFORMATTED` (uma única linha sem guia).
+ `IncludeControlDetails`: mostra informações detalhadas de controle para definição de tabelas, definição de colunas e alterações de tabelas e colunas na saída de mensagem do Kinesis. O padrão é `false`.
+ `IncludeNullAndEmpty`: inclui colunas NULL e vazias no destino. O padrão é `false`.
+ `IncludePartitionValue`: mostra o valor da partição na saída da mensagem do Kinesis, a menos que o tipo de partição seja `schema-table-type`. O padrão é `false`.
+ `IncludeTableAlterOperations`: inclui todas as operações da linguagem de definição de dados (DDL) que alteram a tabela nos dados de controle, como `rename-table`, `drop-table`, `add-column`, `drop-column` e `rename-column`. O padrão é `false`.
+ `IncludeTransactionDetails`: fornece informações detalhadas sobre transações do banco de dados de origem. Essas informações incluem um timestamp de confirmação, uma posição no log e valores para `transaction_id`, `previous_transaction_id` e `transaction_record_id ` (o deslocamento de registro dentro de uma transação). O padrão é `false`.
+ `PartitionIncludeSchemaTable`: prefixa os nomes de esquema e de tabela em valores de partições, quando o tipo de partição for `primary-key-type`. Isso aumenta a distribuição de dados entre estilhaços do Kinesis. Por exemplo, suponha que um esquema `SysBench` tenha milhares de tabelas, e cada tabela tenha apenas um intervalo limitado para uma chave primária. Nesse caso, a mesma chave primária é enviada de milhares de tabelas para o mesmo estilhaço, o que provoca o controle de utilização. O padrão é `false`.
+ `UseLargeIntegerValue`— Use int de até 18 dígitos em vez de converter ints como duplos, disponível a partir da AWS DMS versão 3.5.4. O padrão é falso.

O exemplo a seguir mostra a opção `kinesis-settings` em uso com um exemplo de comando `create-endpoint` emitido utilizando a AWS CLI.

```
aws dms \
  create-endpoint \
    --region <aws-region> \
    --endpoint-identifier <user-endpoint-identifier> \
    --endpoint-type target \
    --engine-name kinesis \
    --kinesis-settings ServiceAccessRoleArn=arn:aws:iam::<account-id>:role/<kinesis-role-name>,StreamArn=arn:aws:kinesis:<aws-region>:<account-id>:stream/<stream-name>,MessageFormat=json-unformatted,
IncludeControlDetails=true,IncludeTransactionDetails=true,IncludePartitionValue=true,PartitionIncludeSchemaTable=true,
IncludeTableAlterOperations=true
```

**Configurações da tarefa de carga máxima com vários threads**

Para ajudar a aumentar a velocidade da transferência, AWS DMS oferece suporte a uma carga completa multisegmentada em uma instância de destino do Kinesis Data Streams. O DMS oferece suporte a esse multithreading com configurações de tarefa que incluem o seguinte:
+ `MaxFullLoadSubTasks`: utilize esta opção para indicar o número máximo de tabelas de origem a serem carregadas em paralelo. O DMS carrega cada tabela na tabela de destino do Kinesis correspondente utilizando uma subtarefa dedicada. O padrão é 8; o valor máximo é 49.
+ `ParallelLoadThreads`— Use essa opção para especificar o número de threads AWS DMS usados para carregar cada tabela em sua tabela de destino do Kinesis. O valor máximo para um destino do Kinesis Data Streams é 32. Você pode solicitar o aumento desse limite máximo.
+ `ParallelLoadBufferSize`: utilize essa opção para especificar o número máximo de registros a serem armazenados em buffer utilizado pelos threads de carga paralela para carregar dados no destino do Kinesis. O valor padrão é 50. Valor máximo de 1.000. Use essa configuração com `ParallelLoadThreads`; `ParallelLoadBufferSize` é válido somente quando há mais de um thread.
+ `ParallelLoadQueuesPerThread`: utilize esta opção para especificar o número de filas que cada thread simultâneo acessa para extrair registros de dados das filas e gerar uma carga em lote para o destino. O padrão é um. No entanto, para destinos do Kinesis de vários tamanhos de carga útil, o intervalo válido é de 5 a 512 filas por thread.

**Configurações da tarefa de carga de CDC multithread**

É possível melhorar o desempenho da captura de dados de alterações (CDC) para endpoints de destino de streaming de dados em tempo real, como o Kinesis, utilizando configurações de tarefa para modificar o comportamento da chamada da API `PutRecords`. Para fazer isso, especifique o número de threads simultâneos, filas por thread e o número de registros a serem armazenados em um buffer usando as configurações da tarefa `ParallelApply*`. Por exemplo, suponha que você queira executar um carregamento de CDC e aplicar 128 threads em paralelo. Você também quer acessar 64 filas por thread, com 50 registros armazenados por buffer. 

Para promover o desempenho do CDC, AWS DMS oferece suporte a estas configurações de tarefas:
+ `ParallelApplyThreads`— Especifica o número de threads simultâneos que são AWS DMS usados durante o carregamento do CDC para enviar registros de dados para um endpoint de destino do Kinesis. O valor padrão é zero (0) e o valor máximo é 32.
+ `ParallelApplyBufferSize`: especifica o número máximo de registros a serem armazenados em cada fila de buffer para threads simultâneos enviarem para um endpoint de destino do Kinesis durante uma carga de CDC. O valor padrão é 100 e o valor máximo é 1.000. Use essa opção quando `ParallelApplyThreads` especificar mais de um thread. 
+ `ParallelApplyQueuesPerThread`: especifica o número de filas que cada thread acessa para extrair registros de dados das filas e gerar uma carga em lote para um endpoint do Kinesis durante a CDC. O valor padrão é 1 e o valor máximo é 512.

Ao usar configurações da tarefa `ParallelApply*`, o `partition-key-type` padrão é a `primary-key` da tabela, não o `schema-name.table-name`.

## Utilizar uma imagem anterior para visualizar valores originais de linhas da CDC para um fluxo de dados do Kinesis como destino
<a name="CHAP_Target.Kinesis.BeforeImage"></a>

Ao gravar atualizações da CDC em um destino de streaming de dados, como o Kinesis, é possível visualizar os valores originais de linhas do banco de dados de origem antes da alteração por uma atualização. Para tornar isso possível, AWS DMS preenche uma *imagem anterior* dos eventos de atualização com base nos dados fornecidos pelo mecanismo do banco de dados de origem. 

Diferentes mecanismos de banco de dados de origem fornecem diferentes quantidades de informações para uma imagem anterior: 
+ O Oracle fornece atualizações para colunas somente se elas forem alteradas. 
+ O PostgreSQL fornece somente dados para colunas que fazem parte da chave primária (alterada ou não). Para fornecer dados para todas as colunas (alteradas ou não), você precisa definir `REPLICA_IDENTITY` como `FULL` em vez de `DEFAULT`. Observe que você deve escolher cuidadosamente a configuração `REPLICA_IDENTITY` para cada tabela. Se você definir `REPLICA_IDENTITY` como `FULL`, todos os valores da coluna serão gravados continuamente no registro em log de gravação antecipada (WAL). Isso pode causar problemas de desempenho ou de recursos com tabelas que são atualizadas com frequência.
+ O MySQL geralmente fornece dados para todas as colunas, exceto para os tipos de dados BLOB e CLOB (alterados ou não).

Para habilitar a criação de imagem anterior para adicionar valores originais do banco de dados de origem à saída do AWS DMS , use a configuração de tarefa `BeforeImageSettings` ou o parâmetro `add-before-image-columns`. Esse parâmetro aplica uma regra de transformação de coluna. 

`BeforeImageSettings` adiciona um novo atributo JSON a cada operação de atualização com valores coletados do sistema de banco de dados de origem, conforme mostrado a seguir.

```
"BeforeImageSettings": {
    "EnableBeforeImage": boolean,
    "FieldName": string,  
    "ColumnFilter": pk-only (default) / non-lob / all (but only one)
}
```

**nota**  
Aplique somente `BeforeImageSettings` às AWS DMS tarefas que contêm um componente do CDC, como carga total mais tarefas do CDC (que migram dados existentes e replicam as alterações em andamento), ou às tarefas somente do CDC (que replicam somente as alterações de dados). Não aplique `BeforeImageSettings` a tarefas que são somente de carga total.

Para opções `BeforeImageSettings`, aplica-se o seguinte:
+ Defina a opção `EnableBeforeImage` como `true` para habilitar a criação de imagem anterior. O padrão é `false`. 
+ Use a opção `FieldName` para atribuir um nome ao novo atributo JSON. Quando `EnableBeforeImage` for `true`, `FieldName` será necessário e não poderá estar vazio.
+ A opção `ColumnFilter` especifica uma coluna a ser adicionada usando imagem anterior. Para adicionar somente colunas que fazem parte das chaves primárias da tabela, use o valor padrão, `pk-only`. Para adicionar qualquer coluna que tenha um valor de imagem anterior, use `all`. Observe que a imagem anterior não contém colunas com tipos de dados LOB, como CLOB ou BLOB.

  ```
  "BeforeImageSettings": {
      "EnableBeforeImage": true,
      "FieldName": "before-image",
      "ColumnFilter": "pk-only"
    }
  ```

**nota**  
Os destinos do Amazon S3 não são compatíveis com `BeforeImageSettings`. Para destinos do S3, utilize somente a regra de transformação `add-before-image-columns` para executar a criação da imagem anterior durante a CDC.

### Usar uma regra de transformação de imagem anterior
<a name="CHAP_Target.Kinesis.BeforeImage.Transform-Rule"></a>

Como alternativa às configurações de tarefa, é possível usar o parâmetro `add-before-image-columns`, que aplica uma regra de transformação de coluna. Com esse parâmetro, é possível ativar a imagem anterior durante a CDC em destinos de streaming de dados, como o Kinesis. 

Usando `add-before-image-columns` em uma regra de transformação, é possível aplicar um controle mais refinado dos resultados da imagem anterior. As regras de transformação permitem que você use um localizador de objetos que oferece controle sobre as tabelas selecionadas para a regra. Além disso, é possível encadear regras de transformação, o que permite que regras diferentes sejam aplicadas a tabelas diferentes. Depois, você poderá manipular as colunas produzidas usando outras regras. 

**nota**  
Não use o parâmetro `add-before-image-columns` junto com a configuração da tarefa `BeforeImageSettings` na mesma tarefa. Em vez disso, use o parâmetro ou a configuração, mas não ambos, para uma única tarefa.

Um tipo de regra `transformation` com o parâmetro `add-before-image-columns` de uma coluna deve fornecer uma seção `before-image-def`. Por exemplo:

```
    {
      "rule-type": "transformation",
      …
      "rule-target": "column",
      "rule-action": "add-before-image-columns",
      "before-image-def":{
        "column-filter": one-of  (pk-only / non-lob / all),
        "column-prefix": string,
        "column-suffix": string,
      }
    }
```

O valor de `column-prefix` precede um nome de coluna e o valor padrão de `column-prefix` é `BI_`. O valor de `column-suffix` é anexado ao nome da coluna e o padrão é vazio. Não defina `column-prefix` e `column-suffix` como strings vazias.

Escolha um valor para `column-filter`. Para adicionar somente colunas que fazem parte das chaves primárias da tabela, escolha `pk-only`. Escolha `non-lob` para adicionar somente colunas que não sejam do tipo LOB. Ou escolha `all` para adicionar qualquer coluna que tenha um valor de imagem anterior.

### Exemplo de uma regra de transformação de imagem anterior
<a name="CHAP_Target.Kinesis.BeforeImage.Example"></a>

A regra de transformação no exemplo a seguir adiciona uma nova coluna chamada `BI_emp_no` no destino. Portanto, uma instrução como `UPDATE employees SET emp_no = 3 WHERE emp_no = 1;` preenche o campo `BI_emp_no` com 1. Ao gravar atualizações da CDC em destinos do Amazon S3, a coluna `BI_emp_no` possibilita identificar qual linha original foi atualizada.

```
{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "%",
        "table-name": "%"
      },
      "rule-action": "include"
    },
    {
      "rule-type": "transformation",
      "rule-id": "2",
      "rule-name": "2",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "%",
        "table-name": "employees"
      },
      "rule-action": "add-before-image-columns",
      "before-image-def": {
        "column-prefix": "BI_",
        "column-suffix": "",
        "column-filter": "pk-only"
      }
    }
  ]
}
```

Para obter informações sobre como usar a ação da regra `add-before-image-columns`, consulte [Regras de transformação e ações](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

## Pré-requisitos para usar um stream de dados do Kinesis como destino para AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Prerequisites"></a>

### Função do IAM para usar um stream de dados do Kinesis como destino para AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Prerequisites.IAM"></a>

Antes de configurar um stream de dados do Kinesis como destino AWS DMS, certifique-se de criar uma função do IAM. Essa função deve permitir AWS DMS assumir e conceder acesso aos fluxos de dados do Kinesis para os quais estão sendo migrados. O conjunto mínimo de permissões de acesso é mostrado na seguinte política do IAM.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
   {
     "Sid": "1",
     "Effect": "Allow",
     "Principal": {
        "Service": "dms.amazonaws.com"
     },
   "Action": "sts:AssumeRole"
   }
]
}
```

------

O perfil que você utiliza para a migração para um fluxo de dados do Kinesis deve ter as seguintes permissões:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kinesis:DescribeStream",
        "kinesis:PutRecord",
        "kinesis:PutRecords"
      ],
      "Resource": "*"
    }
  ]
}
```

------

### Acessando um stream de dados do Kinesis como destino para AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Prerequisites.Access"></a>

Na AWS DMS versão 3.4.7 e superior, para se conectar a um endpoint do Kinesis, você deve fazer o seguinte:
+ Configure o DMS para usar endpoints da VPC. Para obter mais informações sobre a configuração de endpoints da VPC, consulte [Configurando endpoints VPC para AWS DMS](CHAP_VPC_Endpoints.md).
+ Configure o DMS para usar rotas públicas; ou seja, torne a instância de replicação pública. Para obter mais informações sobre instâncias de replicação públicas, consulte [Instâncias de replicação públicas e privadas](CHAP_ReplicationInstance.PublicPrivate.md).

## Limitações ao usar o Kinesis Data Streams como destino para AWS Database Migration Service
<a name="CHAP_Target.Kinesis.Limitations"></a>

Aplicam-se as seguintes limitações ao utilizar o Kinesis Data Streams como destino:
+ AWS DMS publica cada atualização em um único registro no banco de dados de origem como um registro de dados em um determinado stream de dados do Kinesis, independentemente das transações. No entanto, é possível incluir detalhes da transação para cada registro de dados utilizando parâmetros relevantes da API do `KinesisSettings`.
+ O modo Full LOB não é compatível.
+ O tamanho máximo do LOB compatível é 1 MB.
+ Os Kinesis Data Streams não é compatível com a desduplicação. As aplicações que consumem dados de um fluxo precisam tratar os registros duplicados. Para obter mais informações, consulte [Tratar registros duplicados](https://docs.aws.amazon.com/streams/latest/dev/kinesis-record-processor-duplicates.html) no *Guia do desenvolvedor do Amazon Kinesis Data Streams*.
+ AWS DMS suporta as quatro formas a seguir para chaves de partição:
  + `SchemaName.TableName`: uma combinação de esquema e nome da tabela.
  + `${AttributeName}`: o valor de um dos campos no JSON ou a chave primária da tabela no banco de dados de origem.
  + `transaction-id`: O ID da transação do CDC. Todos os registros da mesma transação vão para a mesma partição.
  + `constant`: um valor literal fixo para cada registro, independentemente da tabela ou dos dados. Todos os registros são enviados para o mesmo valor de chave de partição “constante”, fornecendo uma ordenação global estrita em todas as tabelas.

  ```
  {
      "rule-type": "object-mapping",
      "rule-id": "2",
      "rule-name": "PartitionKeyTypeExample",
      "rule-action": "map-record-to-document",
      "object-locator": {
          "schema-name": "onprem",
          "table-name": "it_system"
      },
      "mapping-parameters": {
          "partition-key-type": "transaction-id | constant | attribute-name | schema-table"
      }
  }
  ```
+ Para obter informações sobre como criptografar dados em repouso no Kinesis Data Streams, consulte [Proteção de dados no Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/server-side-encryption.html.html), no *Guia do desenvolvedor do AWS Key Management Service *. 
+ A configuração do `IncludeTransactionDetails` endpoint só é suportada quando o endpoint de origem é Oracle, SQL Server, PostgreSQL ou MySQL. Para outros tipos de endpoint de origem, os detalhes da transação não serão incluídos.
+ O `BatchApply` não é compatível com um endpoint do Kinesis. A utilização da aplicação em lote (por exemplo, a configuração `BatchApplyEnabled` da tarefa de metadados de destino) para um destino do Kinesis pode resultar em falha da tarefa e perda de dados. Não habilite `BatchApply` ao utilizar o Kinesis como endpoint de destino.
+ Os destinos do Kinesis só são compatíveis com um stream de dados do Kinesis na mesma AWS conta e na Região da AWS mesma instância de replicação.
+ Ao migrar de uma fonte MySQL, os dados não incluem BeforeImage os tipos de dados CLOB e BLOB. Para obter mais informações, consulte [Utilizar uma imagem anterior para visualizar valores originais de linhas da CDC para um fluxo de dados do Kinesis como destino](#CHAP_Target.Kinesis.BeforeImage).
+ AWS DMS não suporta a migração de valores do tipo de `BigInt` dados com mais de 16 dígitos. Para contornar essa limitação, você pode usar a regra de transformação a seguir para converter a coluna `BigInt` em uma string. Para obter mais informações sobre regras transformação, consulte [Regras de transformação e ações](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

  ```
  {
      "rule-type": "transformation",
      "rule-id": "id",
      "rule-name": "name",
      "rule-target": "column",
      "object-locator": {
          "schema-name": "valid object-mapping rule action",
          "table-name": "",
          "column-name": ""
      },
      "rule-action": "change-data-type",
      "data-type": {
          "type": "string",
          "length": 20
      }
  }
  ```
+ Quando várias operações do DML em uma única transação modificam uma coluna de objeto grande (LOB) no banco de dados de origem, o banco de dados de destino retém somente o valor final do LOB da última operação nessa transação. Os valores de LOB intermediários definidos por operações anteriores na mesma transação são sobrescritos, o que pode resultar em possíveis perdas de dados ou inconsistências. Esse comportamento ocorre devido à forma como os dados de LOB são processados durante a replicação.
+ AWS DMS não suporta dados de origem contendo `'\0'` caracteres incorporados ao usar o Kinesis como um endpoint de destino. Os dados contendo `'\0'` caracteres incorporados serão truncados no primeiro `'\0'` caractere.

## Utilizar o mapeamento de objetos para migrar dados para um fluxo de dados do Kinesis
<a name="CHAP_Target.Kinesis.ObjectMapping"></a>

AWS DMS usa regras de mapeamento de tabelas para mapear dados da fonte para o stream de dados do Kinesis de destino. Para mapear dados para um fluxo de destino, utilize um tipo de regra de mapeamento de tabela chamado mapeamento de objetos. Utilize o mapeamento de objetos para definir como os registros de dados na origem são mapeados para os registros de dados publicados para o fluxo de dados do Kinesis. 

O fluxo de dados do Kinesis não tem estrutura predefinida além de uma chave de partição. Em uma regra de mapeamento de objeto, os valores possíveis de um `partition-key-type` para registros de dados são `schema-table`, `transaction-id`, `primary-key` `constant` e `attribute-name`.

Para criar uma regra de mapeamento de objetos, especifique `rule-type` como `object-mapping`. Essa regra especifica o tipo de mapeamento de objeto que você deseja usar. 

A estrutura da regra é a seguinte:

```
{
    "rules": [
        {
            "rule-type": "object-mapping",
            "rule-id": "id",
            "rule-name": "name",
            "rule-action": "valid object-mapping rule action",
            "object-locator": {
                "schema-name": "case-sensitive schema name",
                "table-name": ""
            }
        }
    ]
}
```

AWS DMS atualmente suporta `map-record-to-record` e `map-record-to-document` como os únicos valores válidos para o `rule-action` parâmetro. Essas configurações afetam valores que não são excluídos como parte da lista de atributos `exclude-columns`. Os `map-record-to-document` valores `map-record-to-record` e especificam como AWS DMS manipula esses registros por padrão. Esses valores não afetam os mapeamentos de atributos de forma alguma. 

Utilize `map-record-to-record` ao migrar de um banco de dados relacional para um fluxo de dados do Kinesis. Esse tipo de regra utiliza o valor `taskResourceId.schemaName.tableName` encontrado no banco de dados relacional como a chave de partição no fluxo de dados do Kinesis e cria um atributo para cada coluna no banco de dados de origem. 

Ao utilizar `map-record-to-record`, observe o seguinte:
+ Essa configuração afeta somente as colunas excluídas pela lista `exclude-columns`.
+ Para cada coluna desse tipo, AWS DMS cria um atributo correspondente no tópico de destino.
+ AWS DMS cria esse atributo correspondente independentemente de a coluna de origem ser usada em um mapeamento de atributos. 

Utilize `map-record-to-document` para colocar colunas de origem em um único documento sem formatação no fluxo de destino apropriado utilizando o nome do atributo “\$1doc”. O AWS DMS coloca os dados em um único mapa sem formatação na origem chamada “`_doc`”. Esse posicionamento se aplica a qualquer coluna na tabela de origem que não aparece na lista de atributos `exclude-columns`.

Uma maneira de compreender o `map-record-to-record` é vê-lo em ação. Para este exemplo, suponha que você está começando com uma linha de tabela do banco de dados relacional com a seguinte estrutura de dados:


| FirstName | LastName | StoreId | HomeAddress | HomePhone | WorkAddress | WorkPhone | DateofBirth | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| Randy | Marsh | 5 | 221B Baker Street | 1234567890 | 31 Spooner Street, Quahog  | 9876543210 | 29/02/1988 | 

Para migrar essas informações de um esquema chamado `Test` para um fluxo de dados do Kinesis, crie regras para mapear os dados para o fluxo de destino. A regra a seguir ilustra o mapeamento. 

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "DefaultMapToKinesis",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customers"
            }
        }
    ]
}
```

Veja a seguir uma ilustração do formato do registro resultante no fluxo de dados do Kinesis: 
+ StreamName: XXX
+ PartitionKey: Test.Customers //schmaname.tableName
+ Data: //A seguinte mensagem do JSON

  ```
    {
       "FirstName": "Randy",
       "LastName": "Marsh",
       "StoreId":  "5",
       "HomeAddress": "221B Baker Street",
       "HomePhone": "1234567890",
       "WorkAddress": "31 Spooner Street, Quahog",
       "WorkPhone": "9876543210",
       "DateOfBirth": "02/29/1988"
    }
  ```

No entanto, suponha que você utilize as mesmas regras, mas altere o parâmetro `rule-action` para `map-record-to-document` e exclua determinadas colunas. A regra a seguir ilustra o mapeamento.

```
{
	"rules": [
	   {
			"rule-type": "selection",
			"rule-id": "1",
			"rule-name": "1",
			"rule-action": "include",
			"object-locator": {
				"schema-name": "Test",
				"table-name": "%"
			}
		},
		{
			"rule-type": "object-mapping",
			"rule-id": "2",
			"rule-name": "DefaultMapToKinesis",
			"rule-action": "map-record-to-document",
			"object-locator": {
				"schema-name": "Test",
				"table-name": "Customers"
			},
			"mapping-parameters": {
				"exclude-columns": [
					"homeaddress",
					"homephone",
					"workaddress",
					"workphone"
				]
			}
		}
	]
}
```

Nesse caso, as colunas não listadas no parâmetro `exclude-columns`, `FirstName`, `LastName`, `StoreId` e `DateOfBirth` são mapeadas para `_doc`. Veja a seguir o formato do registro resultante. 

```
       {
            "data":{
                "_doc":{
                    "FirstName": "Randy",
                    "LastName": "Marsh",
                    "StoreId":  "5",
                    "DateOfBirth": "02/29/1988"
                }
            }
        }
```

### Reestruturação de dados com mapeamento de atributo
<a name="CHAP_Target.Kinesis.AttributeMapping"></a>

É possível reestruturar os dados enquanto estiver migrando-os para um fluxo de dados do Kinesis utilizando um mapa de atributo. Por exemplo, você pode combinar vários campos na origem em um único campo no destino. O mapa de atributo a seguir ilustra como reestruturar os dados.

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToKinesis",
            "rule-action": "map-record-to-record",
            "target-table-name": "CustomerData",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customers"
            },
            "mapping-parameters": {
                "partition-key-type": "attribute-name",
                "partition-key-name": "CustomerName",
                "exclude-columns": [
                    "firstname",
                    "lastname",
                    "homeaddress",
                    "homephone",
                    "workaddress",
                    "workphone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${lastname}, ${firstname}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "document",
                        "attribute-sub-type": "json",
                        "value": {
                            "Home": {
                                "Address": "${homeaddress}",
                                "Phone": "${homephone}"
                            },
                            "Work": {
                                "Address": "${workaddress}",
                                "Phone": "${workphone}"
                            }
                        }
                    }
                ]
            }
        }
    ]
}
```

Para definir um valor constante para`partition-key`, especifique`"partition-key-type: "constant"`, isso define o valor da partição como`constant`. Por exemplo, é possível fazer isso para forçar o armazenamento de todos os dados em um único fragmento. O mapeamento a seguir ilustra esse método. 

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToKinesis",
            "rule-action": "map-record-to-document",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customer"
            },
            "mapping-parameters": {
                "partition-key-type": "constant",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${FirstName},${LastName}"

                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": {
                            "Home": {
                                "Address": "${HomeAddress}",
                                "Phone": "${HomePhone}"
                            },
                            "Work": {
                                "Address": "${WorkAddress}",
                                "Phone": "${WorkPhone}"
                            }
                        }
                    },
                    {
                        "target-attribute-name": "DateOfBirth",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${DateOfBirth}"
                    }
                ]
            }
        }
    ]
}
```

**nota**  
O valor do `partition-key` para um registro de controle para uma tabela específica é `TaskId.SchemaName.TableName`. O valor do `partition-key` para um registro de controle específico para uma tarefa é o `TaskId` daquele registro. A especificação de um valor do `partition-key` no mapeamento do objeto não tem impacto sobre o `partition-key` no caso dos registros de controle.  
 Quando `partition-key-type` está definido como `attribute-name` em uma regra de mapeamento de tabela, você deve especificar`partition-key-name`, que deve fazer referência a uma coluna da tabela de origem ou a uma coluna personalizada definida no mapeamento. Além disso, `attribute-mappings` deve ser fornecido para definir como as colunas de origem são mapeadas para o Kinesis Stream de destino.

### Formato de mensagem do Kinesis Data Streams
<a name="CHAP_Target.Kinesis.Messageformat"></a>

A saída JSON é simplesmente uma lista de pares chave/valor. Um formato de mensagem JSON\$1UNFORMATTED é uma string JSON de linha única com novo delimitador de linha.

AWS DMS fornece os seguintes campos reservados para facilitar o consumo dos dados do Kinesis Data Streams: 

**RecordType**  
O tipo de registro pode ser dados ou controle. Os *registros de dados *representam as linhas reais na origem. Os *registros de controle* são relacionados a importantes eventos no stream, como a reinicialização de uma tarefa, por exemplo.

**Operation**  
Para registros de dados, a operação pode ser `load`, `insert`, `update` ou `delete`.  
Para registros de controle, a operação pode ser `create-table`, `rename-table`, `drop-table`, `change-columns`, `add-column`, `drop-column`, `rename-column` ou `column-type-change`.

**SchemaName**  
O esquema de origem para o registro. Esse campo pode estar vazio para um registro de controle.

**TableName**  
A tabela de origem para um registro. Esse campo pode estar vazio para um registro de controle.

**Timestamp**  
A marca de data e hora de quando a mensagem do JSON foi criada. O campo é formatado com o formato ISO 8601.

# Usando o Apache Kafka como alvo para AWS Database Migration Service
<a name="CHAP_Target.Kafka"></a>

Você pode usar AWS DMS para migrar dados para um cluster Apache Kafka. O Apache Kafka é uma plataforma de streaming distribuída. É possível utilizar o Apache Kafka para a ingestão e o processamento de dados de streaming em tempo real.

AWS também oferece Amazon Managed Streaming for Apache Kafka (Amazon MSK) para uso como destino. AWS DMS O Amazon MSK é um serviço de streaming totalmente gerenciado do Apache Kafka que simplifica a implementação e o gerenciamento de instâncias do Apache Kafka. Ele funciona com versões de código aberto do Apache Kafka, e você acessa instâncias do Amazon MSK como AWS DMS destinos, exatamente como qualquer instância do Apache Kafka. Para obter mais informações, consulte [O que é o Amazon MSK?](https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html) no *Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka*.

Um cluster do Kafka armazena fluxos de registros em categorias chamadas tópicos que são divididos em partições. As *partições* são sequências de registros de dados identificadas exclusivamente (mensagens) em um tópico. As partições podem ser distribuídas entre vários agentes em um cluster para permitir o processamento paralelo dos registros de um tópico. Para obter mais informações sobre tópicos e partições e sua distribuição no Apache Kafka, consulte [Tópicos e logs](https://kafka.apache.org/documentation/#intro_topics) e [Distribuição](https://kafka.apache.org/documentation/#intro_distribution).

O cluster do Kafka pode ser uma instância do Amazon MSK, um cluster em execução em uma instância do Amazon EC2 ou um cluster on-premises. Uma instância do Amazon MSK ou um cluster em uma instância do Amazon EC2 pode estar na mesma VPC ou em uma diferente. Se o cluster estiver on-premises, será possível utilizar o seu próprio servidor de nomes on-premises para a instância de replicação para resolver o nome do host do cluster. Para obter informações sobre como configurar um servidor de nomes na instância de replicação, consulte [Utilização do seu próprio servidor de nomes on-premises](CHAP_BestPractices.md#CHAP_BestPractices.Rte53DNSResolver). Para obter mais informações sobre a configuração de uma rede, consulte [Configurar uma rede para uma instância de replicação](CHAP_ReplicationInstance.VPC.md).

Ao utilizar um cluster do Amazon MSK, verifique se o grupo de segurança permite acesso da instância de replicação. Para obter informações sobre como alterar o grupo de segurança de um cluster do Amazon MSK, consulte [Alterar o grupo de segurança de um cluster do Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/change-security-group.html).

AWS Database Migration Service publica registros em um tópico do Kafka usando JSON. Durante a conversão, o AWS DMS serializa cada registro do banco de dados de origem em um par atributo-valor no formato JSON.

Para migrar os dados de uma fonte de dados compatível para um cluster de destino do Kafka, utilize o mapeamento de objetos. Com o mapeamento de objetos, você determina como estruturar os registros de dados no tópico de destino. Também é possível definir uma chave de partição para cada tabela, que será utilizada pelo Apache Kafka para agrupar os dados em suas partições. 

Atualmente, AWS DMS oferece suporte a um único tópico por tarefa. Para uma única tarefa com várias tabelas, todas as mensagens vão para um único tópico. Cada mensagem inclui uma seção de metadados que identifica o esquema e a tabela de destino. AWS DMS as versões 3.4.6 e superiores oferecem suporte à replicação multitópica usando mapeamento de objetos. Para obter mais informações, consulte [Replicação de multitópico utilizando o mapeamento de objetos](#CHAP_Target.Kafka.MultiTopic).

**Configurações do endpoint do Apache Kafka**

Você pode especificar os detalhes da conexão por meio das configurações do endpoint no AWS DMS console ou da `--kafka-settings` opção na CLI. Os requisitos para cada configuração são os seguintes:
+ `Broker`: especifique a localização de um ou mais agentes no cluster do Kafka na forma de uma lista separada por vírgulas de cada `broker-hostname:port`. Um exemplo é `"ec2-12-345-678-901.compute-1.amazonaws.com:2345,ec2-10-987-654-321.compute-1.amazonaws.com:9876"`. Essa configuração pode especificar os locais de qualquer um ou de todos os agentes no cluster. Todos os agentes de cluster se comunicam para lidar com o particionamento de registros de dados migrados para o tópico.
+ `Topic`: (opcional) especifique o nome do tópico com um comprimento máximo de 255 letras e símbolos. É possível utilizar ponto (.), sublinhado (\$1) e sinal de subtração (-). Os nomes de tópicos com um ponto (.) ou sublinhado (\$1) podem colidir em estruturas de dados internas. Utilize qualquer um, mas não esses dois símbolos no nome do tópico. Se você não especificar um nome de tópico, AWS DMS use `"kafka-default-topic"` como tópico de migração.
**nota**  
Para AWS DMS criar um tópico de migração especificado por você ou o tópico padrão, defina-o `auto.create.topics.enable = true` como parte da configuração do cluster do Kafka. Para obter mais informações, consulte [Limitações ao usar o Apache Kafka como alvo para AWS Database Migration Service](#CHAP_Target.Kafka.Limitations).
+ `MessageFormat`: o formato de saída dos registros criados no endpoint. O formato da mensagem é `JSON` (padrão) ou `JSON_UNFORMATTED` (uma única linha sem guia).
+ `MessageMaxBytes`: o tamanho máximo em bytes dos registros criados no endpoint. O padrão é 1.000.000.
**nota**  
Você só pode usar o AWS CLI/SDK para mudar `MessageMaxBytes` para um valor não padrão. Por exemplo, para modificar o endpoint existente do Kafka e alterar `MessageMaxBytes`, utilize o comando a seguir.  

  ```
  aws dms modify-endpoint --endpoint-arn your-endpoint 
  --kafka-settings Broker="broker1-server:broker1-port,broker2-server:broker2-port,...",
  Topic=topic-name,MessageMaxBytes=integer-of-max-message-size-in-bytes
  ```
+ `IncludeTransactionDetails`: fornece informações detalhadas sobre transações do banco de dados de origem. Essas informações incluem um timestamp de confirmação, uma posição no log e valores para `transaction_id`, `previous_transaction_id` e `transaction_record_id` (o deslocamento de registro dentro de uma transação). O padrão é `false`.
+ `IncludePartitionValue`: mostra o valor da partição na saída da mensagem do Kafka, a menos que o tipo de partição seja `schema-table-type`. O padrão é `false`.
+ `PartitionIncludeSchemaTable`: prefixa os nomes de esquema e de tabela em valores de partições, quando o tipo de partição for `primary-key-type`. Isso aumenta a distribuição de dados entre partições do Kafka. Por exemplo, suponha que um esquema `SysBench` tenha milhares de tabelas, e cada tabela tenha apenas um intervalo limitado para uma chave primária. Nesse caso, a mesma chave primária é enviada de milhares de tabelas para a mesma partição, o que provoca o controle de utilização. O padrão é `false`.
+ `IncludeTableAlterOperations`: inclui todas as operações da linguagem de definição de dados (DDL) que alteram a tabela nos dados de controle, como `rename-table`, `drop-table`, `add-column`, `drop-column` e `rename-column`. O padrão é `false`. 
+ `IncludeControlDetails`: mostra informações detalhadas de controle para definição de tabela, definição de coluna e alterações de tabela e coluna na saída de mensagem do Kafka. O padrão é `false`.
+ `IncludeNullAndEmpty`: inclui colunas NULL e vazias no destino. O padrão é `false`.
+ `SecurityProtocol`: define uma conexão segura a um endpoint de destino do Kafka utilizando Transport Layer Security (TLS). As opções incluem `ssl-authentication`, `ssl-encryption` e `sasl-ssl`. A utilização de `sasl-ssl` requer `SaslUsername` e `SaslPassword`.
+ `SslEndpointIdentificationAlgorithm`: define a verificação do nome de host para o certificado. Essa configuração é compatível com o AWS DMS versão 3.5.1 e posteriores. As opções incluem o seguinte: 
  + `NONE`: desabilite a verificação do nome do host do broker na conexão do cliente.
  + `HTTPS`: habilite a verificação do nome do host do broker na conexão do cliente.
+ `useLargeIntegerValue`— Use int de até 18 dígitos em vez de converter ints como duplos, disponível a partir da AWS DMS versão 3.5.4. O padrão é falso.

É possível utilizar configurações para ajudar a aumentar a velocidade da transferência. Para fazer isso, o AWS DMS é compatível com uma carga multithreaded completa para um cluster de destino do Apache Kafka. O AWS DMS é compatível com esse multithreading com configurações de tarefa que incluem o seguinte:
+ `MaxFullLoadSubTasks`— Use essa opção para indicar o número máximo de tabelas de origem a serem carregadas paralelamente. AWS DMS carrega cada tabela em sua tabela de destino correspondente do Kafka usando uma subtarefa dedicada. O padrão é 8; o valor máximo é 49.
+ `ParallelLoadThreads`— Use essa opção para especificar o número de segmentos AWS DMS usados para carregar cada tabela em sua tabela de destino do Kafka. O valor máximo para um destino do Apache Kafka é 32. Você pode solicitar o aumento desse limite máximo.
+ `ParallelLoadBufferSize`: utilize esta opção para especificar o número máximo de registros a serem armazenados no buffer utilizado pelos threads de carregamento paralelo utilizam para carregar dados no destino do Kafka. O valor padrão é 50. Valor máximo de 1.000. Use essa configuração com `ParallelLoadThreads`; `ParallelLoadBufferSize` é válido somente quando há mais de um thread.
+ `ParallelLoadQueuesPerThread`: utilize esta opção para especificar o número de filas que cada thread simultâneo acessa para extrair registros de dados das filas e gerar uma carga em lote para o destino. O padrão é um. O máximo é 512.

É possível melhorar o desempenho da captura de dados de alteração (CDC) para endpoints do Kafka ajustando as configurações da tarefa para threads paralelos e operações em massa. Para fazer isso, especifique o número de threads simultâneos, filas por thread e o número de registros a serem armazenados em um buffer usando as configurações da tarefa `ParallelApply*`. Por exemplo, suponha que você queira executar um carregamento de CDC e aplicar 128 threads em paralelo. Você também quer acessar 64 filas por thread, com 50 registros armazenados por buffer. 

Para promover o desempenho do CDC, AWS DMS oferece suporte a estas configurações de tarefas:
+ `ParallelApplyThreads`— Especifica o número de threads simultâneos que são AWS DMS usados durante um carregamento do CDC para enviar registros de dados para um endpoint de destino do Kafka. O valor padrão é zero (0) e o valor máximo é 32.
+ `ParallelApplyBufferSize`: especifica o número máximo de registros a serem armazenados em cada fila de buffer para threads simultâneos enviarem para um endpoint de destino do Kafka durante uma carga de CDC. O valor padrão é 100 e o valor máximo é 1.000. Use essa opção quando `ParallelApplyThreads` especificar mais de um thread. 
+ `ParallelApplyQueuesPerThread`: especifica o número de filas que cada thread acessa para extrair registros de dados das filas e gerar uma carga em lote para um endpoint do Kafka durante a CDC. O padrão é um. O máximo é 512.

Ao usar configurações da tarefa `ParallelApply*`, o `partition-key-type` padrão é a `primary-key` da tabela, não o `schema-name.table-name`.

## Conectar-se ao Kafka utilizando Transport Layer Security (TLS)
<a name="CHAP_Target.Kafka.TLS"></a>

O cluster do Kafka aceita conexões seguras utilizando Transport Layer Security (TLS). Com o DMS, é possível utilizar qualquer uma das três opções de protocolo de segurança a seguir para proteger uma conexão de endpoint do Kafka.

**Criptografia SSL (`server-encryption`)**  
Os clientes validam a identidade do servidor por meio do certificado do servidor. Uma conexão criptografada é feita entre o servidor e o cliente.

**Autenticação SSL (`mutual-authentication`)**  
O servidor e o cliente validam a identidade entre si por meio de seus próprios certificados. Uma conexão criptografada é feita entre o servidor e o cliente.

**SASL-SSL (`mutual-authentication`)**  
O método Simple Authentication and Security Layer (SASL) substitui o certificado do cliente por um nome de usuário e senha para validar a identidade do cliente. Especificamente, forneça um nome de usuário e uma senha que o servidor registrou para que o servidor possa validar a identidade de um cliente. Uma conexão criptografada é feita entre o servidor e o cliente.

**Importante**  
O Apache Kafka e o Amazon MSK aceitam certificados resolvidos. Essa é uma limitação conhecida do Kafka e do Amazon MSK a ser resolvida. Para obter mais informações, consulte [Problemas do Apache Kafka, KAFKA-3700](https://issues.apache.org/jira/browse/KAFKA-3700).  
Se você estiver usando o Amazon MSK, considere usar listas de controle de acesso (ACLs) como uma solução alternativa para essa limitação conhecida. Para obter mais informações sobre o uso ACLs, consulte a seção [Apache Kafka ACLs do Guia do desenvolvedor](https://docs.aws.amazon.com//msk/latest/developerguide/msk-acls.html) do *Amazon Managed Streaming for Apache Kafka*.  
Se estiver utilizando um cluster do Kafka autogerenciado, consulte [Comentário datado de 18/out/21](https://issues.apache.org/jira/browse/KAFKA-3700?focusedCommentId=16658376) para obter informações sobre como configurar o cluster.

### Utilizar criptografia SSL com o Amazon MSK ou um cluster do Kafka autogerenciado
<a name="CHAP_Target.Kafka.TLS.SSLencryption"></a>

É possível utilizar a criptografia SSL para proteger uma conexão de endpoint ao Amazon MSK ou um cluster do Kafka autogerenciado. Ao utilizar o método de autenticação de criptografia SSL, os clientes validam a identidade de um servidor por meio do certificado do servidor. Uma conexão criptografada é feita entre o servidor e o cliente.

**Como utilizar a criptografia SSL para conectar-se ao Amazon MSK**
+ Defina a configuração do endpoint do protocolo de segurança (`SecurityProtocol`) utilizando a opção `ssl-encryption` ao criar o endpoint do Kafka de destino. 

  O exemplo de JSON a seguir define o protocolo de segurança como criptografia SSL.

```
"KafkaSettings": {
    "SecurityProtocol": "ssl-encryption", 
}
```

**Para utilizar a criptografia SSL para um cluster do Kafka autogerenciado**

1. Se estiver utilizando uma Autoridade de Certificação (CA) privada no cluster do Kafka on-premises, faça upload do certificado da CA privada e obtenha um nome do recurso da Amazon (ARN). 

1. Defina a configuração do endpoint do protocolo de segurança (`SecurityProtocol`) utilizando a opção `ssl-encryption` ao criar o endpoint do Kafka de destino. O exemplo de JSON a seguir define o protocolo de segurança como `ssl-encryption`.

   ```
   "KafkaSettings": {
       "SecurityProtocol": "ssl-encryption", 
   }
   ```

1. Se estiver utilizando uma CA privada, defina `SslCaCertificateArn` no ARN obtido na primeira etapa acima.

### Utilizar autenticação SSL
<a name="CHAP_Target.Kafka.TLS.SSLauthentication"></a>

É possível utilizar a autenticação SSL para proteger uma conexão de endpoint ao Amazon MSK ou um cluster do Kafka autogerenciado.

Para ativar a autenticação e a criptografia do cliente utilizando a autenticação SSL para conectar-se ao Amazon MSK, faça o seguinte:
+ Prepare uma chave privada e um certificado público para o Kafka.
+ Faça upload dos certificados no gerenciador de certificados do DMS.
+ Crie um endpoint de destino do Kafka com o certificado correspondente ARNs especificado nas configurações do endpoint do Kafka.

**Como preparar uma chave privada e um certificado público para o Amazon MSK.**

1. Crie uma instância do EC2 e configure um cliente para utilizar a autenticação conforme descrito nas etapas de 1 a 9 na seção [Autenticação de cliente](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html) do *Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka*.

   Depois de concluir essas etapas, você tem o ARN de um certificado (o ARN do certificado público salvo no ACM) e uma chave privada contida em um arquivo `kafka.client.keystore.jks`.

1. Obtenha o certificado público e copie o certificado no arquivo `signed-certificate-from-acm.pem`, utilizando o comando a seguir:

   ```
   aws acm-pca get-certificate --certificate-authority-arn Private_CA_ARN --certificate-arn Certificate_ARN
   ```

   O comando retorna informações semelhantes às do exemplo a seguir.

   ```
   {"Certificate": "123", "CertificateChain": "456"}
   ```

   Copie o equivalente de `"123"` no arquivo `signed-certificate-from-acm.pem`.

1. Obtenha a chave privada importando a chave `msk-rsa` de `kafka.client.keystore.jks to keystore.p12`, conforme mostrado no exemplo a seguir.

   ```
   keytool -importkeystore \
   -srckeystore kafka.client.keystore.jks \
   -destkeystore keystore.p12 \
   -deststoretype PKCS12 \
   -srcalias msk-rsa-client \
   -deststorepass test1234 \
   -destkeypass test1234
   ```

1. Utilize o comando a seguir para exportar `keystore.p12` para o formato `.pem`. 

   ```
   Openssl pkcs12 -in keystore.p12 -out encrypted-private-client-key.pem –nocerts
   ```

   A mensagem **Inserir frase secreta do PEM** é exibida e identifica a chave aplicada para criptografar o certificado.

1. Remova os atributos bag e os atributos-chave do arquivo `.pem` para garantir que a primeira linha comece com a sequência de caracteres a seguir.

   ```
                                   ---BEGIN ENCRYPTED PRIVATE KEY---
   ```

**Como fazer upload de um certificado público e de uma chave privada no gerenciador de certificados do DMS e testar a conexão ao Amazon MSK**

1. Faça upload do gerenciador de certificados do DMS utilizando o comando a seguir.

   ```
   aws dms import-certificate --certificate-identifier signed-cert --certificate-pem file://path to signed cert
   aws dms import-certificate --certificate-identifier private-key —certificate-pem file://path to private key
   ```

1. Crie um endpoint de destino do Amazon MSK e teste a conexão para garantir que a autenticação TLS funcione.

   ```
   aws dms create-endpoint --endpoint-identifier $endpoint-identifier --engine-name kafka --endpoint-type target --kafka-settings 
   '{"Broker": "b-0.kafka260.aaaaa1.a99.kafka.us-east-1.amazonaws.com:0000", "SecurityProtocol":"ssl-authentication", 
   "SslClientCertificateArn": "arn:aws:dms:us-east-1:012346789012:cert:",
   "SslClientKeyArn": "arn:aws:dms:us-east-1:0123456789012:cert:","SslClientKeyPassword":"test1234"}'
   aws dms test-connection -replication-instance-arn=$rep_inst_arn —endpoint-arn=$kafka_tar_arn_msk
   ```

**Importante**  
É possível utilizar a autenticação SSL para proteger uma conexão a um cluster do Kafka autogerenciado. Em alguns casos, é possível utilizar uma Autoridade de Certificação (CA) privada no cluster do Kafka on-premises. Nesse caso, faça upload da cadeia de CAs, do certificado público e da chave privada para o gerenciador de certificados do DMS. Utilize o nome do recurso da Amazon (ARN) correspondente nas configurações do endpoint ao criar o endpoint de destino do Kafka on-premises.

**Como preparar uma chave privada e um certificado assinado para um cluster do Kafka autogerenciado**

1. Gere um par de chaves como mostrado no exemplo a seguir.

   ```
   keytool -genkey -keystore kafka.server.keystore.jks -validity 300 -storepass your-keystore-password 
   -keypass your-key-passphrase -dname "CN=your-cn-name" 
   -alias alias-of-key-pair -storetype pkcs12 -keyalg RSA
   ```

1. Gere uma solicitação de assinatura de certificado (CSR). 

   ```
   keytool -keystore kafka.server.keystore.jks -certreq -file server-cert-sign-request-rsa -alias on-premise-rsa -storepass your-key-store-password 
   -keypass your-key-password
   ```

1. Utilize a CA no truststore do cluster para assinar a CSR. Se não tiver uma CA, você poderá criar sua própria CA privada.

   ```
   openssl req -new -x509 -keyout ca-key -out ca-cert -days validate-days                            
   ```

1. Importe `ca-cert` para o truststore e o keystore do servidor. Se você não tiver um truststore, utilize o seguinte comando para criar o truststore e importar `ca-cert ` nele. 

   ```
   keytool -keystore kafka.server.truststore.jks -alias CARoot -import -file ca-cert
   keytool -keystore kafka.server.keystore.jks -alias CARoot -import -file ca-cert
   ```

1. Assine o certificado.

   ```
   openssl x509 -req -CA ca-cert -CAkey ca-key -in server-cert-sign-request-rsa -out signed-server-certificate.pem 
   -days validate-days -CAcreateserial -passin pass:ca-password
   ```

1. Importe o certificado assinado para o keystore.

   ```
   keytool -keystore kafka.server.keystore.jks -import -file signed-certificate.pem -alias on-premise-rsa -storepass your-keystore-password 
   -keypass your-key-password
   ```

1. Utilize o comando a seguir para importar a chave `on-premise-rsa` de `kafka.server.keystore.jks` para `keystore.p12`.

   ```
   keytool -importkeystore \
   -srckeystore kafka.server.keystore.jks \
   -destkeystore keystore.p12 \
   -deststoretype PKCS12 \
   -srcalias on-premise-rsa \
   -deststorepass your-truststore-password \
   -destkeypass your-key-password
   ```

1. Utilize o comando a seguir para exportar `keystore.p12` para o formato `.pem`.

   ```
   Openssl pkcs12 -in keystore.p12 -out encrypted-private-server-key.pem –nocerts
   ```

1. Faça upload de `encrypted-private-server-key.pem`, `signed-certificate.pem` e `ca-cert` para o gerenciador de certificados do DMS.

1. Crie um endpoint usando o retornado ARNs.

   ```
   aws dms create-endpoint --endpoint-identifier $endpoint-identifier --engine-name kafka --endpoint-type target --kafka-settings 
   '{"Broker": "b-0.kafka260.aaaaa1.a99.kafka.us-east-1.amazonaws.com:9092", "SecurityProtocol":"ssl-authentication", 
   "SslClientCertificateArn": "your-client-cert-arn","SslClientKeyArn": "your-client-key-arn","SslClientKeyPassword":"your-client-key-password", 
   "SslCaCertificateArn": "your-ca-certificate-arn"}'
                               
   aws dms test-connection -replication-instance-arn=$rep_inst_arn —endpoint-arn=$kafka_tar_arn_msk
   ```

### Utilizar a autenticação SASL-SSL para se conectar ao Amazon MSK
<a name="CHAP_Target.Kafka.TLS.SSL-SASL"></a>

O método Simple Authentication and Security Layer (SASL) utiliza um nome de usuário e uma senha para validar a identidade de um cliente e faz uma conexão criptografada entre o servidor e o cliente.

Para utilizar o SASL, primeiro crie um nome de usuário e uma senha seguros ao configurar o cluster do Amazon MSK. Para obter uma descrição de como configurar um nome de usuário e senha seguros para um cluster Amazon MSK, consulte Como [configurar a SASL/SCRAM autenticação para um cluster Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/msk-password.html#msk-password-tutorial) no Guia do desenvolvedor do *Amazon Managed Streaming for Apache Kafka*.

Crie o endpoint de destino do Kafka, defina a configuração do endpoint do protocolo de segurança (`SecurityProtocol`) utilizando a opção `sasl-ssl`. Defina também as opções `SaslUsername` e `SaslPassword`. Verifique se essas opções são consistentes com o nome de usuário e senha seguros criados ao configurar o cluster do Amazon MSK pela primeira vez, conforme mostrado no exemplo de JSON a seguir.

```
                   
"KafkaSettings": {
    "SecurityProtocol": "sasl-ssl",
    "SaslUsername":"Amazon MSK cluster secure user name",
    "SaslPassword":"Amazon MSK cluster secure password"                    
}
```

**nota**  
Atualmente, AWS DMS oferece suporte somente a SASL-SSL público apoiado pela CA. O DMS não é compatível com SASL-SSL para utilização com o Kafka autogerenciado compatível com a CA privada.
Para autenticação SASL-SSL, AWS DMS suporta o mecanismo SCRAM-SHA-512 por padrão. AWS DMS as versões 3.5.0 e superiores também suportam o mecanismo Plain. Para ser compatível com o mecanismo Plain, defina o parâmetro `SaslMechanism` do tipo de dados da API do `KafkaSettings` como `PLAIN`. É possível usar o tipo de dados `PLAIN` no Kafka, mas não no Amazon for Kafka (MSK).

## Utilizar uma imagem anterior para visualizar os valores originais de linhas da CDC para o Apache Kafka como destino
<a name="CHAP_Target.Kafka.BeforeImage"></a>

Ao gravar as atualizações de CDC em um destino de streaming de dados, como o Kafka, é possível visualizar os valores originais de linhas do banco de dados de origem antes da alteração por uma atualização. Para tornar isso possível, AWS DMS preenche uma *imagem anterior* dos eventos de atualização com base nos dados fornecidos pelo mecanismo do banco de dados de origem. 

Diferentes mecanismos de banco de dados de origem fornecem diferentes quantidades de informações para uma imagem anterior: 
+ O Oracle fornece atualizações para colunas somente se elas forem alteradas. 
+ O PostgreSQL fornece somente dados para colunas que fazem parte da chave primária (alterada ou não). Se a replicação lógica estiver em uso e REPLICA IDENTITY FULL estiver definida para a tabela de origem, você poderá obter informações completas de antes e depois na linha gravada no WALs e disponível aqui.
+ O MySQL geralmente fornece dados para todas as colunas (alteradas ou não).

Para habilitar a criação de imagem anterior para adicionar valores originais do banco de dados de origem à saída do AWS DMS , use a configuração de tarefa `BeforeImageSettings` ou o parâmetro `add-before-image-columns`. Esse parâmetro aplica uma regra de transformação de coluna. 

`BeforeImageSettings` adiciona um novo atributo JSON a cada operação de atualização com valores coletados do sistema de banco de dados de origem, conforme mostrado a seguir.

```
"BeforeImageSettings": {
    "EnableBeforeImage": boolean,
    "FieldName": string,  
    "ColumnFilter": pk-only (default) / non-lob / all (but only one)
}
```

**nota**  
Aplique `BeforeImageSettings` às tarefas de carga máxima e de CDC (que migram dados existentes e replicam alterações contínuas) ou às tarefas de somente CDC (que replicam somente as alterações de dados). Não aplique `BeforeImageSettings` a tarefas que são somente de carga total.

Para opções `BeforeImageSettings`, aplica-se o seguinte:
+ Defina a opção `EnableBeforeImage` como `true` para habilitar a criação de imagem anterior. O padrão é `false`. 
+ Use a opção `FieldName` para atribuir um nome ao novo atributo JSON. Quando `EnableBeforeImage` for `true`, `FieldName` será necessário e não poderá estar vazio.
+ A opção `ColumnFilter` especifica uma coluna a ser adicionada usando imagem anterior. Para adicionar somente colunas que fazem parte das chaves primárias da tabela, use o valor padrão, `pk-only`. Para adicionar somente colunas que não são do tipo LOB, utilize `non-lob`. Para adicionar qualquer coluna que tenha um valor de imagem anterior, use `all`. 

  ```
  "BeforeImageSettings": {
      "EnableBeforeImage": true,
      "FieldName": "before-image",
      "ColumnFilter": "pk-only"
    }
  ```

### Usar uma regra de transformação de imagem anterior
<a name="CHAP_Target.Kafka.BeforeImage.Transform-Rule"></a>

Como alternativa às configurações de tarefa, é possível usar o parâmetro `add-before-image-columns`, que aplica uma regra de transformação de coluna. Com esse parâmetro, é possível habilitar a criação de imagem anterior durante a CDC em destinos de streaming de dados, como o Kafka.

Usando `add-before-image-columns` em uma regra de transformação, é possível aplicar um controle mais refinado dos resultados da imagem anterior. As regras de transformação permitem que você use um localizador de objetos que oferece controle sobre as tabelas selecionadas para a regra. Além disso, é possível encadear regras de transformação, o que permite que regras diferentes sejam aplicadas a tabelas diferentes. Depois, você poderá manipular as colunas produzidas usando outras regras. 

**nota**  
Não use o parâmetro `add-before-image-columns` junto com a configuração da tarefa `BeforeImageSettings` na mesma tarefa. Em vez disso, use o parâmetro ou a configuração, mas não ambos, para uma única tarefa.

Um tipo de regra `transformation` com o parâmetro `add-before-image-columns` de uma coluna deve fornecer uma seção `before-image-def`. Por exemplo:

```
    {
      "rule-type": "transformation",
      …
      "rule-target": "column",
      "rule-action": "add-before-image-columns",
      "before-image-def":{
        "column-filter": one-of  (pk-only / non-lob / all),
        "column-prefix": string,
        "column-suffix": string,
      }
    }
```

O valor de `column-prefix` precede um nome de coluna e o valor padrão de `column-prefix` é `BI_`. O valor de `column-suffix` é anexado ao nome da coluna e o padrão é vazio. Não defina `column-prefix` e `column-suffix` como strings vazias.

Escolha um valor para `column-filter`. Para adicionar somente colunas que fazem parte das chaves primárias da tabela, escolha `pk-only`. Escolha `non-lob` para adicionar somente colunas que não sejam do tipo LOB. Ou escolha `all` para adicionar qualquer coluna que tenha um valor de imagem anterior.

### Exemplo de uma regra de transformação de imagem anterior
<a name="CHAP_Target.Kafka.BeforeImage.Example"></a>

A regra de transformação no exemplo a seguir adiciona uma nova coluna chamada `BI_emp_no` no destino. Portanto, uma instrução como `UPDATE employees SET emp_no = 3 WHERE emp_no = 1;` preenche o campo `BI_emp_no` com 1. Ao gravar atualizações da CDC em destinos do Amazon S3, a coluna `BI_emp_no` possibilita identificar qual linha original foi atualizada.

```
{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "%",
        "table-name": "%"
      },
      "rule-action": "include"
    },
    {
      "rule-type": "transformation",
      "rule-id": "2",
      "rule-name": "2",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "%",
        "table-name": "employees"
      },
      "rule-action": "add-before-image-columns",
      "before-image-def": {
        "column-prefix": "BI_",
        "column-suffix": "",
        "column-filter": "pk-only"
      }
    }
  ]
}
```

Para obter informações sobre como usar a ação da regra `add-before-image-columns`, consulte [Regras de transformação e ações](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

## Limitações ao usar o Apache Kafka como alvo para AWS Database Migration Service
<a name="CHAP_Target.Kafka.Limitations"></a>

Aplicam-se as seguintes limitações ao utilizar o Apache Kafka como destino:
+ AWS DMS Os endpoints de destino do Kafka não oferecem suporte ao controle de acesso do IAM para o Amazon Managed Streaming for Apache Kafka (Amazon MSK).
+ O modo Full LOB não é compatível.
+ Especifique um arquivo de configuração do Kafka para seu cluster com propriedades que permitem AWS DMS criar novos tópicos automaticamente. Inclua a configuração, `auto.create.topics.enable = true`. Se estiver utilizando o Amazon MSK, será possível especificar a configuração padrão ao criar o cluster do Kafka e alterar a configuração `auto.create.topics.enable` para `true`. Para obter mais informações sobre as configurações padrão, consulte [A configuração padrão do Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/msk-default-configuration.html) no *Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka*. Se você precisar modificar um cluster existente do Kafka criado usando o Amazon MSK, execute o AWS CLI comando `aws kafka create-configuration` para atualizar sua configuração do Kafka, como no exemplo a seguir:

  ```
  14:38:41 $ aws kafka create-configuration --name "kafka-configuration" --kafka-versions "2.2.1" --server-properties file://~/kafka_configuration
  {
      "LatestRevision": {
          "Revision": 1,
          "CreationTime": "2019-09-06T14:39:37.708Z"
      },
      "CreationTime": "2019-09-06T14:39:37.708Z",
      "Name": "kafka-configuration",
      "Arn": "arn:aws:kafka:us-east-1:111122223333:configuration/kafka-configuration/7e008070-6a08-445f-9fe5-36ccf630ecfd-3"
  }
  ```

  Aqui, `//~/kafka_configuration` é o arquivo configuração criado com as configurações de propriedades necessárias.

  Se você estiver usando sua própria instância do Kafka instalada no Amazon EC2, modifique a configuração do cluster Kafka com `auto.create.topics.enable = true` a configuração para AWS DMS permitir a criação automática de novos tópicos, usando as opções fornecidas com sua instância.
+ AWS DMS publica cada atualização em um único registro no banco de dados de origem como um registro de dados (mensagem) em um determinado tópico do Kafka, independentemente das transações.
+ AWS DMS suporta as quatro formas a seguir para chaves de partição:
  + `SchemaName.TableName`: uma combinação de esquema e nome da tabela.
  + `${AttributeName}`: o valor de um dos campos no JSON ou a chave primária da tabela no banco de dados de origem.
  + `transaction-id`: O ID da transação do CDC. Todos os registros da mesma transação vão para a mesma partição.
  + `constant`: um valor literal fixo para cada registro, independentemente da tabela ou dos dados. Todos os registros são enviados para o mesmo valor de chave de partição “constante”, fornecendo uma ordem global estrita em todas as tabelas.

  ```
  {
      "rule-type": "object-mapping",
      "rule-id": "2",
      "rule-name": "TransactionIdPartitionKey",
      "rule-action": "map-record-to-document",
      "object-locator": {
          "schema-name": "onprem",
          "table-name": "it_system"
      },
      "mapping-parameters": {
          "partition-key-type": "transaction-id | constant | attribute-name | schema-table"
      }
  }
  ```
+ A configuração do `IncludeTransactionDetails` endpoint só é suportada quando o endpoint de origem é Oracle, SQL Server, PostgreSQL ou MySQL. Para outros tipos de endpoint de origem, os detalhes da transação não serão incluídos.
+ O `BatchApply` não é compatível com um endpoint do Kafka. A utilização da aplicação em lote (por exemplo, a configuração da tarefa de metadados de destino `BatchApplyEnabled`) para um destino do Kafka pode resultar em perda de dados.
+ AWS DMS não suporta a migração de valores do tipo de `BigInt` dados com mais de 16 dígitos. Para contornar essa limitação, você pode usar a regra de transformação a seguir para converter a coluna `BigInt` em uma string. Para obter mais informações sobre regras transformação, consulte [Regras de transformação e ações](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

  ```
  {
      "rule-type": "transformation",
      "rule-id": "id",
      "rule-name": "name",
      "rule-target": "column",
      "object-locator": {
          "schema-name": "valid object-mapping rule action",
          "table-name": "",
          "column-name": ""
      },
      "rule-action": "change-data-type",
      "data-type": {
          "type": "string",
          "length": 20
      }
  }
  ```
+ AWS DMS Os endpoints de destino do Kafka não oferecem suporte ao Amazon MSK servless.
+ Ao definir regras de mapeamento, não é possível ter uma regra de mapeamento de objetos e uma regra de transformação. Você deve definir somente uma regra. 
+ AWS DMS suporta autenticação SASL para versões do Apache Kafka até 3.8. Se você estiver usando o Kafka 4.0 ou superior, só poderá se conectar sem a autenticação SASL.
+ AWS DMS não suporta dados de origem contendo `'\0'` caracteres incorporados ao usar o Kafka como um endpoint de destino. Os dados contendo `'\0'` caracteres incorporados serão truncados no primeiro `'\0'` caractere.

## Utilizar o mapeamento de objetos para migrar dados para um tópico do Kafka
<a name="CHAP_Target.Kafka.ObjectMapping"></a>

AWS DMS usa regras de mapeamento de tabelas para mapear dados da fonte para o tópico de destino do Kafka. Para mapear dados para um tópico de destino, utilize um tipo de regra de mapeamento de tabelas chamado mapeamento de objetos. Utilize o mapeamento de objetos para definir como os registros de dados na origem são mapeados para os registros de dados publicados em um tópico do Kafka. 

Os tópicos do Kafka não têm uma estrutura predefinida além de uma chave de partição.

**nota**  
Não é necessário utilizar o mapeamento de objetos. É possível utilizar o mapeamento de tabela normal para várias transformações. No entanto, o tipo de chave de partição seguirá estes comportamentos padrão:   
A chave primária é utilizada como uma chave de partição para a carga máxima.
Se nenhuma configuração de tarefas de aplicação paralela for utilizada, `schema.table` será usada como uma chave de partição para a CDC.
Se as configurações de tarefas de aplicação paralela forem utilizadas, a chave primária será utilizada como uma chave de partição para a CDC.

Para criar uma regra de mapeamento de objetos, especifique `rule-type` como `object-mapping`. Essa regra especifica o tipo de mapeamento de objeto que você deseja usar. 

A estrutura da regra é a seguinte:

```
{
    "rules": [
        {
            "rule-type": "object-mapping",
            "rule-id": "id",
            "rule-name": "name",
            "rule-action": "valid object-mapping rule action",
            "object-locator": {
                "schema-name": "case-sensitive schema name",
                "table-name": ""
            }
        }
    ]
}
```

AWS DMS atualmente suporta `map-record-to-record` e `map-record-to-document` como os únicos valores válidos para o `rule-action` parâmetro. Essas configurações afetam valores que não são excluídos como parte da lista de atributos `exclude-columns`. Os `map-record-to-document` valores `map-record-to-record` e especificam como AWS DMS manipula esses registros por padrão. Esses valores não afetam os mapeamentos de atributos de forma alguma. 

Utilize o `map-record-to-record` ao migrar de um banco de dados relacional para um tópico do Kafka. Esse tipo de regra utiliza o valor `taskResourceId.schemaName.tableName` encontrado no banco de dados relacional como a chave de partição no tópico do Kafka e cria um atributo para cada coluna no banco de dados de origem. 

Ao utilizar `map-record-to-record`, observe o seguinte:
+ Essa configuração afeta somente as colunas excluídas pela lista `exclude-columns`.
+ Para cada coluna desse tipo, AWS DMS cria um atributo correspondente no tópico de destino.
+ AWS DMS cria esse atributo correspondente independentemente de a coluna de origem ser usada em um mapeamento de atributos. 

Uma maneira de compreender o `map-record-to-record` é vê-lo em ação. Para este exemplo, suponha que você está começando com uma linha de tabela do banco de dados relacional com a seguinte estrutura de dados:


| FirstName | LastName | StoreId | HomeAddress | HomePhone | WorkAddress | WorkPhone | DateofBirth | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| Randy | Marsh | 5 | 221B Baker Street | 1234567890 | 31 Spooner Street, Quahog  | 9876543210 | 29/02/1988 | 

Para migrar essas informações de um esquema chamado `Test` para um tópico do Kafka, crie regras para mapear os dados para o tópico de destino. A regra a seguir ilustra o mapeamento. 

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "DefaultMapToKafka",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customers"
            }
        }
    ]
}
```

Com um tópico do Kafka e uma chave de partição determinados (neste caso, `taskResourceId.schemaName.tableName`), o seguinte ilustra o formato do registro resultante utilizando os nossos exemplos de dados no tópico de destino do Kafka: 

```
  {
     "FirstName": "Randy",
     "LastName": "Marsh",
     "StoreId":  "5",
     "HomeAddress": "221B Baker Street",
     "HomePhone": "1234567890",
     "WorkAddress": "31 Spooner Street, Quahog",
     "WorkPhone": "9876543210",
     "DateOfBirth": "02/29/1988"
  }
```

**Topics**
+ [Reestruturação de dados com mapeamento de atributo](#CHAP_Target.Kafka.AttributeMapping)
+ [Replicação de multitópico utilizando o mapeamento de objetos](#CHAP_Target.Kafka.MultiTopic)
+ [Formato de mensagem do Apache Kafka](#CHAP_Target.Kafka.Messageformat)

### Reestruturação de dados com mapeamento de atributo
<a name="CHAP_Target.Kafka.AttributeMapping"></a>

É possível reestruturar os dados ao migrá-los para um tópico do Kafka utilizando um mapa de atributos. Por exemplo, você pode combinar vários campos na origem em um único campo no destino. O mapa de atributo a seguir ilustra como reestruturar os dados.

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "TransformToKafka",
            "rule-action": "map-record-to-record",
            "target-table-name": "CustomerData",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customers"
            },
            "mapping-parameters": {
                "partition-key-type": "attribute-name",
                "partition-key-name": "CustomerName",
                "exclude-columns": [
                    "firstname",
                    "lastname",
                    "homeaddress",
                    "homephone",
                    "workaddress",
                    "workphone"
                ],
                "attribute-mappings": [
                    {
                        "target-attribute-name": "CustomerName",
                        "attribute-type": "scalar",
                        "attribute-sub-type": "string",
                        "value": "${lastname}, ${firstname}"
                    },
                    {
                        "target-attribute-name": "ContactDetails",
                        "attribute-type": "document",
                        "attribute-sub-type": "json",
                        "value": {
                            "Home": {
                                "Address": "${homeaddress}",
                                "Phone": "${homephone}"
                            },
                            "Work": {
                                "Address": "${workaddress}",
                                "Phone": "${workphone}"
                            }
                        }
                    }
                ]
            }
        }
    ]
}
```

Para definir um valor constante para`partition-key`, especifique`"partition-key-type: "constant"`, isso define o valor da partição como`constant`. Por exemplo, é possível fazer isso para forçar o armazenamento de todos os dados em uma única partição. O mapeamento a seguir ilustra esse método. 

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "1",
            "rule-name": "TransformToKafka",
            "rule-action": "map-record-to-document",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customer"
            },
            "mapping-parameters": {
                "partition-key-type": "constant",
                "exclude-columns": [
                    "FirstName",
                    "LastName",
                    "HomeAddress",
                    "HomePhone",
                    "WorkAddress",
                    "WorkPhone"
                ],
                "attribute-mappings": [
                    {
                        "attribute-name": "CustomerName",
                        "value": "${FirstName},${LastName}"
                    },
                    {
                        "attribute-name": "ContactDetails",
                        "value": {
                            "Home": {
                                "Address": "${HomeAddress}",
                                "Phone": "${HomePhone}"
                            },
                            "Work": {
                                "Address": "${WorkAddress}",
                                "Phone": "${WorkPhone}"
                            }
                        }
                    },
                    {
                        "attribute-name": "DateOfBirth",
                        "value": "${DateOfBirth}"
                    }
                ]
            }
        }
    ]
}
```

**nota**  
O valor do `partition-key` para um registro de controle para uma tabela específica é `TaskId.SchemaName.TableName`. O valor do `partition-key` para um registro de controle específico para uma tarefa é o `TaskId` daquele registro. A especificação de um valor do `partition-key` no mapeamento do objeto não tem impacto sobre o `partition-key` no caso dos registros de controle.  
 Quando `partition-key-type` está definido como `attribute-name` em uma regra de mapeamento de tabela, você deve especificar`partition-key-name`, que deve fazer referência a uma coluna da tabela de origem ou a uma coluna personalizada definida no mapeamento. Além disso, `attribute-mappings` deve ser fornecido para definir como as colunas de origem são mapeadas para o tópico de destino do Kafka.

### Replicação de multitópico utilizando o mapeamento de objetos
<a name="CHAP_Target.Kafka.MultiTopic"></a>

Por padrão, AWS DMS as tarefas migram todos os dados de origem para um dos tópicos do Kafka a seguir:
+ Conforme especificado no campo **Tópico** do endpoint de AWS DMS destino.
+ Conforme especificado por `kafka-default-topic`, se o campo **Tópico** do endpoint de destino não estiver preenchido e a configuração `auto.create.topics.enable` do Kafka estiver definida como `true`.

Com as versões 3.4.6 e posteriores do AWS DMS mecanismo, você pode usar o `kafka-target-topic` atributo para mapear cada tabela de origem migrada para um tópico separado. Por exemplo, as regras de mapeamento de objetos a seguir migram as tabelas de origem `Customer` e `Address` para os tópicos `customer_topic` e `address_topic` do Kafka, respectivamente. Ao mesmo tempo, AWS DMS migra todas as outras tabelas de origem, incluindo a `Bills` tabela no `Test` esquema, para o tópico especificado no endpoint de destino.

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "MapToKafka1",
            "rule-action": "map-record-to-record",
            "kafka-target-topic": "customer_topic",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customer" 
            },
            "partition-key-type": "constant"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "3",
            "rule-name": "MapToKafka2",
            "rule-action": "map-record-to-record",
            "kafka-target-topic": "address_topic",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Address"
            },
            "partition-key-type": "constant"
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "4",
            "rule-name": "DefaultMapToKafka",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Bills"
            }
        }
    ]
}
```

Ao utilizar a replicação de multitópico do Kafka, é possível agrupar e migrar tabelas de origem para tópicos separados do Kafka utilizando uma única tarefa de replicação.

### Formato de mensagem do Apache Kafka
<a name="CHAP_Target.Kafka.Messageformat"></a>

A saída JSON é simplesmente uma lista de pares chave/valor. 

**RecordType**  
O tipo de registro pode ser dados ou controle. Os *registros de dados *representam as linhas reais na origem. Os *registros de controle* são relacionados a importantes eventos no stream, como a reinicialização de uma tarefa, por exemplo.

**Operation**  
Para registros de dados, a operação pode ser `load`, `insert`, `update` ou `delete`.  
Para registros de controle, a operação pode ser `create-table`, `rename-table`, `drop-table`, `change-columns`, `add-column`, `drop-column`, `rename-column` ou `column-type-change`.

**SchemaName**  
O esquema de origem para o registro. Esse campo pode estar vazio para um registro de controle.

**TableName**  
A tabela de origem para um registro. Esse campo pode estar vazio para um registro de controle.

**Timestamp**  
A marca de data e hora de quando a mensagem do JSON foi criada. O campo é formatado com o formato ISO 8601.

O exemplo de mensagem JSON a seguir ilustra uma mensagem de tipo de dados com todos os metadados adicionais.

```
{ 
   "data":{ 
      "id":100000161,
      "fname":"val61s",
      "lname":"val61s",
      "REGION":"val61s"
   },
   "metadata":{ 
      "timestamp":"2019-10-31T22:53:59.721201Z",
      "record-type":"data",
      "operation":"insert",
      "partition-key-type":"primary-key",
      "partition-key-value":"sbtest.sbtest_x.100000161",
      "schema-name":"sbtest",
      "table-name":"sbtest_x",
      "transaction-id":9324410911751,
      "transaction-record-id":1,
      "prev-transaction-id":9324410910341,
      "prev-transaction-record-id":10,
      "commit-timestamp":"2019-10-31T22:53:55.000000Z",
      "stream-position":"mysql-bin-changelog.002171:36912271:0:36912333:9324410911751:mysql-bin-changelog.002171:36912209"
   }
}
```

O exemplo de mensagem JSON a seguir ilustra uma mensagem de tipo de controle.

```
{ 
   "control":{ 
      "table-def":{ 
         "columns":{ 
            "id":{ 
               "type":"WSTRING",
               "length":512,
               "nullable":false
            },
            "fname":{ 
               "type":"WSTRING",
               "length":255,
               "nullable":true
            },
            "lname":{ 
               "type":"WSTRING",
               "length":255,
               "nullable":true
            },
            "REGION":{ 
               "type":"WSTRING",
               "length":1000,
               "nullable":true
            }
         },
         "primary-key":[ 
            "id"
         ],
         "collation-name":"latin1_swedish_ci"
      }
   },
   "metadata":{ 
      "timestamp":"2019-11-21T19:14:22.223792Z",
      "record-type":"control",
      "operation":"create-table",
      "partition-key-type":"task-id",
      "schema-name":"sbtest",
      "table-name":"sbtest_t1"
   }
}
```

# Usando um cluster do Amazon OpenSearch Service como destino para AWS Database Migration Service
<a name="CHAP_Target.Elasticsearch"></a>

Você pode usar AWS DMS para migrar dados para o Amazon OpenSearch Service (OpenSearch Service). OpenSearch O serviço é um serviço gerenciado que facilita a implantação, a operação e a escalabilidade de um cluster OpenSearch de serviços. 

No OpenSearch Service, você trabalha com índices e documentos. Um *índice* é uma coleção de documentos, e um *documento* é um objeto JSON contendo valores escalares, matrizes e outros objetos. OpenSearch fornece uma linguagem de consulta baseada em JSON, para que você possa consultar dados em um índice e recuperar os documentos correspondentes.

Ao AWS DMS criar índices para um endpoint de destino para o OpenSearch Service, ele cria um índice para cada tabela do endpoint de origem. O custo da criação de um índice OpenSearch de serviços depende de vários fatores. Esses são o número de índices criados, a quantidade total de dados nesses índices e a pequena quantidade de metadados que são OpenSearch armazenados para cada documento.

Configure seu cluster de OpenSearch serviços com recursos de computação e armazenamento adequados ao escopo de sua migração. É recomendável considerar os seguintes fatores, dependendo da tarefa de replicação a ser utilizada:
+ Para uma carga máxima de dados, considere a quantidade total de dados a ser migrada e a velocidade da transferência.
+ Para replicar as mudanças em andamento, considere a frequência das atualizações e seus requisitos de end-to-end latência.

Além disso, defina as configurações de índice em seu OpenSearch cluster, prestando muita atenção à contagem de documentos.

**Configurações da tarefa de carga máxima com vários threads**

Para ajudar a aumentar a velocidade da transferência, AWS DMS oferece suporte a uma carga completa de vários segmentos em um cluster de destino do OpenSearch serviço. AWS DMS suporta esse multithreading com configurações de tarefas que incluem o seguinte:
+ `MaxFullLoadSubTasks`: utilize esta opção para indicar o número máximo de tabelas de origem a serem carregadas em paralelo. O DMS carrega cada tabela em seu índice de destino OpenSearch de serviço correspondente usando uma subtarefa dedicada. O padrão é 8; o valor máximo é 49.
+ `ParallelLoadThreads`— Use essa opção para especificar o número de threads AWS DMS usados para carregar cada tabela em seu índice OpenSearch de destino de serviço. O valor máximo para uma meta OpenSearch de serviço é 32. Você pode solicitar o aumento desse limite máximo.
**nota**  
Se você não alterar `ParallelLoadThreads` de seu padrão (0), o AWS DMS transferirá um único registro por vez. Essa abordagem coloca uma carga indevida em seu cluster OpenSearch de serviços. Defina essa opção como 1 ou mais.
+ `ParallelLoadBufferSize`— Use essa opção para especificar o número máximo de registros a serem armazenados no buffer que os threads de carregamento paralelo usam para carregar dados no destino do OpenSearch serviço. O valor padrão é 50. Valor máximo de 1.000. Use essa configuração com `ParallelLoadThreads`; `ParallelLoadBufferSize` é válido somente quando há mais de um thread.

Para obter mais informações sobre como o DMS carrega um cluster de OpenSearch serviços usando multithreading, consulte a AWS postagem do blog Escale o [Amazon OpenSearch Service](https://aws.amazon.com/blogs/database/scale-amazon-elasticsearch-service-for-aws-database-migration-service-migrations/) para migrações. AWS Database Migration Service 

**Configurações da tarefa de carga de CDC multithread**

Você pode melhorar o desempenho da captura de dados de alteração (CDC) para um cluster de destino do OpenSearch serviço usando as configurações de tarefas para modificar o comportamento da chamada da `PutRecords` API. Para fazer isso, especifique o número de threads simultâneos, filas por thread e o número de registros a serem armazenados em um buffer usando as configurações da tarefa `ParallelApply*`. Por exemplo, suponha que você queira executar uma carga de CDC e aplicar 32 threads em paralelo. Você também quer acessar 64 filas por thread, com 50 registros armazenados por buffer. 
**nota**  
Support para o uso de configurações de `ParallelApply*` tarefas durante o CDC para endpoints OpenSearch de destino do Amazon Service está disponível nas AWS DMS versões 3.4.0 e superiores.

Para promover o desempenho do CDC, AWS DMS oferece suporte a estas configurações de tarefas:
+ `ParallelApplyThreads`— Especifica o número de threads simultâneos que são AWS DMS usados durante um carregamento do CDC para enviar registros de dados para um endpoint de destino do OpenSearch serviço. O valor padrão é zero (0) e o valor máximo é 32.
+ `ParallelApplyBufferSize`— Especifica o número máximo de registros a serem armazenados em cada fila de buffer para que threads simultâneos sejam enviados para um endpoint de destino do OpenSearch serviço durante um carregamento do CDC. O valor padrão é 100 e o valor máximo é 1.000. Use essa opção quando `ParallelApplyThreads` especificar mais de um thread. 
+ `ParallelApplyQueuesPerThread`— Especifica o número de filas que cada thread acessa para retirar registros de dados das filas e gerar uma carga em lote para um endpoint de OpenSearch serviço durante o CDC.

Ao usar configurações da tarefa `ParallelApply*`, o `partition-key-type` padrão é a `primary-key` da tabela, não o `schema-name.table-name`.

## Migrando de uma tabela de banco de dados relacional para um índice de serviços OpenSearch
<a name="CHAP_Target.Elasticsearch.RDBMS2Elasticsearch"></a>

AWS DMS suporta a migração de dados para os tipos OpenSearch de dados escalares do Service. Ao migrar de um banco de dados relacional como Oracle ou MySQL para o OpenSearch Service, talvez você queira reestruturar a forma como você armazena esses dados.

AWS DMS suporta os seguintes tipos de dados escalares de OpenSearch serviço: 
+ Booleano 
+ Data
+ Float
+ Int
+ String

AWS DMS converte dados do tipo Date no tipo String. É possível especificar o mapeamento personalizado para interpretar essas datas.

AWS DMS não oferece suporte à migração de tipos de dados LOB.

## Pré-requisitos para usar o Amazon OpenSearch Service como alvo para AWS Database Migration Service
<a name="CHAP_Target.Elasticsearch.Prerequisites"></a>

Antes de começar a trabalhar com um banco de dados de OpenSearch serviço como destino AWS DMS, certifique-se de criar uma função AWS Identity and Access Management (IAM). Essa função deve permitir o AWS DMS acesso aos índices OpenSearch de serviço no endpoint de destino. O conjunto mínimo de permissões de acesso é mostrado na seguinte política do IAM.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "Service": "dms.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
        }
    ]
}
```

------

A função que você usa para a migração para o OpenSearch Serviço deve ter as seguintes permissões.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "es:ESHttpDelete",
        "es:ESHttpGet",
        "es:ESHttpHead",
        "es:ESHttpPost",
        "es:ESHttpPut"
      ],
      "Resource": "*"
    }
  ]
}
```

------

No exemplo anterior, `region` substitua pelo identificador da AWS região, *`account-id`* pelo ID AWS da sua conta e `domain-name` pelo nome do seu domínio do Amazon OpenSearch Service. Um exemplo é `arn:aws:es:us-west-2:123456789012:domain/my-es-domain`

## Configurações de endpoint ao usar o OpenSearch Serviço como destino para AWS DMS
<a name="CHAP_Target.Elasticsearch.Configuration"></a>

Você pode usar as configurações do endpoint para configurar seu banco de dados OpenSearch de destino do serviço de forma semelhante ao uso de atributos de conexão extras. Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--elasticsearch-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações de endpoint que você pode usar com o OpenSearch Serviço como destino.


| Nome do atributo | Valores válidos | Valor padrão e descrição | 
| --- | --- | --- | 
|  `FullLoadErrorPercentage`   |  Um inteiro positivo maior que 0, mas não maior que 100.  |  10: para uma tarefa de carga máxima, esse atributo determina o limite de erros permitidos antes que ocorra uma falha na tarefa. Por exemplo, suponha que haja 1.500 linhas no endpoint de origem e o parâmetro foi definido como 10. Em seguida, a tarefa falhará se AWS DMS encontrar mais de 150 erros (10% da contagem de linhas) ao gravar no endpoint de destino.  | 
|   `ErrorRetryDuration`   |  Um inteiro positivo maior do que 0.  |  300 — Se ocorrer um erro no endpoint de destino, AWS DMS tente novamente por esse número de segundos. Caso contrário, a tarefa apresentará falha.  | 
|  `UseNewMappingType`  | true ou false |  `false`, mas para funcionar usando o OpenSearch v2.x, ele deve ser definido como `true`.  | 

## Limitações ao usar o Amazon OpenSearch Service como alvo para AWS Database Migration Service
<a name="CHAP_Target.Elasticsearch.Limitations"></a>

As seguintes limitações se aplicam ao usar o Amazon OpenSearch Service como alvo:
+ OpenSearch O serviço usa mapeamento dinâmico (adivinhação automática) para determinar os tipos de dados a serem usados para os dados migrados.
+ OpenSearch O serviço armazena cada documento com uma ID exclusiva. Veja um exemplo a seguir: 

  ```
  "_id": "D359F8B537F1888BC71FE20B3D79EAE6674BE7ACA9B645B0279C7015F6FF19FD"
  ```

  Cada ID de documento tem 64 bytes de comprimento; lembre-se de que você precisará desse espaço para armazenamento. Por exemplo, se você migrar 100.000 linhas de uma AWS DMS fonte, o índice de OpenSearch serviço resultante exigirá armazenamento para mais 6.400.000 bytes.
+ Com o OpenSearch Service, você não pode fazer atualizações nos atributos da chave primária. Essa restrição é importante quando se usa a replicação contínua com captura de dados de alterações (CDC), pois ela pode gerar dados indesejados no destino. No modo CDC, as chaves primárias são mapeadas para SHA256 valores com 32 bytes de comprimento. Eles são convertidos em strings de 64 bytes legíveis por humanos e são usados como documento de serviço. OpenSearch IDs
+ Se AWS DMS encontrar algum item que não possa ser migrado, ele grava mensagens de erro no Amazon Logs. CloudWatch Esse comportamento é diferente de outros endpoints de AWS DMS destino, que gravam erros em uma tabela de exceções.
+ AWS DMS não suporta conexão com um cluster Amazon ES que tenha controle de acesso refinado habilitado com usuário mestre e senha.
+ AWS DMS não oferece suporte ao OpenSearch Service serverless.
+ OpenSearch O serviço não oferece suporte à gravação de dados em índices preexistentes.
+ A configuração da tarefa de replicação não `TargetTablePrepMode:TRUNCATE_BEFORE_LOAD` é suportada para uso com um endpoint de OpenSearch destino.
+ Ao migrar dados para o Amazon Elasticsearch usando AWS DMS, os dados de origem devem ter uma chave primária ou uma coluna de identificador exclusivo. Se os dados de origem não tiverem uma chave primária ou um identificador exclusivo, você precisará definir um usando a regra de define-primary-key transformação.

## Tipos de dados de destino para o Amazon OpenSearch Service
<a name="CHAP_Target.Elasticsearch.DataTypes"></a>

Quando AWS DMS migra dados de bancos de dados heterogêneos, o serviço mapeia tipos de dados do banco de dados de origem para tipos de dados intermediários chamados AWS DMS tipos de dados. Em seguida, o serviço mapeia os tipos de dados intermediários para os tipos de dados de destino. A tabela a seguir mostra cada tipo de AWS DMS dados e o tipo de dados para o qual ele mapeia no OpenSearch Serviço.


| AWS DMS tipo de dados | OpenSearch Tipo de dados do serviço | 
| --- | --- | 
|  Booleano  |  booleano  | 
|  Data  |  string  | 
|  Time  |  date  | 
|  Marca de data e hora  |  date  | 
|  INT4  |  integer  | 
|  Real4  |  float  | 
|  UINT4  |  integer  | 

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).

# Usando o Amazon DocumentDB como destino para o AWS Database Migration Service
<a name="CHAP_Target.DocumentDB"></a>

 Para obter informações sobre quais versões do Amazon DocumentDB (com compatibilidade com o MongoDB) são compatíveis, consulte. AWS DMS [Metas para AWS DMS](CHAP_Introduction.Targets.md) É possível utilizar o AWS DMS para migrar os dados para o Amazon DocumentDB (compatível com MongoDB) de qualquer mecanismo de dados de origem compatível com o AWS DMS . O mecanismo de origem pode estar em um serviço AWS gerenciado, como Amazon RDS, Aurora ou Amazon S3. Ou o mecanismo pode estar em um banco de dados autogerenciado, como o MongoDB em execução no Amazon EC2 ou on-premises.

Você pode usar AWS DMS para replicar dados de origem para bancos de dados, coleções ou documentos do Amazon DocumentDB. 

**nota**  
Se o endpoint de origem for o MongoDB ou o Amazon DocumentDB, execute a migração no **Modo documento**.

O MongoDB armazena dados em um formato JSON binário (BSON). AWS DMS suporta todos os tipos de dados BSON que são compatíveis com o Amazon DocumentDB. Para obter uma lista desses tipos de dados, consulte [ APIsMongoDB, operações e tipos de dados suportados no Guia](https://docs.aws.amazon.com/documentdb/latest/developerguide/mongo-apis.html) do desenvolvedor do *Amazon DocumentDB*.

Se o endpoint de origem for um banco de dados relacional, AWS DMS mapeia objetos do banco de dados para o Amazon DocumentDB da seguinte forma:
+ Um banco de dados relacional ou esquema de banco de dados, é mapeado para um *banco de dados* Amazon DocumentDB. 
+ As tabelas dentro de um banco de dados relacional são mapeadas para *coleções* no Amazon DocumentDB.
+ Os registros em uma tabela relacional são mapeados para *documentos* no Amazon DocumentDB. Cada documento é construído a partir de dados no registro de origem.

Se o endpoint de origem for o Amazon S3, os objetos resultantes do Amazon DocumentDB corresponderão às regras de mapeamento do AWS DMS para o Amazon S3. Por exemplo, considere o URI a seguir.

```
s3://amzn-s3-demo-bucket/hr/employee
```

Nesse caso, AWS DMS mapeia os objetos `amzn-s3-demo-bucket` para o Amazon DocumentDB da seguinte forma:
+ A parte de nível superior do URI (`hr`) é mapeada para um banco de dados Amazon DocumentDB. 
+ A próxima parte do URI (`employee`) é mapeada para uma coleção do Amazon DocumentDB.
+ Cada objeto em `employee` é mapeado para um documento no Amazon DocumentDB.

Para obter mais informações sobre as regras de mapeamento do Amazon S3, consulte [Usando o Amazon S3 como fonte para AWS DMS](CHAP_Source.S3.md).

**Configurações do endpoint do Amazon DocumentDB**

Nas AWS DMS versões 3.5.0 e superiores, você pode melhorar o desempenho da captura de dados de alteração (CDC) para endpoints do Amazon DocumentDB ajustando as configurações de tarefas para threads paralelos e operações em massa. Para fazer isso, especifique o número de threads simultâneos, filas por thread e o número de registros a serem armazenados em um buffer usando as configurações da tarefa `ParallelApply*`. Por exemplo, suponha que você queira executar um carregamento de CDC e aplicar 128 threads em paralelo. Você também quer acessar 64 filas por thread, com 50 registros armazenados por buffer. 

Para promover o desempenho do CDC, AWS DMS oferece suporte a estas configurações de tarefas:
+ `ParallelApplyThreads`— Especifica o número de threads simultâneos que são AWS DMS usados durante um carregamento do CDC para enviar registros de dados para um endpoint de destino do Amazon DocumentDB. O valor padrão é zero (0) e o valor máximo é 32.
+ `ParallelApplyBufferSize`: especifica o número máximo de registros a serem armazenados em cada fila de buffer para que os threads simultâneos enviem para um endpoint de destino do Amazon DocumentDB durante uma carga de CDC. O valor padrão é 100 e o valor máximo é 1.000. Use essa opção quando `ParallelApplyThreads` especificar mais de um thread. 
+ `ParallelApplyQueuesPerThread`: especifica o número de filas que cada thread acessa para utilizar registros de dados das filas e gerar uma carga em lote para um endpoint do Amazon DocumentDB durante a CDC. O padrão é um. O máximo é 512.

**nota**  
 Para destinos do Amazon DocumentDB, a aplicação paralela do CDC pode causar erros de chave duplicada ou paralisar a aplicação do CDC para cargas de trabalho que usam índices exclusivos secundários ou exigem uma ordenação estrita das alterações. Use a configuração padrão de aplicação do CDC de thread único para essas cargas de trabalho. 

Para obter detalhes adicionais sobre como trabalhar com o Amazon DocumentDB como destino AWS DMS, consulte as seguintes seções:

**Topics**
+ [Mapear dados de uma origem para um destino do Amazon DocumentDB](#CHAP_Target.DocumentDB.data-mapping)
+ [Conexão aos clusters elásticos do Amazon DocumentDB como destino](#CHAP_Target.DocumentDB.data-mapping.elastic-cluster-connect)
+ [Replicação contínua com o Amazon DocumentDB como destino](#CHAP_Target.DocumentDB.data-mapping.ongoing-replication)
+ [Limitações da utilização do Amazon DocumentDB como destino](#CHAP_Target.DocumentDB.limitations)
+ [Utilizar configurações de endpoint com o Amazon DocumentDB como destino](#CHAP_Target.DocumentDB.ECAs)
+ [Tipos de dados de destino do Amazon DocumentDB](#CHAP_Target.DocumentDB.datatypes)

**nota**  
Para ver um step-by-step passo a passo do processo de migração, consulte [Migração do MongoDB para o Amazon DocumentDB](https://docs.aws.amazon.com/dms/latest/sbs/CHAP_MongoDB2DocumentDB.html) no Guia de migração. AWS Database Migration Service Step-by-Step 

## Mapear dados de uma origem para um destino do Amazon DocumentDB
<a name="CHAP_Target.DocumentDB.data-mapping"></a>

AWS DMS lê registros do endpoint de origem e constrói documentos JSON com base nos dados que ele lê. Para cada documento JSON, é AWS DMS necessário determinar um `_id` campo para atuar como um identificador exclusivo. Ele grava o documento JSON em uma coleção do Amazon DocumentDB, utilizando o campo `_id` como uma chave primária.

### Dados de origem que são uma coluna individual
<a name="CHAP_Target.DocumentDB.data-mapping.single-column"></a>

Se os dados de origem consistirem em uma única coluna, os dados deverão ser de um tipo de string. (Dependendo do mecanismo de origem, o tipo de dados real pode ser VARCHAR, NVARCHAR, TEXT, LOB, CLOB ou similar.) AWS DMS assume que os dados são um documento JSON válido e replica os dados para o Amazon DocumentDB no estado em que se encontram.

Se o documento JSON resultante contiver um campo chamado `_id`, o campo será utilizado como o `_id` exclusivo no Amazon DocumentDB.

Se o JSON não contiver um campo `_id`, o Amazon DocumentDB gerará um valor de `_id` automaticamente.

### Dados de origem que são várias colunas
<a name="CHAP_Target.DocumentDB.data-mapping.multiple-columns"></a>

Se os dados de origem consistirem em várias colunas, AWS DMS criará um documento JSON a partir de todas essas colunas. Para determinar o `_id` campo do documento, AWS DMS faça o seguinte:
+ Se uma das colunas for chamada `_id`, os dados dessa coluna serão utilizados como o `_id` de destino.
+ Se não houver uma `_id` coluna, mas os dados de origem tiverem uma chave primária ou um índice exclusivo, AWS DMS use essa chave ou o valor do índice como `_id` valor. Os dados da chave primária ou do índice exclusivo também aparece como campos explícitos no documento JSON.
+ Se não houver nenhuma coluna `_id` e nenhuma chave primária ou índice exclusivo, o Amazon DocumentDB gerará um valor de `_id` automaticamente.

### Coagir um tipo de dados no endpoint de destino
<a name="CHAP_Target.DocumentDB.coercing-datatype"></a>

AWS DMS pode modificar estruturas de dados ao gravar em um endpoint de destino do Amazon DocumentDB. É possível solicitar essas alterações renomeando colunas e tabelas no endpoint de origem ou fornecendo regras de transformação que são aplicadas quando uma tarefa está sendo executada.

#### Utilizar um documento JSON aninhado (json\$1 prefix)
<a name="CHAP_Target.DocumentDB.coercing-datatype.json"></a>

Para coagir um tipo de dados, é possível prefixar o nome da coluna de origem com `json_` (ou seja, `json_columnName`) manualmente ou utilizando uma transformação. Nesse caso, a coluna é criada como um documento JSON aninhado dentro do documento de destino, e não como um campo de string.

Por exemplo, suponha que você deseja migrar o documento a seguir de um endpoint de origem do MongoDB.

```
{
    "_id": "1", 
    "FirstName": "John", 
    "LastName": "Doe",
    "ContactDetails": "{"Home": {"Address": "Boston","Phone": "1111111"},"Work": { "Address": "Boston", "Phone": "2222222222"}}"
}
```

Se você não coagir nenhum dos tipos de dados de origem, o documento `ContactDetails` incorporado será migrado como uma string.

```
{
    "_id": "1", 
    "FirstName": "John", 
    "LastName": "Doe",
    "ContactDetails": "{\"Home\": {\"Address\": \"Boston\",\"Phone\": \"1111111\"},\"Work\": { \"Address\": \"Boston\", \"Phone\": \"2222222222\"}}"
}
```

No entanto, é possível adicionar uma regra de transformação para coagir `ContactDetails` para um objeto JSON. Por exemplo, suponha que o nome original da coluna de origem seja `ContactDetails`. Para coagir o tipo de dados como JSON aninhado, a coluna no endpoint de origem precisa ser renomeada como “json\$1ContactDetails” adicionando o prefixo “\$1json\$1\$1 “na origem manualmente ou por meio de regras de transformação. Por exemplo, é possível utilizar a regra de transformação abaixo:

```
{
    "rules": [
    {
    "rule-type": "transformation",
    "rule-id": "1",
    "rule-name": "1",
    "rule-target": "column",
    "object-locator": {
    "schema-name": "%",
    "table-name": "%",
    "column-name": "ContactDetails"
     },
    "rule-action": "rename",
    "value": "json_ContactDetails",
    "old-value": null
    }
    ]
}
```

AWS DMS replica o ContactDetails campo como JSON aninhado, da seguinte forma. 

```
{
    "_id": "1",
    "FirstName": "John",
    "LastName": "Doe",
    "ContactDetails": {
        "Home": {
            "Address": "Boston",
            "Phone": "1111111111"
        },
        "Work": {
            "Address": "Boston",
            "Phone": "2222222222"
        }
    }
}
```

#### Utilizar uma matriz JSON (array\$1 prefix)
<a name="CHAP_Target.DocumentDB.coercing-datatype.array"></a>

Para coagir um tipo de dados, é possível prefixar o nome de uma coluna com `array_` (ou seja, `array_columnName`) manualmente ou utilizando uma transformação. Nesse caso, AWS DMS considera a coluna como uma matriz JSON e a cria como tal no documento de destino.

Suponha que você deseja migrar o documento a seguir de um endpoint de origem do MongoDB.

```
{
    "_id" : "1",
    "FirstName": "John",
    "LastName": "Doe", 
    "ContactAddresses": ["Boston", "New York"],             
    "ContactPhoneNumbers": ["1111111111", "2222222222"]
}
```

Se você não coagir nenhum dos tipos de dados de origem, o documento `ContactDetails` incorporado será migrado como uma string.

```
{
    "_id": "1",
    "FirstName": "John",
    "LastName": "Doe", 
    "ContactAddresses": "[\"Boston\", \"New York\"]",             
    "ContactPhoneNumbers": "[\"1111111111\", \"2222222222\"]" 
}
```

 No entanto, é possível adicionar regras de transformação para coagir `ContactAddress` e `ContactPhoneNumbers` para matrizes JSON, conforme mostrado na tabela a seguir.


****  

| Nome original da coluna de origem | Coluna de origem renomeada | 
| --- | --- | 
| ContactAddress | array\$1ContactAddress | 
| ContactPhoneNumbers | array\$1ContactPhoneNumbers | 

AWS DMS replica `ContactAddress` e da `ContactPhoneNumbers` seguinte forma.

```
{
    "_id": "1",
    "FirstName": "John",
    "LastName": "Doe",
    "ContactAddresses": [
        "Boston",
        "New York"
    ],
    "ContactPhoneNumbers": [
        "1111111111",
        "2222222222"
    ]
}
```

### Conectar-se ao Amazon DocumentDB utilizando TLS
<a name="CHAP_Target.DocumentDB.tls"></a>

Por padrão, um cluster recém-criado do Amazon DocumentDB aceita conexões seguras somente quando o Transport Layer Security (TLS) é utilizado. Quando o TLS está ativado, cada conexão ao Amazon DocumentDB requer uma chave pública.

Você pode recuperar a chave pública para o Amazon DocumentDB baixando o arquivo`rds-combined-ca-bundle.pem`,, de AWS um bucket hospedado do Amazon S3. Para obter mais informações sobre como baixar esse arquivo, consulte [Criptografar conexões utilizando TLS](https://docs.aws.amazon.com/documentdb/latest/developerguide/security.encryption.ssl.html) no *Guia do desenvolvedor do Amazon DocumentDB*

Depois de baixar esse arquivo.pem, você pode importar a chave pública que ele contém, AWS DMS conforme descrito a seguir.

#### Console de gerenciamento da AWS
<a name="CHAP_Target.DocumentDB.tls.con"></a>

**Para importar o arquivo (.pem) da chave pública**

1. Abra o AWS DMS console em [https://console.aws.amazon.com/dms](https://console.aws.amazon.com/dms).

1. No painel de navegação, escolha **Certificates**.

1. Selecione **Import certificate (Importar certificado)** e faça o seguinte:
   + Para **Certificate identifier (Identificador do certificado)**, insira um nome exclusivo para o certificado, por exemplo `docdb-cert`.
   + Em **Importar arquivo**, navegue até o local onde você salvou o arquivo .pem.

   Quando estiver satisfeito com as configurações, selecione **Add new CA certificate (Adicionar novo certificado de CA)**.

#### AWS CLI
<a name="CHAP_Target.DocumentDB.tls.cli"></a>

Utilize o comando `aws dms import-certificate`, conforme mostrado no exemplo a seguir.

```
aws dms import-certificate \
    --certificate-identifier docdb-cert \
    --certificate-pem file://./rds-combined-ca-bundle.pem
```

Ao criar um endpoint de AWS DMS destino, forneça o identificador do certificado (por exemplo,`docdb-cert`). Além disso, defina o parâmetro do modo SSL como `verify-full`.

## Conexão aos clusters elásticos do Amazon DocumentDB como destino
<a name="CHAP_Target.DocumentDB.data-mapping.elastic-cluster-connect"></a>

Nas AWS DMS versões 3.4.7 e superiores, você pode criar um endpoint de destino do Amazon DocumentDB como um cluster elástico. Se você criar o endpoint de destino como um cluster elástico, precisará anexar um novo certificado SSL ao endpoint do cluster elástico do Amazon DocumentDB porque o certificado SSL existente não funcionará.

**Como anexar um novo certificado SSL ao endpoint do cluster elástico do Amazon DocumentDB**

1. Em um navegador, abra [ https://www.amazontrust.com/repository/SFSRootCAG2o.pem](https://www.amazontrust.com/repository/SFSRootCAG2.pem) e salve o conteúdo em um `.pem` arquivo com um nome de arquivo exclusivo, por exemplo. `SFSRootCAG2.pem` Esse é o arquivo de certificado que você precisa importar nas etapas subsequentes.

1. Crie o endpoint do cluster elástico e defina as seguintes opções:

   1. Em **Configuração do endpoint**, escolha **Adicionar novo certificado CA**.

   1. Em **Identificador de certificado**, insira **SFSRootCAG2.pem**.

   1. Em **Importar arquivo de certificado**, escolha **Escolher arquivo** e navegue até o arquivo `SFSRootCAG2.pem` baixado anteriormente.

   1. Selecione e abra o arquivo `SFSRootCAG2.pem` baixado.

   1. Escolha **Importar certificado**.

   1. No menu suspenso **Escolha um certificado**, escolha **SFSRootCAG2.pem**.

O novo certificado SSL do arquivo `SFSRootCAG2.pem` baixado agora está anexado ao endpoint do cluster elástico do Amazon DocumentDB.

## Replicação contínua com o Amazon DocumentDB como destino
<a name="CHAP_Target.DocumentDB.data-mapping.ongoing-replication"></a>

Se a replicação contínua (captura de dados de alteração, CDC) estiver ativada para o Amazon DocumentDB como destino, as versões 3.5.0 e superior do AWS DMS proporcionarão uma melhoria no desempenho vinte vezes maior do que nas versões anteriores. Em versões anteriores, onde AWS DMS processava até 250 registros por segundo, AWS DMS agora processa com eficiência mais de 5000 registros por segundo. AWS DMS também garante que os documentos no Amazon DocumentDB permaneçam sincronizados com a fonte. Quando um registro de origem é criado ou atualizado, primeiro é AWS DMS necessário determinar qual registro do Amazon DocumentDB é afetado, fazendo o seguinte:
+ Se o registro da origem tiver uma coluna chamada `_id`, o valor dessa coluna determinará o `_id` correspondente na coleção do Amazon DocumentDB.
+ Se não houver uma `_id` coluna, mas os dados de origem tiverem uma chave primária ou um índice exclusivo, AWS DMS use essa chave ou valor de índice como o da `_id` coleção Amazon DocumentDB.
+ Se o registro de origem não tiver uma `_id` coluna, uma chave primária ou um índice exclusivo, todas as colunas de origem AWS DMS corresponderão aos campos correspondentes na coleção Amazon DocumentDB.

Quando um novo registro de origem é criado, AWS DMS grava um documento correspondente no Amazon DocumentDB. Se um registro de origem existente for atualizado, AWS DMS atualiza os campos correspondentes no documento de destino no Amazon DocumentDB. Todos os campos que existem no documento de destino, mas não no registro da origem permanecem inalterados.

Quando um registro de origem é excluído, o documento correspondente é AWS DMS excluído do Amazon DocumentDB.

### Alterações estruturais (DDL) na origem
<a name="CHAP_Target.DocumentDB.data-mapping.ongoing-replication.ddl"></a>

Com a replicação contínua, qualquer alteração nas estruturas de dados da origem (como tabelas, colunas e assim por diante) é propagada para seus equivalentes no Amazon DocumentDB. Em bancos de dados relacionais, essas alterações são iniciadas utilizando instruções da linguagem de definição de dados (DDL). Você pode ver como AWS DMS propaga essas alterações para o Amazon DocumentDB na tabela a seguir.


****  

| DDL na origem | Efeito no destino do Amazon DocumentDB | 
| --- | --- | 
| CREATE TABLE | Cria uma coleção vazia. | 
| Instrução que renomeia uma tabela (RENAME TABLE, ALTER TABLE...RENAME e semelhante) | Renomeia a coleção. | 
| TRUNCATE TABLE | Remove todos os documentos da coleção, mas somente se HandleSourceTableTruncated for true. Para obter mais informações, consulte [Configurações de tarefa para processamento de DDL de processamento de alterações](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md). | 
| DROP TABLE | Exclui a coleção, mas somente se HandleSourceTableDropped for true. Para obter mais informações, consulte [Configurações de tarefa para processamento de DDL de processamento de alterações](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md). | 
| Instrução que adiciona uma coluna a uma tabela (ALTER TABLE...ADD e semelhante) | A instrução DDL é ignorada e um aviso é emitido. Quando o primeiro INSERT é realizado na origem, o novo campo é adicionado ao documento de destino. | 
| ALTER TABLE...RENAME COLUMN | A instrução DDL é ignorada e um aviso é emitido. Quando o primeiro INSERT é realizado na origem, o campo recém-nomeado é adicionado ao documento de destino. | 
| ALTER TABLE...DROP COLUMN | A instrução DDL é ignorada e um aviso é emitido. | 
| Instrução que altera o tipo de dados da coluna (ALTER COLUMN...MODIFY e semelhante) | A instrução DDL é ignorada e um aviso é emitido. Quando o primeiro INSERT é realizado na origem com o novo tipo de dados, o documento de destino é criado com um campo desse novo tipo de dados. | 

## Limitações da utilização do Amazon DocumentDB como destino
<a name="CHAP_Target.DocumentDB.limitations"></a>

As seguintes limitações se aplicam ao usar o Amazon DocumentDB como destino para: AWS DMS
+ No Amazon DocumentDB, os nomes de coleção não podem conter o símbolo de dólar (\$1). Além disso, os nomes do banco de dados não podem conter caracteres Unicode.
+ AWS DMS não suporta a fusão de várias tabelas de origem em uma única coleção do Amazon DocumentDB.
+ Quando AWS DMS os processos são alterados de uma tabela de origem que não tem uma chave primária, todas as colunas LOB nessa tabela são ignoradas.
+ Se a opção **Alterar tabela** estiver habilitada, e o AWS DMS encontrar uma coluna de origem chamada “*\$1id*”, essa coluna aparecerá como “*\$1\$1id*” (dois sublinhados) na tabela de alteração.
+ Se você escolher o Oracle como o endpoint de origem, a origem do Oracle deverá ter o registro em log suplementar total ativado. Caso contrário, se houver colunas na origem que não foram alteradas, os dados serão carregados no Amazon DocumentDB como valores nulos.
+ A configuração de `TargetTablePrepMode:TRUNCATE_BEFORE_LOAD` da tarefa de replicação não é compatível para utilização com um endpoint de destino do DocumentDB. 
+ Não é possível usar coleções limitadas do MongoDB no Amazon DocumentDB. No entanto, o AWS DMS migra automaticamente esses objetos como coleções ilimitadas no DocumentDB de destino.
+ A aplicação paralela do CDC aos destinos do Amazon DocumentDB pode causar erros de chave duplicada ou a aplicação paralisada do CDC para cargas de trabalho que usam índices exclusivos secundários ou exigem uma ordenação estrita das alterações. Para essas cargas de trabalho, use a configuração padrão de aplicação CDC de thread único.

## Utilizar configurações de endpoint com o Amazon DocumentDB como destino
<a name="CHAP_Target.DocumentDB.ECAs"></a>

É possível utilizar as configurações de endpoint para configurar o destino do Amazon DocumentDB de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--doc-db-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações do endpoint que é possível utilizar com o Amazon DocumentDB como destino.


| Nome do atributo | Valores válidos | Valor padrão e descrição | 
| --- | --- | --- | 
|   `replicateShardCollections`   |  booleano `true` `false`  |  Quando `true`, essa configuração de endpoint tem os seguintes efeitos e impõe as seguintes limitações: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.DocumentDB.html)  | 

## Tipos de dados de destino do Amazon DocumentDB
<a name="CHAP_Target.DocumentDB.datatypes"></a>

Na tabela a seguir, você pode encontrar os tipos de dados de destino do Amazon DocumentDB que são compatíveis com o uso do AWS DMS e o mapeamento padrão dos tipos de dados do AWS DMS. Para obter mais informações sobre os tipos de dados do AWS DMS, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS Tipo de dados DMS  |  Tipo de dados do Amazon DocumentDB  | 
| --- | --- | 
|  BOOLEAN  |  Booleano  | 
|  BYTES  |  Dados binários  | 
|  DATE  | Data | 
|  TIME  | Cadeia de caracteres (UTF8) | 
|  DATETIME  | Data | 
|  INT1  | Inteiro de 32 bits | 
|  INT2  |  Inteiro de 32 bits  | 
|  INT4  | Inteiro de 32 bits | 
|  INT8  |  Inteiro de 64 bits  | 
|  NUMERIC  | Cadeia de caracteres (UTF8) | 
|  REAL4  |  Duplo  | 
|  REAL8  | Duplo | 
|  STRING  |  Se os dados forem reconhecidos como JSON, eles serão AWS DMS migrados para o Amazon DocumentDB como um documento. Caso contrário, os dados serão mapeados para String (UTF8).  | 
|  UINT1  | Inteiro de 32 bits | 
|  UINT2  | Inteiro de 32 bits | 
|  UINT4  | Inteiro de 64 bits | 
|  UINT8  |  Cadeia de caracteres (UTF8)  | 
|  WSTRING  | Se os dados forem reconhecidos como JSON, eles serão AWS DMS migrados para o Amazon DocumentDB como um documento. Caso contrário, os dados serão mapeados para String (UTF8). | 
|  BLOB  | Binário | 
|  CLOB  | Se os dados forem reconhecidos como JSON, eles serão AWS DMS migrados para o Amazon DocumentDB como um documento. Caso contrário, os dados serão mapeados para String (UTF8). | 
|  NCLOB  | Se os dados forem reconhecidos como JSON, eles serão AWS DMS migrados para o Amazon DocumentDB como um documento. Caso contrário, os dados serão mapeados para String (UTF8). | 

# Usando o Amazon Neptune como alvo para AWS Database Migration Service
<a name="CHAP_Target.Neptune"></a>

O Amazon Neptune é um serviço de banco de dados de grafos rápido, confiável e totalmente gerenciado que facilita a criação e a execução de aplicações que trabalham com conjuntos de dados altamente conectados. O recurso principal do Neptune é um mecanismo de banco de dados de grafos com projeto específico e alto desempenho. Esse mecanismo é otimizado para armazenar bilhões de relacionamentos e consultar grafos com latência de milissegundos. O Neptune suporta as populares linguagens de consulta gráfica TinkerPop Apache Gremlin e SPARQL do W3C. Para obter mais informações sobre o Amazon Neptune, consulte [O que é o Amazon Neptune?](https://docs.aws.amazon.com/neptune/latest/userguide/intro.html) no *Guia do usuário do Amazon Neptune*. 

Sem um banco de dados de grafo, como o Neptune, é provável que você modele os dados altamente conectados em um banco de dados relacional. Como os dados têm conexões potencialmente dinâmicas, as aplicações que utilizam essas fontes de dados precisam modelar consultas de dados conectadas no SQL. Essa abordagem exigirá que você grave uma camada extra para converter consultas gráficas em SQL. Além disso, os bancos de dados relacionais vêm com rigidez de esquema. Quaisquer alterações no esquema para modelar conexões alteradas requerem tempo de inatividade e manutenção adicional da conversão da consulta para oferecer suporte ao novo esquema. Além disso, o desempenho da consulta é outra grande restrição a ser considerada ao projetar seus aplicativos.

Os bancos de dados de grafos podem simplificar muito essas situações. Livre de um esquema, uma camada de consulta de grafos avançada (Gremlin ou SPARQL) e índices otimizados para consultas de grafos aumentam a flexibilidade e o desempenho. O banco de dados de grafo Amazon Neptune também tem recursos corporativos, como a criptografia em repouso, uma camada de autorização segura, backups padrão, suporte a multi-AZ, suporte a réplicas de leitura e outros.

Usando AWS DMS, você pode migrar dados relacionais que modelam um gráfico altamente conectado para um endpoint de destino do Neptune a partir de um endpoint de origem do DMS para qualquer banco de dados SQL compatível.

Para obter mais detalhes, consulte as informações a seguir.

**Topics**
+ [Visão geral da migração para o Amazon Neptune como destino](#CHAP_Target.Neptune.MigrationOverview)
+ [Especificar as configurações do endpoint do Amazon Neptune como destino](#CHAP_Target.Neptune.EndpointSettings)
+ [Criar um perfil de serviço do IAM para acessar o Amazon Neptune como destino](#CHAP_Target.Neptune.ServiceRole)
+ [Especificar regras de mapeamento de grafos utilizando Gremlin e R2RML para o Amazon Neptune como destino](#CHAP_Target.Neptune.GraphMapping)
+ [Tipos de dados para migração de Gremlin e R2RML para o Amazon Neptune como destino](#CHAP_Target.Neptune.DataTypes)
+ [Limitações da utilização do Amazon Neptune como destino](#CHAP_Target.Neptune.Limitations)

## Visão geral da migração para o Amazon Neptune como destino
<a name="CHAP_Target.Neptune.MigrationOverview"></a>

Antes de iniciar uma migração para um alvo do Neptune, crie os seguintes recursos em sua conta: AWS 
+ Um cluster do Neptune para o endpoint de destino. 
+ Um banco de dados relacional SQL suportado AWS DMS pelo endpoint de origem. 
+ Um bucket do Amazon S3 para o endpoint de destino. Crie esse bucket do S3 na mesma AWS região do seu cluster Neptune. AWS DMS usa esse bucket do S3 como armazenamento intermediário de arquivos para os dados de destino que ele carrega em massa no banco de dados Neptune. Para obter mais informações sobre como criar um bucket do S3, consulte [Criar um bucket](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html), no *Guia do usuário do Amazon Simple Storage Service*.
+ Um endpoint de nuvem privada virtual (VPC) para o S3 na mesma VPC que o cluster do Neptune. 
+ Uma função AWS Identity and Access Management (IAM) que inclui uma política de IAM. Essa política deve especificar as permissões `GetObject`, `PutObject`, `DeleteObject` e `ListObject` para o bucket do S3 do endpoint de destino. Essa função é assumida por ambos AWS DMS e por Neptune com acesso do IAM ao bucket S3 de destino e ao banco de dados Neptune. Para obter mais informações, consulte [Criar um perfil de serviço do IAM para acessar o Amazon Neptune como destino](#CHAP_Target.Neptune.ServiceRole).

Depois de ter esses recursos, a configuração e a inicialização de uma migração para um destino do Neptune é semelhante a qualquer migração de carga máxima utilizando o console ou a API do DMS. No entanto, uma migração para um destino do Neptune exige algumas etapas exclusivas.

**Para migrar um banco de dados AWS DMS relacional para o Neptune**

1. Crie uma instância de replicação conforme descrito em [Criar uma instância de replicação](CHAP_ReplicationInstance.Creating.md).

1. Crie e teste um banco de dados relacional SQL compatível AWS DMS com o endpoint de origem.

1. Crie e teste o endpoint de destino do banco de dados Neptune. 

   Para conectar o endpoint de destino ao banco de dados Neptune, especifique o nome do servidor para o endpoint do cluster do Neptune ou para o endpoint da instância do gravador do Neptune. Além disso, especifique a pasta de bucket do S3 AWS DMS para armazenar seus arquivos intermediários para carregamento em massa no banco de dados Neptune. 

   Durante a migração, AWS DMS armazena todos os dados de destino migrados nessa pasta de bucket do S3 até o tamanho máximo de arquivo especificado por você. Quando esse armazenamento de arquivos atinge esse tamanho máximo, carrega AWS DMS em massa os dados do S3 armazenados no banco de dados de destino. Ele limpará a pasta para ativar o armazenamento de quaisquer dados de destino adicionais para carregamento posterior no banco de dados de destino. Para obter mais informações sobre como especificar essas configurações, consulte [Especificar as configurações do endpoint do Amazon Neptune como destino](#CHAP_Target.Neptune.EndpointSettings).

1. Crie uma tarefa de replicação de carga máxima com os recursos criados nas etapas 1 a 3 e siga estas etapas: 

   1. Utilize o mapeamento da tabela de tarefas como de costume para identificar esquemas, tabelas e visualizações de origem específicos para migrar do banco de dados relacional utilizando as regras de seleção e de transformação apropriadas. Para obter mais informações, consulte [Utilizar o mapeamento de tabela para especificar as configurações da tarefa](CHAP_Tasks.CustomizingTasks.TableMapping.md). 

   1. Especifique os mapeamentos de destino, escolhendo uma das opções a seguir para especificar as regras de mapeamento de tabelas e visualizações de origem para o grafo do banco de dados de destino do Neptune:
      + JSON do Gremlin: para obter informações sobre como utilizar o JSON do Gremlin para carregar um banco de dados Neptune, consulte [Formato de dados de carga do Gremlin](https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html) no *Guia do usuário do Amazon Neptune*.
      + SPARQL RDB to Resource Description Framework Mapping Language (R2RML): para obter informações sobre como utilizar SPARQL R2RML, consulte a especificação do W3C [R2RML: RDB para a linguagem de mapeamento RDF](https://www.w3.org/TR/r2rml/).

   1. Execute um dos seguintes procedimentos:
      + Usando o AWS DMS console, especifique as opções de mapeamento **gráfico usando as regras de mapeamento gráfico na página** **Criar tarefa de migração de banco de dados**. 
      + Usando a AWS DMS API, especifique essas opções usando o parâmetro de `TaskData` solicitação da chamada da `CreateReplicationTask` API. 

      Para obter mais informações e exemplos que utilizam JSON de Gremlin e o SPARQL R2RML para especificar regras de mapeamento de grafos, consulte [Especificar regras de mapeamento de grafos utilizando Gremlin e R2RML para o Amazon Neptune como destino](#CHAP_Target.Neptune.GraphMapping).

1. Iniciar a replicação para sua tarefa de migração.

## Especificar as configurações do endpoint do Amazon Neptune como destino
<a name="CHAP_Target.Neptune.EndpointSettings"></a>

Para criar ou modificar um endpoint de destino, é possível usar o console `CreateEndpoint` ou as operações de API `ModifyEndpoint`. 

**Para um alvo do Neptune no console, **especifique as configurações específicas AWS DMS do Endpoint na página Criar endpoint** **ou Modificar endpoint do** console.** Para `CreateEndpoint` e `ModifyEndpoint`, especifique os parâmetros de solicitação para a opção `NeptuneSettings`. O exemplo a seguir mostra como fazer isso utilizando a CLI. 

```
dms create-endpoint --endpoint-identifier my-neptune-target-endpoint
--endpoint-type target --engine-name neptune 
--server-name my-neptune-db.cluster-cspckvklbvgf.us-east-1.neptune.amazonaws.com 
--port 8192
--neptune-settings 
     '{"ServiceAccessRoleArn":"arn:aws:iam::123456789012:role/myNeptuneRole",
       "S3BucketName":"amzn-s3-demo-bucket",
       "S3BucketFolder":"amzn-s3-demo-bucket-folder",
       "ErrorRetryDuration":57,
       "MaxFileSize":100, 
       "MaxRetryCount": 10, 
       "IAMAuthEnabled":false}‘
```

Aqui, a opção da CLI `--server-name` especifica o nome do servidor para o endpoint do gravador de cluster do Neptune. Ou é possível especificar o nome do servidor para um endpoint de instância do gravador do Neptune. 

Os parâmetros de solicitação de opção `--neptune-settings` são:
+ `ServiceAccessRoleArn`: (obrigatório) o nome do recurso da Amazon (ARN) do perfil de serviço criado para o endpoint de destino do Neptune. Para obter mais informações, consulte [Criar um perfil de serviço do IAM para acessar o Amazon Neptune como destino](#CHAP_Target.Neptune.ServiceRole).
+ `S3BucketName`: (obrigatório) o nome do bucket do S3 em que o DMS pode armazenar temporariamente dados de grafo migrados em arquivos .csv antes de carregá-los em massa para o banco de dados de destino Neptune. O DMS mapeia os dados de origem SQL para dados de grafo antes de armazená-los nesses arquivos .csv.
+ `S3BucketFolder`: (obrigatório) o caminho de uma pasta em que você deseja que o DMS armazene dados de grafo migrados no bucket do S3 especificado por `S3BucketName`.
+ `ErrorRetryDuration`: (opcional) o número de milissegundos de espera do DMS para repetir uma carga de dados de grafo migrados para o banco de dados de destino Neptune antes de gerar um erro. O padrão é 250.
+ `MaxFileSize`: (opcional) o tamanho máximo em KB de dados de grafo migrados armazenados em um arquivo .csv antes que o DMS execute a carga em massa dos dados para o banco de dados de destino Neptune. O padrão é 1.048.576 KB (1 GB). Se for bem-sucedido, o DMS limpará o bucket, pronto para armazenar o próximo lote de dados de grafo migrados.
+ `MaxRetryCount`: (opcional) o número de vezes para o DMS repetir uma carga em massa de dados de grafo migrados para o banco de dados de destino do Neptune antes de gerar um erro. O padrão é 5.
+ `IAMAuthEnabled`: (opcional) se desejar a autorização do IAM ativada para esse endpoint, defina esse parâmetro como `ServiceAccessRoleArn` e anexe o documento de política do IAM apropriado ao perfil de serviço especificado por `true`. O padrão é `false`.

## Criar um perfil de serviço do IAM para acessar o Amazon Neptune como destino
<a name="CHAP_Target.Neptune.ServiceRole"></a>

Para acessar o Neptune como destino, crie um perfil de serviço utilizando o IAM. Dependendo da configuração do endpoint do Neptune, anexe a esse perfil alguns ou todos os documentos de confiança e de política do IAM. Ao criar o endpoint do Neptune, forneça o ARN desse perfil de serviço. Isso permite AWS DMS que o Amazon Neptune assuma permissões para acessar o Neptune e seu bucket Amazon S3 associado.

Se você definir o parâmetro `IAMAuthEnabled` em `NeptuneSettings` como `true` na configuração do endpoint do Neptune, anexe uma política do IAM como a seguinte ao perfil de serviço. Se definir `IAMAuthEnabled` como `false`, é possível ignorar esta política.

```
// Policy to access Neptune

    {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": "neptune-db:*",
                "Resource": "arn:aws:neptune-db:us-east-1:123456789012:cluster-CLG7H7FHK54AZGHEH6MNS55JKM/*"
            }
        ]
    }
```

A política do IAM anterior permite acesso total ao cluster de destino do Neptune especificado por `Resource`.

Anexe uma política do IAM como a seguinte ao perfil de serviço. Essa política permite que o DMS armazene temporariamente dados de grafos migrados no bucket do S3 criados para carregamento em massa no banco de dados de destino do Neptune.

```
//Policy to access S3 bucket

{
	"Version": "2012-10-17",		 	 	 
	"Statement": [{
			"Sid": "ListObjectsInBucket0",
			"Effect": "Allow",
			"Action": "s3:ListBucket",
			"Resource": [
				"arn:aws:s3:::amzn-s3-demo-bucket"
			]
		},
		{
			"Sid": "AllObjectActions",
			"Effect": "Allow",
			"Action": ["s3:GetObject",
				"s3:PutObject",
				"s3:DeleteObject"
			],

			"Resource": [
				"arn:aws:s3:::amzn-s3-demo-bucket/"
			]
		},
		{
			"Sid": "ListObjectsInBucket1",
			"Effect": "Allow",
			"Action": "s3:ListBucket",
			"Resource": [
				"arn:aws:s3:::amzn-s3-demo-bucket",
				"arn:aws:s3:::amzn-s3-demo-bucket/"
			]
		}
	]
}
```

A política do IAM anterior permite que a sua conta consulte o conteúdo do bucket do S3 (`arn:aws:s3:::amzn-s3-demo-bucket`) criado para o destino do Neptune. Ela também permite que sua conta opere totalmente no conteúdo de todos os arquivos e pastas do bucket (`arn:aws:s3:::amzn-s3-demo-bucket/`).

Edite a relação de confiança e anexe a seguinte função do IAM à sua função de serviço para permitir que tanto o serviço de banco de dados Amazon Neptune AWS DMS quanto o Amazon Neptune assumam a função.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "dms.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Sid": "neptune",
      "Effect": "Allow",
      "Principal": {
        "Service": "rds.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

Para obter informações sobre como especificar esse perfil de serviço para o endpoint de destino Neptune, consulte [Especificar as configurações do endpoint do Amazon Neptune como destino](#CHAP_Target.Neptune.EndpointSettings).

## Especificar regras de mapeamento de grafos utilizando Gremlin e R2RML para o Amazon Neptune como destino
<a name="CHAP_Target.Neptune.GraphMapping"></a>

As regras de mapeamento de grafos criadas especificam como os dados extraídos de uma origem de banco de dados relacional SQL são carregados em um destino de cluster de banco de dados Neptune. O formato dessas regras de mapeamento difere dependendo se as regras são para carregar dados do gráfico de propriedades usando o Apache TinkerPop Gremlin ou dados do Resource Description Framework (RDF) usando R2RML. A seguir, você encontrará informações sobre esses formatos e muito mais.

É possível especificar essas regras de mapeamento ao criar a tarefa de migração utilizando o console ou a API do DMS. 

Utilizando o console, especifique essas regras de mapeamento utilizando **Regras de mapeamento de grafos** na página **Criar tarefa de migração de banco de dados**. Em **Regras de mapeamento de grafos**, é possível inserir e editar as regras de mapeamento diretamente utilizando o editor fornecido. Ou é possível procurar um arquivo que contenha as regras de mapeamento no formato apropriado de mapeamento de grafos. 

Utilizando a API, especifique essas opções utilizando o parâmetro de solicitação `TaskData` da chamada de API `CreateReplicationTask`. Defina `TaskData` como o caminho de um arquivo que contém as regras de mapeamento no formato de mapeamento de grafos apropriado.

### Regras de mapeamento de grafos para geração de dados de grafo de propriedade utilizando o Gremlin
<a name="CHAP_Target.Neptune.GraphMapping.Gremlin"></a>

Utilizando o Gremlin para gerar os dados de grafos de propriedade, especifique um objeto JSON com uma regra de mapeamento para cada entidade de grafo a ser gerada dos dados de origem. O formato deste JSON é definido especificamente para carga em massa do Amazon Neptune. O modelo a seguir mostra como é cada regra nesse objeto:

```
{
    "rules": [
        {
            "rule_id": "(an identifier for this rule)",
            "rule_name": "(a name for this rule)",
            "table_name": "(the name of the table or view being loaded)",
            "vertex_definitions": [
                {
                    "vertex_id_template": "{col1}",
                    "vertex_label": "(the vertex to create)",
                    "vertex_definition_id": "(an identifier for this vertex)",
                    "vertex_properties": [
                        {
                            "property_name": "(name of the property)",
                            "property_value_template": "{col2} or text",
                            "property_value_type": "(data type of the property)"
                        }
                    ]
                }
            ]
        },
        {
            "rule_id": "(an identifier for this rule)",
            "rule_name": "(a name for this rule)",
            "table_name": "(the name of the table or view being loaded)",
            "edge_definitions": [
                {
                    "from_vertex": {
                        "vertex_id_template": "{col1}",
                        "vertex_definition_id": "(an identifier for the vertex referenced above)"
                    },
                    "to_vertex": {
                        "vertex_id_template": "{col3}",
                        "vertex_definition_id": "(an identifier for the vertex referenced above)"
                    },
                    "edge_id_template": {
                        "label": "(the edge label to add)",
                        "template": "{col1}_{col3}"
                    },
                    "edge_properties":[
                        {
                            "property_name": "(the property to add)",
                            "property_value_template": "{col4} or text",
                            "property_value_type": "(data type like String, int, double)"
                        }
                    ]
                }
            ]
        }
    ]
}
```

A presença de um rótulo de vértice implica que o vértice está sendo criado aqui. Sua ausência implica que o vértice está sendo criado por uma origem diferente, e essa definição está adicionando apenas propriedades de vértice. Especifique quantas definições de vértice e borda forem necessárias para especificar os mapeamentos para toda a origem do banco de dados relacional.

Veja a seguir uma regra de exemplo para uma tabela `employee`.

```
{
    "rules": [
        {
            "rule_id": "1",
            "rule_name": "vertex_mapping_rule_from_nodes",
            "table_name": "nodes",
            "vertex_definitions": [
                {
                    "vertex_id_template": "{emp_id}",
                    "vertex_label": "employee",
                    "vertex_definition_id": "1",
                    "vertex_properties": [
                        {
                            "property_name": "name",
                            "property_value_template": "{emp_name}",
                            "property_value_type": "String"
                        }
                    ]
                }
            ]
        },
        {
            "rule_id": "2",
            "rule_name": "edge_mapping_rule_from_emp",
            "table_name": "nodes",
            "edge_definitions": [
                {
                    "from_vertex": {
                        "vertex_id_template": "{emp_id}",
                        "vertex_definition_id": "1"
                    },
                    "to_vertex": {
                        "vertex_id_template": "{mgr_id}",
                        "vertex_definition_id": "1"
                    },
                    "edge_id_template": {
                        "label": "reportsTo",
                        "template": "{emp_id}_{mgr_id}"
                    },
                    "edge_properties":[
                        {
                            "property_name": "team",
                            "property_value_template": "{team}",
                            "property_value_type": "String"
                        }
                    ]
                }
            ]
        }
    ]
}
```

Aqui, as definições de vértice e borda mapeiam uma relação hierárquica de um nó `employee` com ID de funcionário (`EmpID`) e um nó `employee` com um ID de gerente (`managerId`).

Para obter mais informações sobre como criar regras de mapeamento de grafos utilizando JSON do Gremlin, consulte [Formato de dados de carga do Gremlin](https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html) no *Guia do usuário do Amazon Neptune*.

### Regras de mapeamento gráfico para gerar dados RDF/SPARQL
<a name="CHAP_Target.Neptune.GraphMapping.R2RML"></a>

Se você estiver carregando dados RDF a serem consultados utilizando SPARQL, grave as regras de mapeamento de grafos no R2RML. R2RML é uma linguagem W3C padrão de mapeamento de dados relacionais para RDF. Em um arquivo R2RML, um *mapa triplo* (por exemplo, `<#TriplesMap1>` a seguir) especifica uma regra para transformar cada linha de uma tabela lógica em RDF triplos. Um *mapa de assunto* (por exemplo, `rr:subjectMap` a seguir) especifica uma regra para gerar os assuntos dos RDF triplos gerados por um mapa triplo. Um *mapa de objeto de predicado* (por exemplo, qualquer `rr:predicateObjectMap` a seguir) é um perfil que cria um ou mais pares de objetos de predicado para cada linha de uma tabela lógica.

Segue um exemplo simples para uma tabela de `nodes`.

```
@prefix rr: <http://www.w3.org/ns/r2rml#>.
@prefix ex: <http://example.com/ns#>.

<#TriplesMap1>
    rr:logicalTable [ rr:tableName "nodes" ];
    rr:subjectMap [
        rr:template "http://data.example.com/employee/{id}";
        rr:class ex:Employee;
    ];
    rr:predicateObjectMap [
        rr:predicate ex:name;
        rr:objectMap [ rr:column "label" ];
    ]
```

No exemplo anterior, o mapeamento define nós de grafo mapeados a partir de uma tabela de funcionários.

Veja outro exemplo simples de tabela `Student`.

```
@prefix rr: <http://www.w3.org/ns/r2rml#>.
@prefix ex: <http://example.com/#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.

<#TriplesMap2>
    rr:logicalTable [ rr:tableName "Student" ];
    rr:subjectMap   [ rr:template "http://example.com/{ID}{Name}";
                      rr:class foaf:Person ];
    rr:predicateObjectMap [
        rr:predicate ex:id ;
        rr:objectMap  [ rr:column "ID";
                        rr:datatype xsd:integer ]
    ];
    rr:predicateObjectMap [
        rr:predicate foaf:name ;
        rr:objectMap  [ rr:column "Name" ]
    ].
```

No exemplo anterior, o mapeamento define nós gráficos que friend-of-a-friend mapeiam relacionamentos entre pessoas em uma `Student` tabela.

Para obter mais informações sobre como criar regras de mapeamento de grafos utilizando SPARQL R2RML, consulte a especificação W3C [R2RML: RDB to RDF Mapping Language](https://www.w3.org/TR/r2rml/).

## Tipos de dados para migração de Gremlin e R2RML para o Amazon Neptune como destino
<a name="CHAP_Target.Neptune.DataTypes"></a>

AWS DMS executa o mapeamento do tipo de dados do endpoint de origem do SQL para o destino do Neptune de duas maneiras. O modo utilizado depende do formato do mapeamento de grafos utilizado para carregar o banco de dados Neptune: 
+ Apache TinkerPop Gremlin, usando uma representação JSON dos dados de migração.
+ SPARQL do W3C, utilizando uma representação R2RML dos dados de migração. 

Para obter mais informações sobre esses dois formatos de mapeamento de grafos, consulte [Especificar regras de mapeamento de grafos utilizando Gremlin e R2RML para o Amazon Neptune como destino](#CHAP_Target.Neptune.GraphMapping).

Veja a seguir descrições dos mapeamentos de tipos de dados para cada formato.

### Mapeamentos de tipos de dados de origem SQL para destino Gremlin
<a name="CHAP_Target.Neptune.DataTypes.Gremlin"></a>

A tabela a seguir mostra os mapeamentos de tipos de dados de uma origem SQL para um destino Gremlin formatado. 

AWS DMS mapeia qualquer tipo de dados de origem SQL não listado para um `String` Gremlin.



[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.Neptune.html)

Para obter mais informações sobre os tipos de dados do Gremlin para carregamento do Neptune, consulte [Tipos de dados do Gremlin](https://docs.aws.amazon.com//neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html#bulk-load-tutorial-format-gremlin-datatypes) no *Guia do usuário do Neptune*.

### Mapeamentos de tipos de dados de origem SQL para destino R2RML (RDF)
<a name="CHAP_Target.Neptune.DataTypes.R2RML"></a>

A tabela a seguir mostra os mapeamentos de tipos de dados de uma origem SQL para um destino R2RML formatado.

Todos os tipos de dados RDF listados diferenciam maiúsculas de minúsculas, exceto RDF literal. AWS DMS mapeia qualquer tipo de dados de origem SQL não listado para um literal RDF. 

Um *RDF literal* é uma de muitas formas e tipos de dados lexicais e literais. Para obter mais informações, consulte [RDF Literals](https://www.w3.org/TR/2004/REC-rdf-concepts-20040210/#section-Graph-Literal) na especificação W3C *Resource Description Framework (RDF): conceitos e sintaxe abstrata*.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.Neptune.html)

Para obter mais informações sobre os tipos de dados RDF para carregamento do Neptune e de seus mapeamentos para tipos de dados de origem SQL, consulte [Conversões de tipo de dados](https://www.w3.org/TR/r2rml/#datatype-conversions) na especificação do *W3C R2RML: RDB para linguagem de mapeamento RDF*.

## Limitações da utilização do Amazon Neptune como destino
<a name="CHAP_Target.Neptune.Limitations"></a>

Aplicam-se as seguintes limitações ao utilizar o Neptune como destino:
+ AWS DMS atualmente suporta tarefas de carga total somente para migração para um destino de Neptune. A migração de captura de dados de alterações (CDC) para um destino do Neptune não é compatível.
+ Verifique se o banco de dados Neptune de destino é limpo manualmente de todos os dados antes de iniciar a tarefa de migração, como nos exemplos a seguir.

  Para descartar todos os dados (vértices e bordas) dentro do grafo, execute o seguinte comando do Gremlin.

  ```
  gremlin> g.V().drop().iterate()
  ```

  Para descartar vértices com o rótulo `'customer'`, execute o seguinte comando do Gremlin.

  ```
  gremlin> g.V().hasLabel('customer').drop()
  ```
**nota**  
A remoção de um grande conjunto de dados pode levar algum tempo. Talvez você queira iterar `drop()` com uma limitação, por exemplo, `limit(1000)`.

  Para descartar bordas com o rótulo `'rated'`, execute o seguinte comando do Gremlin.

  ```
  gremlin> g.E().hasLabel('rated').drop()
  ```
**nota**  
A remoção de um grande conjunto de dados pode levar algum tempo. Talvez você queira iterar `drop()` com uma limitação, por exemplo, `limit(1000)`.
+ A operação da API do DMS `DescribeTableStatistics` pode retornar resultados imprecisos sobre determinada tabela devido à natureza das estruturas de dados do grafo do Neptune.

  Durante a migração, AWS DMS verifica cada tabela de origem e usa o mapeamento gráfico para converter os dados de origem em um gráfico de Netuno. Os dados convertidos são armazenados primeiro na pasta de bucket do S3 especificada para o endpoint de destino. Se a origem for verificada e esses dados intermediários do S3 forem gerados com êxito, `DescribeTableStatistics` pressupõe que os dados foram carregados com êxito no banco de dados de destino do Neptune. Entretanto, isso nem sempre é verdade. Para verificar se os dados foram carregados corretamente para determinada tabela, compare os valores de retorno `count()` nas extremidades da migração para essa tabela. 

  No exemplo a seguir, AWS DMS carregou uma `customer` tabela do banco de dados de origem, à qual é atribuído o rótulo `'customer'` no gráfico do banco de dados Neptune de destino. É possível certificar-se de que esse rótulo seja gravado no banco de dados de destino. Para isso, compare o número de linhas do `customer` disponíveis no banco de dados de origem com o número de linhas rotuladas do `'customer'` carregadas no banco de dados de destino do Neptune após a conclusão da tarefa.

  Para obter o número de linhas disponíveis do cliente no banco de dados de origem utilizando SQL, execute o seguinte procedimento.

  ```
  select count(*) from customer;
  ```

  Para obter o número de linhas rotuladas `'customer'` carregadas no grafo do banco de dados de destino utilizando Gremlin, execute o seguinte procedimento.

  ```
  gremlin> g.V().hasLabel('customer').count()
  ```
+ Atualmente, se uma única tabela não for carregada, toda a tarefa falhará. Diferentemente de um banco de dados relacional de destino, os dados no Neptune são altamente conectados, o que torna impossível, em muitos casos, retomar uma tarefa. Se uma tarefa não puder ser retomada com êxito devido a esse tipo de falha de carga de dados, crie uma nova tarefa para carregar a tabela que apresentou falha no carregamento. Antes de executar essa nova tarefa, limpe manualmente a tabela parcialmente carregada do destino do Neptune.
**nota**  
É possível retomar uma tarefa com falha na migração para um destino do Neptune se a falha for recuperável (por exemplo, um erro de trânsito de rede).
+ AWS DMS suporta a maioria dos padrões para R2RML. No entanto, AWS DMS não é compatível com determinados padrões R2RML, incluindo expressões inversas, junções e visualizações. Uma solução alternativa para uma exibição R2RML é criar uma exibição SQL personalizada correspondente no banco de dados de origem. Na tarefa de migração, utilize o mapeamento de tabela para escolher a exibição como entrada. Mapeie a exibição para uma tabela que seja então consumida pelo R2RML para gerar dados de grafo.
+ Ao migrar dados de origem com tipos de dados SQL não é compatível com dos, os dados de destino resultantes podem ter perda de precisão. Para obter mais informações, consulte [Tipos de dados para migração de Gremlin e R2RML para o Amazon Neptune como destino](#CHAP_Target.Neptune.DataTypes).
+ AWS DMS não suporta a migração de dados LOB para um destino do Neptune.

# Usando o Redis OSS como alvo para AWS Database Migration Service
<a name="CHAP_Target.Redis"></a>

O Redis OSS é um armazenamento de estrutura de dados de código aberto em memória utilizado como um banco de dados, cache e agente de mensagens. O gerenciamento de dados na memória pode resultar em operações de leitura ou gravação que demoram menos de um milissegundo e centenas de milhões de operações executadas a cada segundo. Como um datastore em memória, o Redis OSS capacita as aplicações que exigem tempos de resposta inferiores a um milissegundo.

Usando AWS DMS, você pode migrar dados de qualquer banco de dados de origem compatível para um armazenamento de dados Redis OSS de destino com o mínimo de tempo de inatividade. Para ter informações adicionais sobre o Redis OSS, consulte a [documentação do Redis OSS](https://redis.io/documentation).

Além do Redis OSS local, AWS Database Migration Service oferece suporte ao seguinte:
+ [Amazon ElastiCache (Redis OSS) como armazenamento](https://aws.amazon.com/elasticache/redis/) de dados de destino. ElastiCache (Redis OSS) trabalha com seus clientes do Redis OSS e usa o formato de dados aberto do Redis OSS para armazenar seus dados.
+ [Amazon MemoryDB](https://aws.amazon.com/memorydb/) como datastore de destino. O MemoryDB é compatível com o Redis OSS e permite que você crie aplicativos usando todas as estruturas de dados e comandos do Redis OSS em uso atualmente APIs.

Para obter informações adicionais sobre como trabalhar com o Redis OSS como alvo AWS DMS, consulte as seções a seguir: 

**Topics**
+ [Pré-requisitos para usar um cluster Redis OSS como destino para AWS DMS](#CHAP_Target.Redis.Prerequisites)
+ [Limitações ao usar o Redis como alvo para AWS Database Migration Service](#CHAP_Target.Redis.Limitations)
+ [Migrar dados de um banco de dados relacional ou não relacional para um destino do Redis OSS](#CHAP_Target.Redis.Migrating)
+ [Especificar as configurações de endpoint para o Redis OSS como destino](#CHAP_Target.Redis.EndpointSettings)

## Pré-requisitos para usar um cluster Redis OSS como destino para AWS DMS
<a name="CHAP_Target.Redis.Prerequisites"></a>

O DMS é compatível com um destino do Redis OSS on-premises em uma configuração independente ou como um cluster do Redis OSS em que os dados são automaticamente *fragmentados* em vários nós. A fragmentação é o processo de separar os dados em blocos menores, chamados de fragmentos, que são espalhados por vários servidores ou nós. Na verdade, um fragmento é uma partição de dados que contém um subconjunto do conjunto total de dados e serve como uma fatia da workload geral.

Como o Redis OSS é um datastore NoSQL de chave/valor, a convenção de nomenclatura de chaves do Redis OSS a ser utilizada quando a origem for um banco de dados relacional é **schema-name.table-name.primary-key**. No Redis OSS, a chave e o valor não devem conter o caractere especial %. Caso contrário, o DMS ignorará o registro. 

**nota**  
Se você estiver usando ElastiCache (Redis OSS) como destino, o DMS suporta somente configurações *habilitadas para o modo de cluster*. Para obter mais informações sobre o uso do ElastiCache (Redis OSS) versão 6.x ou superior para criar um armazenamento de dados de destino habilitado para o modo de cluster, consulte [Introdução](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/GettingStarted.html) no Guia do usuário da *Amazon ElastiCache (Redis OSS*). 

Antes de começar a migração de um banco de dados, inicie o cluster do Redis OSS com os seguintes critérios.
+ O cluster tem um ou mais fragmentos.
+ Se você estiver usando um destino ElastiCache (Redis OSS), certifique-se de que seu cluster não use o controle de acesso baseado em funções do IAM. Em vez disso, utilize o Redis OSS Auth para autenticar usuários.
+ Ative multi-AZ (zonas de disponibilidade).
+ Verifique se o cluster tem memória suficiente disponível para comportar os dados a serem migrados do banco de dados. 
+ Verifique se todos os dados do cluster do Redis OSS de destino estão limpos antes de iniciar a tarefa de migração inicial.

Determine os requisitos de segurança da migração de dados antes de criar a configuração do cluster. O DMS é compatível com a migração para grupos de replicação de destino, independentemente de sua configuração de criptografia. Mas é possível ativar ou desativar a criptografia somente ao criar a configuração do cluster.

## Limitações ao usar o Redis como alvo para AWS Database Migration Service
<a name="CHAP_Target.Redis.Limitations"></a>

Aplicam-se as seguintes limitações ao utilizar o Redis OSS como destino:
+ Como o Redis OSS é um datastore no-sql de chave/valor, a convenção de nomenclatura de chaves do Redis OSS a ser utilizada quando a origem for um banco de dados relacional é `schema-name.table-name.primary-key`. 
+ No Redis OSS, a chave/valor não pode conter o caractere especial `%`. Caso contrário, o DMS ignorará o registro.
+ O DMS não migrará linhas que contenham o caractere `%`.
+ O DMS não migrará campos que contenham o caractere `%` no nome do campo.
+ O modo Full LOB não é compatível.
+  Não há suporte para uma Autoridade de Certificação (CA) privada ao usar ElastiCache (Redis OSS) como destino.
+ AWS DMS não oferece suporte a dados de origem contendo `'\0'` caracteres incorporados ao usar o Redis como um endpoint de destino. Os dados contendo `'\0'` caracteres incorporados serão truncados no primeiro `'\0'` caractere.

## Migrar dados de um banco de dados relacional ou não relacional para um destino do Redis OSS
<a name="CHAP_Target.Redis.Migrating"></a>

É possível migrar dados de qualquer datastore SQL ou NoSQL de origem diretamente para um destino do Redis OSS. A configuração e o início de uma migração para um destino do Redis OSS é semelhante a qualquer migração de carga máxima e de captura de dados de alteração utilizando o console ou a API do DMS. Para executar uma migração de banco de dados para um destino do Redis OSS, faça o seguinte.
+ Crie uma instância de replicação para executar todos os processos da migração. Para obter mais informações, consulte [Criar uma instância de replicação](CHAP_ReplicationInstance.Creating.md).
+ Especifique um endpoint de origem. Para obter mais informações, consulte [Criar endpoints de origem e de destino](CHAP_Endpoints.Creating.md).
+ Localize o nome DNS e o número da porta do cluster.
+ Baixe um pacote de certificado que pode ser utilizado para verificar conexões SSL.
+ Especifique um endpoint de destino, conforme descrito abaixo.
+ Crie uma tarefa ou um conjunto de tarefas para definir as tabelas e os processos de replicação a serem utilizados. Para obter mais informações, consulte [Criar uma tarefa](CHAP_Tasks.Creating.md).
+ Migre dados do banco de dados de origem para o cluster de destino.

Você inicia uma migração do banco de dados de uma duas maneiras:

1. Você pode escolher o AWS DMS console e executar cada etapa lá.

1. Você pode usar o AWS Command Line Interface (AWS CLI). [Para obter mais informações sobre como usar a CLI com AWS DMS, consulte AWS CLI . AWS DMS](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)

**Como localizar o nome DNS e o número da porta do cluster**
+ Use o AWS CLI comando a seguir para `replication-group-id` fornecer o nome do seu grupo de replicação.

  ```
  aws elasticache describe-replication-groups --replication-group-id myreplgroup
  ```

  Aqui, a saída mostra o nome DNS no atributo `Address` e o número da porta no atributo `Port` do nó primário no cluster. 

  ```
   ...
  "ReadEndpoint": {
  "Port": 6379,
  "Address": "myreplgroup-
  111.1abc1d.1111.uuu1.cache.example.com"
  }
  ...
  ```

  Se estiver utilizando o MemoryDB como destino, utilize o comando da AWS CLI a seguir para fornecer um endereço de endpoint ao cluster do Redis OSS. 

  ```
  aws memorydb describe-clusters --clusterid clusterid
  ```

**Baixe um pacote de certificado a ser utilizado para verificar as conexões SSL.**
+ Insira o comando `wget` na linha de comando. O Wget é uma ferramenta utilitária de linha de comando GNU gratuita utilizada para baixar arquivos na internet.

  ```
  wget https://s3.aws-api-domain/rds-downloads/rds-combined-ca-bundle.pem
  ```

  Aqui, `aws-api-domain` preenche o domínio do Amazon S3 em AWS sua região necessário para acessar o bucket do S3 especificado e rds-combined-ca-bundle o arquivo.pem que ele fornece.

**Para criar um endpoint de destino usando o console AWS DMS**

Esse endpoint é para o destino do Redis OSS que já está em execução. 
+ No console, escolha **Endpoints** no painel de navegação e escolha **Criar endpoint**. A tabela a seguir descreve as configurações.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.Redis.html)

Depois de você concluir o fornecimento de todas as informações do endpoint, o AWS DMS cria o endpoint de destino do Redis OSS para utilização durante a migração do banco de dados.

Para obter informações sobre como criar uma tarefa de migração e iniciar a migração do banco de dados, consulte [Criar uma tarefa](CHAP_Tasks.Creating.md).

## Especificar as configurações de endpoint para o Redis OSS como destino
<a name="CHAP_Target.Redis.EndpointSettings"></a>

Para criar ou modificar um endpoint de destino, é possível usar o console `CreateEndpoint` ou as operações de API `ModifyEndpoint`. 

**Para um destino do Redis OSS no AWS DMS console, especifique as **configurações específicas do endpoint na página Criar endpoint** **ou Modificar o console do endpoint**.**

Ao utilizar as operações da API `CreateEndpoint` e `ModifyEndpoint`, especifique os parâmetros de solicitação para a opção `RedisSettings`. O exemplo a seguir mostra como fazer isso utilizando a AWS CLI.

```
aws dms create-endpoint --endpoint-identifier my-redis-target
--endpoint-type target --engine-name redis --redis-settings 
'{"ServerName":"sample-test-sample.zz012zz.cluster.eee1.cache.bbbxxx.com","Port":6379,"AuthType":"auth-token", 
 "SslSecurityProtocol":"ssl-encryption", "AuthPassword":"notanactualpassword"}'

{
    "Endpoint": {
        "EndpointIdentifier": "my-redis-target",
        "EndpointType": "TARGET",
        "EngineName": "redis",
        "EngineDisplayName": "Redis",
        "TransferFiles": false,
        "ReceiveTransferredFiles": false,
        "Status": "active",
        "KmsKeyId": "arn:aws:kms:us-east-1:999999999999:key/x-b188188x",
        "EndpointArn": "arn:aws:dms:us-east-1:555555555555:endpoint:ABCDEFGHIJKLMONOPQRSTUVWXYZ",
        "SslMode": "none",
        "RedisSettings": {
            "ServerName": "sample-test-sample.zz012zz.cluster.eee1.cache.bbbxxx.com",
            "Port": 6379,
            "SslSecurityProtocol": "ssl-encryption",
            "AuthType": "auth-token"
        }
    }
}
```

Os parâmetros `--redis-settings` são os seguintes:
+ `ServerName`: (obrigatório) do tipo `string`, especifica o cluster do Redis OSS para o qual os dados serão migrados e está na sua mesma VPC.
+ `Port`: (obrigatório) do tipo `number`, o valor da porta utilizada para acessar o endpoint.
+ `SslSecurityProtocol`: (opcional) os valores válidos incluem `plaintext` e `ssl-encryption`. O padrão é `ssl-encryption`. 

  A opção `plaintext` não fornece a criptografia Transport Layer Security (TLS) para o tráfego entre o endpoint e o banco de dados. 

  Utilize `ssl-encryption` para fazer uma conexão criptografada. `ssl-encryption` não exige o ARN de uma Autoridade de Certificação (CA) SSL para verificar o certificado de um servidor, mas um pode ser identificado opcionalmente utilizando a configuração `SslCaCertificateArn`. Se o ARN de autoridade de certificação não for fornecido, o DMS utilizará a CA raiz da Amazon.

  Ao utilizar um destino do Redis OSS on-premises, é possível utilizar `SslCaCertificateArn` para importar a Autoridade de Certificação (CA) pública ou privada para o DMS e fornecer esse ARN para autenticação do servidor. Não há suporte para uma CA privada ao usar ElastiCache (Redis OSS) como destino.
+ `AuthType`: (obrigatório) indica o tipo de autenticação a ser executada ao conectar-se ao Redis OSS. Os valores válidos são `none`, `auth-token` e `auth-role`.

  A `auth-token` opção exige que um "*AuthPassword*" seja fornecido, enquanto a `auth-role` opção exige que *AuthUserName* "" e *AuthPassword* "” sejam fornecidos.

# Usando o Babelfish como alvo para AWS Database Migration Service
<a name="CHAP_Target.Babelfish"></a>

Você pode migrar dados de um banco de dados de origem do Microsoft SQL Server para um destino do Babelfish usando o. AWS Database Migration Service

O Babelfish for Aurora PostgreSQL amplia seu banco de dados Amazon Aurora, edição compatível com PostgreSQL, com a capacidade de aceitar conexões de banco de dados provenientes de clientes Microsoft SQL Server. Fazer isso permite que aplicações originalmente criadas para o SQL Server funcionem diretamente com o Aurora PostgreSQL, com poucas alterações de código em comparação com uma migração tradicional e sem alterar drivers de bancos de dados. 

Para obter informações sobre as versões do Babelfish que são AWS DMS suportadas como alvo, consulte. [Metas para AWS DMS](CHAP_Introduction.Targets.md) As versões anteriores do Babelfish no Aurora PostgreSQL exigem um upgrade antes de utilizar o endpoint do Babelfish.

**nota**  
O endpoint de destino do Aurora PostgreSQL é a forma preferida de migrar dados para o Babelfish. Para obter mais informações, consulte [Utilizar o Babelfish para Aurora PostgreSQL como destino](CHAP_Target.PostgreSQL.md#CHAP_Target.PostgreSQL.Babelfish). 

Para obter informações sobre como utilizar o Babelfish como um endpoint de banco de dados, consulte [Babelfish para Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) no *Guia do usuário do Amazon Aurora para Aurora* 

## Pré-requisitos para usar o Babelfish como alvo para AWS DMS
<a name="CHAP_Target.Babelfish.Prerequisites"></a>

Você deve criar suas tabelas antes de migrar dados para garantir que AWS DMS usa os tipos de dados e metadados de tabela corretos. Se você não criar suas tabelas no destino antes de executar a migração, AWS DMS poderá criar as tabelas com tipos de dados e permissões incorretos. Por exemplo, em vez disso, AWS DMS cria uma coluna de carimbo de data/hora como binária (8) e não fornece a funcionalidade esperada timestamp/rowversion .

**Como preparar e criar as tabelas antes da migração**

1. Execute as instruções DDL de criação de tabela que incluam quaisquer restrições exclusivas, chaves primárias ou restrições padrão. 

   Não inclua restrições de chave estrangeira nem instruções DDL para objetos, como visualizações, procedimentos armazenados, perfis ou acionadores. É possível aplicá-las depois de migrar o banco de dados de origem.

1. Identifique quaisquer colunas de identidade, colunas computadas ou colunas contendo tipos de dados rowversion ou timestamp nas tabelas. Crie as regras de transformação necessárias para lidar com problemas conhecidos ao executar a tarefa de migração. Para ter mais informações, consulte [Regras de transformação e ações](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

1. Identifique colunas com tipos de dados não compatíveis com o Babelfish. Altere as colunas afetadas na tabela de destino para utilizar os tipos de dados compatíveis ou crie uma regra de transformação que os remova durante a tarefa de migração. Para ter mais informações, consulte [Regras de transformação e ações](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).

   A tabela a seguir lista os tipos de dados de origem não compatíveis com o Babelfish e o tipo de dados de destino recomendado correspondente a ser utilizado.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.Babelfish.html)

**Para definir o nível de unidades de capacidade do Aurora (ACUs) para seu banco de dados de origem do Aurora PostgreSQL Serverless V2**

Você pode melhorar o desempenho da sua tarefa de AWS DMS migração antes de executá-la definindo o valor mínimo de ACU.
+ Na janela de **configurações de capacidade do Severless v2**, ACUs defina **Mínimo** **2** ou um nível razoável para seu cluster de banco de dados Aurora.

  Para obter mais informações sobre as unidades de capacidade do Aurora, consulte [Escolher o intervalo de capacidade do Aurora Sem Servidor v2 para um cluster do Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.setting-capacity.html) no *Guia do usuário do Amazon Aurora*. 

Depois de executar sua tarefa de AWS DMS migração, você pode redefinir o valor mínimo ACUs para um nível razoável para seu banco de dados de origem do Aurora PostgreSQL Serverless V2.

## Requisitos de segurança ao usar o Babelfish como alvo para AWS Database Migration Service
<a name="CHAP_Target.Babelfish.Security"></a>

O seguinte descreve os requisitos de segurança para uso AWS DMS com um alvo Babelfish:
+ O nome de usuário do administrador (o usuário administrador) utilizado para criar o banco de dados.
+ Login e usuário do PSQL com permissões suficientes para SELECT, INSERT, UPDATE, DELETE e REFERENCES.

## Permissões de usuário para usar o Babelfish como alvo para AWS DMS
<a name="CHAP_Target.Babelfish.Permissions"></a>

**Importante**  
Para fins de segurança, a conta de usuário utilizada para a migração de dados deve ser um usuário registrado em qualquer banco de dados Babelfish que você utilize como destino.

O endpoint de destino do Babelfish requer permissões mínimas de usuário para executar uma migração do AWS DMS .

**Como criar um login e um usuário do Transact-SQL (T-SQL) com poucos privilégios**

1. Crie um login e uma senha a serem utilizados ao se conectar ao servidor.

   ```
   CREATE LOGIN dms_user WITH PASSWORD = 'password';
   GO
   ```

1. Crie o banco de dados virtual para o cluster do Babelfish.

   ```
   CREATE DATABASE my_database;
   GO
   ```

1. Crie o usuário T-SQL para o banco de dados de destino.

   ```
   USE my_database
   GO
   CREATE USER dms_user FOR LOGIN dms_user;
   GO
   ```

1. Para cada tabela no banco de dados Babelfish, permissões de GRANT para as tabelas.

   ```
   GRANT SELECT, DELETE, INSERT, REFERENCES, UPDATE ON [dbo].[Categories] TO dms_user;  
   ```

## Limitações no uso do Babelfish como alvo para AWS Database Migration Service
<a name="CHAP_Target.Babelfish.Limitations"></a>

As seguintes limitações se aplicam à utilização de um banco de dados Babelfish como destino do AWS DMS:
+ Somente o modo de preparação de tabela “**Não executar nenhuma ação**” é compatível.
+ O tipo de dados ROWVERSION exige uma regra de mapeamento de tabela que remove o nome da coluna da tabela durante a tarefa de migração.
+ O tipo de dados sql\$1variant não é compatível.
+ O modo LOB completo é compatível. Usar o SQL Server como um endpoint de origem exige que a configuração `ForceFullLob=True` do Atributo de Conexão do Endpoint do SQL Server seja definida para LOBs ser migrada para o endpoint de destino.
+ As configurações da tarefa de replicação têm as seguintes limitações:

  ```
  {
     "FullLoadSettings": {
        "TargetTablePrepMode": "DO_NOTHING",
        "CreatePkAfterFullLoad": false,
        }.
      
  }
  ```
+ Os tipos de dados TIME DATETIME2 (7), (7) e DATETIMEOFFSET (7) no Babelfish limitam o valor de precisão da parte de segundos do tempo a 6 dígitos. Considere utilizar um valor de precisão de seis para a tabela de destino ao utilizar esses tipos de dados. Para as versões 2.2.0 e superiores do Babelfish, ao usar TIME (7) e DATETIME2 (7), o sétimo dígito de precisão é sempre zero.
+ No modo DO\$1NOTHING, o DMS verifica se a tabela já existe. Se a tabela não existir no esquema de destino, o DMS criará a tabela com base na definição da tabela de origem e mapeará todos os tipos de dados definidos pelo usuário para o tipo de dados base.
+ Uma tarefa de AWS DMS migração para um destino do Babelfish não suporta tabelas que tenham colunas usando os tipos de dados ROWVERSION ou TIMESTAMP. É possível utilizar uma regra de mapeamento de tabela que remove o nome da coluna da tabela durante o processo de transferência. No exemplo de regra de transformação a seguir, uma tabela nomeada `Actor` na origem é transformada para remover todas as colunas que começam com os caracteres `Actor` da tabela `col` no destino.

  ```
  {
   	"rules": [{
  		"rule-type": "selection",is 
  		"rule-id": "1",
  		"rule-name": "1",
  		"object-locator": {
  			"schema-name": "test",
  			"table-name": "%"
  		},
  		"rule-action": "include"
  	}, {
  		"rule-type": "transformation",
  		"rule-id": "2",
  		"rule-name": "2",
  		"rule-action": "remove-column",
  		"rule-target": "column",
  		"object-locator": {
  			"schema-name": "test",
  			"table-name": "Actor",
  			"column-name": "col%"
  		}
  	}]
   }
  ```
+ Para tabelas com colunas de identidade ou computadas, em que as tabelas de destino utilizam nomes com maiúsculas e minúsculas, como Categorias, crie uma ação de regra de transformação que converta os nomes das tabelas em minúsculas para a tarefa do DMS. O exemplo a seguir mostra como criar a ação da regra de transformação, **Make lowercase**, usando o AWS DMS console. Para obter mais informações, consulte [Regras de transformação e ações](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md).  
![\[Regra de transformação do Babelfish\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/images/datarep-babelfish-transform-1.png)
+ Antes da versão 2.2.0 do Babelfish, o DMS limitava o número de colunas que você podia replicar para um endpoint de destino do Babelfish a vinte colunas. Com o Babelfish 2.2.0, o limite aumentou para cem colunas. Mas com as versões 2.4.0 e superiores do Babelfish, o número de colunas que é possível replicar aumenta novamente. É possível executar o exemplo de código a seguir no banco de dados SQL Server para determinar quais tabelas são muito longas.

  ```
  USE myDB;
  GO
  DECLARE @Babelfish_version_string_limit INT = 8000; -- Use 380 for Babelfish versions before 2.2.0
  WITH bfendpoint
  AS (
  SELECT 
  	[TABLE_SCHEMA]
        ,[TABLE_NAME]
  	  , COUNT( [COLUMN_NAME] ) AS NumberColumns
  	  , ( SUM( LEN( [COLUMN_NAME] ) + 3)  
  		+ SUM( LEN( FORMAT(ORDINAL_POSITION, 'N0') ) + 3 )  
  	    + LEN( TABLE_SCHEMA ) + 3
  		+ 12 -- INSERT INTO string
  		+ 12)  AS InsertIntoCommandLength -- values string
        , CASE WHEN ( SUM( LEN( [COLUMN_NAME] ) + 3)  
  		+ SUM( LEN( FORMAT(ORDINAL_POSITION, 'N0') ) + 3 )  
  	    + LEN( TABLE_SCHEMA ) + 3
  		+ 12 -- INSERT INTO string
  		+ 12)  -- values string
  			>= @Babelfish_version_string_limit
  			THEN 1
  			ELSE 0
  		END AS IsTooLong
  FROM [INFORMATION_SCHEMA].[COLUMNS]
  GROUP BY [TABLE_SCHEMA], [TABLE_NAME]
  )
  SELECT * 
  FROM bfendpoint
  WHERE IsTooLong = 1
  ORDER BY TABLE_SCHEMA, InsertIntoCommandLength DESC, TABLE_NAME
  ;
  ```

## Tipos de dados de destino do Babelfish
<a name="CHAP_Target.Babelfish.DataTypes"></a>

A tabela a seguir mostra os tipos de dados de destino do Babelfish que são suportados durante o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md). 


|  AWS DMS tipo de dados  |  Tipo de dados do Babelfish   | 
| --- | --- | 
|  BOOLEAN  |  TINYINT  | 
|  BYTES  |  VARBINARY(tamanho)  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  INT1  |  SMALLINT  | 
|  INT2  |  SMALLINT  | 
|  INT4  |  INT  | 
|  INT8  |  BIGINT  | 
|  NUMERIC   |  NUMERIC(p,s)  | 
|  REAL4  |  REAL  | 
|  REAL8  |  FLOAT  | 
|  STRING  |  Se a coluna for de data ou hora, faça o seguinte:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.Babelfish.html) Se a coluna não é uma data ou hora, use VARCHAR (tamanho).  | 
|  UINT1  |  TINYINT  | 
|  UINT2  |  SMALLINT  | 
|  UINT4  |  INT  | 
|  UINT8  |  BIGINT  | 
|  WSTRING  |  NVARCHAR(tamanho)  | 
|  BLOB  |  VARBINARY(máximo) Para usar esse tipo de dados com o DMS, você deve habilitar o uso de BLOBs para uma tarefa específica. O DMS é compatível com os tipos de dados BLOB somente em tabelas que possuem uma chave primária.  | 
|  CLOB  |  VARCHAR(máximo) Para usar esse tipo de dados com o DMS, você deve habilitar o uso de CLOBs para uma tarefa específica.  | 
|  NCLOB  |  NVARCHAR(máximo) Para usar esse tipo de dados com o DMS, você deve habilitar o uso de NCLOBs para uma tarefa específica. Durante a CDC, o DMS é compatível com os tipos de dados NCLOB somente em tabelas que incluem uma chave primária.  | 

# Usando o Amazon Timestream como alvo para AWS Database Migration Service
<a name="CHAP_Target.Timestream"></a>

Você pode usar AWS Database Migration Service para migrar dados do seu banco de dados de origem para um endpoint de destino do Amazon Timestream, com suporte para migrações de dados Full Load e CDC.

O Amazon Timestream é um serviço de banco de dados de séries temporais rápido, escalável e sem servidor criado para ingestão de dados de alto volume. Dados de séries temporais são uma sequência de pontos de dados coletados em um intervalo de tempo; eles são usados para medir eventos que mudam com o tempo. Ele é usado para coletar, armazenar e analisar métricas de aplicativos, DevOps aplicativos e aplicativos de análise de IoT. Assim que seus dados estiverem no Timestream, você poderá visualizar e identificar tendências e padrões nesses dados quase em tempo real. Para obter mais informações sobre o Amazon Timestream, consulte [What is Amazon Timestream?](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) no *Guia do desenvolvedor do Amazon Timestream*.

**Topics**
+ [Pré-requisitos para usar o Amazon Timestream como alvo para AWS Database Migration Service](#CHAP_Target.Timestream.Prerequisites)
+ [Configurações da tarefa de carga máxima com vários threads](#CHAP_Target.Timestream.FLTaskSettings)
+ [Configurações da tarefa de carga de CDC multithread](#CHAP_Target.Timestream.CDCTaskSettings)
+ [Configurações de endpoint ao usar o Timestream como destino para AWS DMS](#CHAP_Target.Timestream.ConnectionAttrib)
+ [Criar e modificar um endpoint de destino do Amazon Timestream](#CHAP_Target.Timestream.CreateModifyEndpoint)
+ [Utilizar o mapeamento de objetos para migrar dados para um tópico do Timestream](#CHAP_Target.Timestream.ObjectMapping)
+ [Limitações ao usar o Amazon Timestream como alvo para AWS Database Migration Service](#CHAP_Target.Timestream.Limitations)

## Pré-requisitos para usar o Amazon Timestream como alvo para AWS Database Migration Service
<a name="CHAP_Target.Timestream.Prerequisites"></a>

Antes de configurar o Amazon Timestream como destino AWS DMS para, certifique-se de criar uma função do IAM. Essa função deve permitir AWS DMS o acesso aos dados que estão sendo migrados para o Amazon Timestream. O conjunto mínimo de permissões de acesso para o perfil que você usa para migrar para o Timestream é mostrado na política do IAM a seguir.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowDescribeEndpoints",
      "Effect": "Allow",
      "Action": [
        "timestream:DescribeEndpoints"
      ],
      "Resource": "*"
    },
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "timestream:ListTables",
        "timestream:DescribeDatabase"
      ],
      "Resource": "arn:aws:timestream:us-east-1:123456789012:database/DATABASE_NAME"
    },
    {
      "Sid": "VisualEditor1",
      "Effect": "Allow",
      "Action": [
        "timestream:DeleteTable",
        "timestream:WriteRecords",
        "timestream:UpdateTable",
        "timestream:CreateTable"
      ],
      "Resource": "arn:aws:timestream:us-east-1:123456789012:database/DATABASE_NAME/table/TABLE_NAME"
    }
  ]
}
```

------

Se você pretende migrar todas as tabelas, use `*` for *TABLE\$1NAME* no exemplo acima.

Observe o seguinte sobre o uso do Timestream como destino:
+ Se você pretende ingerir dados históricos com carimbos de data e hora superiores a um ano, recomendamos usar o AWS DMS para gravar os dados no Amazon S3 em um formato de valor separado por vírgula (csv). Em seguida, use o carregamento em lote do Timestream para ingerir os dados no Timestream. Para obter mais informações, consulte [Using batch load in Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/batch-load.html) no [Guia do desenvolvedor do Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html).
+ Para migrações de carga máxima de dados com menos de um ano, recomendamos definir o período de retenção do armazenamento de memória da tabela do Timestream com um valor superior ou igual ao carimbo de data e hora mais antigo. Depois que a migração for concluída, mude a retenção do armazenamento de memória da tabela para o valor desejado. Por exemplo, para migrar dados quando o carimbo de data e hora mais antigo é de dois meses, faça o seguinte:
  + Defina a retenção do armazenamento de memória da tabela de destino do Timestream para dois meses.
  + Inicie a migração de dados usando AWS DMS o.
  + Quando a migração de dados for concluída, altere o período de retenção da tabela do Timestream de destino para o valor desejado. 

   Recomendamos estimar o custo do armazenamento de memória antes da migração, usando as informações nas seguintes páginas:
  + [Amazon Timestream pricing](https://aws.amazon.com/timestream/pricing)
  + [AWS calculadora de preços](https://calculator.aws/#/addService) 
+ Para migrações de dados de CDC, recomendamos definir o período de retenção do armazenamento de memória da tabela de destino de forma que os dados ingeridos estejam dentro dos limites de retenção do armazenamento de memória. Para obter mais informações, consulte [Best Practices: Writes](https://docs.aws.amazon.com/timestream/latest/developerguide/data-ingest.html) no [Guia do desenvolvedor do Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html).

## Configurações da tarefa de carga máxima com vários threads
<a name="CHAP_Target.Timestream.FLTaskSettings"></a>

Para ajudar a aumentar a velocidade da transferência de dados, AWS DMS oferece suporte a uma tarefa de migração de carga total multiencadeada para um endpoint de destino do Timestream com estas configurações de tarefa:
+ `MaxFullLoadSubTasks`: utilize esta opção para indicar o número máximo de tabelas de origem a serem carregadas em paralelo. O DMS carrega cada tabela na tabela de destino correspondente do Amazon Timestream usando uma subtarefa dedicada. O padrão é 8; o valor máximo é 49.
+ `ParallelLoadThreads`— Use essa opção para especificar o número de threads AWS DMS usados para carregar cada tabela em sua tabela de destino do Amazon Timestream. O valor máximo de um destino do Timestream é 32. Você pode solicitar o aumento desse limite máximo.
+ `ParallelLoadBufferSize`: utilize esta opção para especificar o número máximo de registros a serem armazenados no buffer utilizado pelos threads de carregamento paralelo para carregar dados no destino do Amazon Timestream. O valor padrão é 50. Valor máximo de 1.000. Use essa configuração com `ParallelLoadThreads`; `ParallelLoadBufferSize` é válido somente quando há mais de um thread.
+ `ParallelLoadQueuesPerThread`: utilize esta opção para especificar o número de filas que cada thread simultâneo acessa para extrair registros de dados das filas e gerar uma carga em lote para o destino. O padrão é um. No entanto, para destinos do Amazon Timestream de vários tamanhos de carga útil, o intervalo válido é de 5 a 512 filas por thread.

## Configurações da tarefa de carga de CDC multithread
<a name="CHAP_Target.Timestream.CDCTaskSettings"></a>

Para promover o desempenho do CDC, AWS DMS oferece suporte a estas configurações de tarefas:
+ `ParallelApplyThreads`— Especifica o número de threads simultâneos AWS DMS usados durante o carregamento do CDC para enviar registros de dados para um endpoint de destino do Timestream. O valor padrão é 0 e o valor máximo é 32.
+ `ParallelApplyBufferSize`: especifica o número máximo de registros a serem armazenados em cada fila de buffer para os threads simultâneos enviarem a um endpoint de destino do Timestream durante uma carga de CDC. O valor padrão é 100 e o valor máximo é 1.000. Use essa opção quando `ParallelApplyThreads` especificar mais de um thread. 
+ `ParallelApplyQueuesPerThread`: especifica o número de filas que cada thread acessa para extrair registros de dados das filas e gerar um carregamento em lote para um endpoint do Timestream durante a CDC. O valor padrão é 1 e o valor máximo é 512.

## Configurações de endpoint ao usar o Timestream como destino para AWS DMS
<a name="CHAP_Target.Timestream.ConnectionAttrib"></a>

É possível utilizar as configurações de endpoint para configurar o banco de dados de destino do Timestream de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--timestream-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o Timestream como destino.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.Timestream.html)

## Criar e modificar um endpoint de destino do Amazon Timestream
<a name="CHAP_Target.Timestream.CreateModifyEndpoint"></a>

Depois de criar uma função do IAM e estabelecer o conjunto mínimo de permissões de acesso, você pode criar um endpoint de destino do Amazon Timestream usando AWS DMS o console ou usando o comando no, com `create-endpoint` a sintaxe [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)JSON. `--timestream-settings '{"EndpointSetting": "value", ...}'`

Os exemplos a seguir mostram como criar e modificar um endpoint de destino do Timestream usando a AWS CLI.

**Criar comando do endpoint de destino do Timestream**

```
aws dms create-endpoint —endpoint-identifier timestream-target-demo
--endpoint-type target —engine-name timestream
--service-access-role-arn arn:aws:iam::123456789012:role/my-role
--timestream-settings
{
    "MemoryDuration": 20,
    "DatabaseName":"db_name",
    "MagneticDuration": 3,
    "CdcInsertsAndUpdates": true,
    "EnableMagneticStoreWrites": true,
}
```

**Modificar comando do endpoint de destino do Timestream**

```
aws dms modify-endpoint —endpoint-identifier timestream-target-demo
--endpoint-type target —engine-name timestream
--service-access-role-arn arn:aws:iam::123456789012:role/my-role
--timestream-settings
{
    "MemoryDuration": 20,
    "MagneticDuration": 3,
}
```

## Utilizar o mapeamento de objetos para migrar dados para um tópico do Timestream
<a name="CHAP_Target.Timestream.ObjectMapping"></a>

AWS DMS usa regras de mapeamento de tabela para mapear dados da fonte para o tópico do Timestream de destino. Para mapear dados para um tópico de destino, utilize um tipo de regra de mapeamento de tabelas chamado mapeamento de objetos. Utilize o mapeamento de objetos para definir como os registros de dados na origem são correlacionados com os registros de dados publicados em um tópico do Timestream. 

Os tópicos do Timestream não têm uma estrutura predefinida, exceto uma chave de partição.

**nota**  
Não é necessário utilizar o mapeamento de objetos. É possível utilizar o mapeamento de tabela normal para várias transformações. No entanto, o tipo de chave de partição seguirá estes comportamentos padrão:   
A chave primária é utilizada como uma chave de partição para a carga máxima.
Se nenhuma configuração de tarefas de aplicação paralela for utilizada, `schema.table` será usada como uma chave de partição para a CDC.
Se as configurações de tarefas de aplicação paralela forem utilizadas, a chave primária será utilizada como uma chave de partição para a CDC.

Para criar uma regra de mapeamento de objetos, especifique `rule-type` como `object-mapping`. Essa regra especifica o tipo de mapeamento de objeto que você deseja usar. A estrutura da regra é a seguinte:

```
{
    "rules": [
        {
            "rule-type": "object-mapping",
            "rule-id": "id",
            "rule-name": "name",
            "rule-action": "valid object-mapping rule action",
            "object-locator": {
                "schema-name": "case-sensitive schema name",
                "table-name": ""
            }
        }
    ]
}
```



```
{
    "rules": [
        {
            "rule-type": "object-mapping",
            "rule-id": "1",
            "rule-name": "timestream-map",
            "rule-action": "map-record-to-record",
            "target-table-name": "tablename",
            "object-locator": {
                "schema-name": "",
                "table-name": ""
            },
            "mapping-parameters": {
                "timestream-dimensions": [
                    "column_name1",
                     "column_name2"
                ],
                "timestream-timestamp-name": "time_column_name",
                "timestream-multi-measure-name": "column_name1or2",
                "timestream-hash-measure-name":  true or false,
                "timestream-memory-duration": x,
                "timestream-magnetic-duration": y
            }
        }
    ]
}
```

AWS DMS atualmente suporta `map-record-to-record` e `map-record-to-document` como os únicos valores válidos para o `rule-action` parâmetro. Os `map-record-to-document` valores `map-record-to-record` e especificam o que AWS DMS acontece por padrão com registros que não são excluídos como parte da lista de `exclude-columns` atributos. Esses valores não afetam os mapeamentos de atributos de forma alguma. 

Utilize `map-record-to-record` ao migrar de um banco de dados relacional para um tópico do Timestream. Esse tipo de regra utiliza o valor `taskResourceId.schemaName.tableName` encontrado no banco de dados relacional como a chave de partição no tópico do Timestream e cria um atributo para cada coluna no banco de dados de origem. Ao usar`map-record-to-record`, para qualquer coluna na tabela de origem não listada na lista de `exclude-columns` atributos, AWS DMS cria um atributo correspondente no tópico de destino. Este atributo correspondente é criado, independentemente de a coluna de origem ser usada ou não em um mapeamento de atributos. 

Uma maneira de compreender o `map-record-to-record` é vê-lo em ação. Para este exemplo, suponha que você está começando com uma linha de tabela do banco de dados relacional com a seguinte estrutura de dados:


| FirstName | LastName | StoreId | HomeAddress | HomePhone | WorkAddress | WorkPhone | DateofBirth | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| Randy | Marsh | 5 | 221B Baker Street | 1234567890 | 31 Spooner Street, Quahog  | 9876543210 | 29/02/1988 | 

Para migrar essas informações de um esquema chamado `Test` para um tópico do Timestream, crie regras para correlacionar os dados com o tópico de destino. A regra a seguir ilustra o mapeamento. 

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "rule-action": "include",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            }
        },
        {
            "rule-type": "object-mapping",
            "rule-id": "2",
            "rule-name": "DefaultMapToTimestream",
            "rule-action": "map-record-to-record",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Customers"
            }
        }
    ]
}
```

Com um tópico do Timestream e uma chave de partição determinados (neste caso, `taskResourceId.schemaName.tableName`), o seguinte ilustra o formato do registro resultante utilizando os nossos exemplos de dados no tópico de destino do Timestream: 

```
  {
     "FirstName": "Randy",
     "LastName": "Marsh",
     "StoreId":  "5",
     "HomeAddress": "221B Baker Street",
     "HomePhone": "1234567890",
     "WorkAddress": "31 Spooner Street, Quahog",
     "WorkPhone": "9876543210",
     "DateOfBirth": "02/29/1988"
  }
```

## Limitações ao usar o Amazon Timestream como alvo para AWS Database Migration Service
<a name="CHAP_Target.Timestream.Limitations"></a>

As seguintes limitações se aplicam ao utilizar o Amazon Timestream como destino:
+ **Dimensões e carimbos de data e hora**: o Timestream usa as dimensões e os carimbos de data e hora nos dados de origem como uma chave primária composta e também não permite que você altere esses valores. Isso significa que, se você alterar o carimbo de data e hora ou as dimensões de um registro no banco de dados de origem, o banco de dados do Timestream tentará criar um registro. Portanto, é possível que, se você alterar a dimensão ou o timestamp de um registro de forma que correspondam aos de outro registro existente, AWS DMS atualize os valores do outro registro em vez de criar um novo registro ou atualizar o registro correspondente anterior.
+ **Comandos DDL:** A versão atual AWS DMS só suporta `CREATE TABLE` e comandos `DROP TABLE` DDL.
+ **Limitações de registro**: o Timestream tem limitações para registros, como tamanho do registro e tamanho da medida. Para obter mais informações, consulte [Cotas](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) no [Guia do desenvolvedor do Amazon Timestream](https://docs.aws.amazon.com/).
+ **Exclusão de registros e valores nulos**: o Timestream não comporta exclusão de registros. Para oferecer suporte à migração de registros excluídos da fonte, AWS DMS limpa os campos correspondentes nos registros no banco de dados de destino do Timestream. AWS DMS altera os valores nos campos do registro de destino correspondente com **0** para campos numéricos, **nulo** para campos de texto e **falso** para campos booleanos.
+ O Timestream como destino não aceita origens que não sejam bancos de dados relacionais (RDBMS).
+ AWS DMS só oferece suporte ao Timestream como destino nas seguintes regiões:
  + Leste dos EUA (Norte da Virgínia)
  + Leste dos EUA (Ohio)
  + Oeste dos EUA (Oregon)
  + Europa (Irlanda)
  + Europa (Frankfurt)
  + Ásia-Pacífico (Sydney)
  + Ásia-Pacífico (Tóquio)
+ O Timestream como destino não aceita que a configuração de `TargetTablePrepMode` como `TRUNCATE_BEFORE_LOAD`. É recomendável não usar essa configuração.

# Usando o Amazon RDS para Db2 e o IBM Db2 LUW como destino para AWS DMS
<a name="CHAP_Target.DB2"></a>

Você pode migrar dados para um Amazon RDS for Db2 ou um banco de dados Db2 local de um banco de dados Db2 LUW usando (). AWS Database Migration Service AWS DMS

Para obter informações sobre as versões do Db2 LUW que oferecem AWS DMS suporte como destino, consulte. [Metas para AWS DMS](CHAP_Introduction.Targets.md)

É possível utilizar SSL para criptografar conexões entre o endpoint do Db2 LUW e a instância de replicação. Para obter mais informações sobre a utilização de SSL com um endpoint do Db2 LUW, consulte [Usando SSL com AWS Database Migration Service](CHAP_Security.SSL.md).

## Limitações ao usar o Db2 LUW como destino para AWS DMS
<a name="CHAP_Target.DB2.Limitations"></a>

As limitações a seguir se aplicam ao usar o banco de dados Db2 LUW como destino para. AWS DMS Para conhecer as limitações de uso do Db2 LUW como origem, consulte [Limitações ao usar o Db2 LUW como fonte para AWS DMS](CHAP_Source.DB2.md#CHAP_Source.DB2.Limitations).
+ AWS DMS só oferece suporte ao Db2 LUW como destino quando a origem é Db2 LUW ou Db2 for z/OS.
+ Quando usado como destino, o Db2 LUW não comporta replicações com o modo LOB completo.
+ Ele também não comporta o tipo de dados XML na fase de carregamento completo. Essa é uma limitação do utilitário dbload da IBM. Para obter mais informações, consulte [IBM ](https://www.ibm.com/docs/en/informix-servers/14.10?topic=utilities-dbload-utility) na documentação *IBM Informix Servers*.
+ AWS DMS trunca campos BLOB com valores correspondentes ao caractere de aspas duplas (“). Essa é uma limitação do utilitário dbload da IBM. 
+ AWS DMS não suporta a opção parallel full load ao migrar para um destino Db2 LUW no DMS versão 3.5.3. Essa opção está disponível no DMS versão 3.5.4 ou posterior.

## Configurações de endpoint ao usar o Db2 LUW como destino para AWS DMS
<a name="CHAP_Target.DB2.ConnectionAttrib"></a>

É possível utilizar as configurações de endpoint para configurar o destino do Db2 LUW de maneira semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--ibm-db2-settings '{"EndpointSetting": "value", ...}'` JSON.

A tabela a seguir mostra as configurações de endpoints que é possível utilizar com o Db2 LUX como destino.


| Name (Nome) | Description | 
| --- | --- | 
|  `KeepCsvFiles`  |  Se verdadeiro, AWS DMS salva todos os arquivos.csv no destino Db2 LUW que foram usados para replicar dados. O DMS usa esses arquivos para análise e solução de problemas.  | 
|  `LoadTimeout`  |  A quantidade de tempo (em milissegundos) antes do AWS DMS tempo limite das operações executadas pelo DMS no destino do Db2. O valor padrão é 1.200 (20 minutos).  | 
|  `MaxFileSize`  |  Especifica o tamanho máximo (em KB) dos arquivos .csv usados para transferir dados para o Db2 LUW.  | 
|  `WriteBufferSize`  |  O tamanho (em KB) do buffer de gravação de arquivo na memória usado ao gerar arquivos .csv no disco local na instância de replicação do DMS. O valor padrão é 1.024 (1 MB).  | 

# Configurando endpoints VPC para AWS DMS
<a name="CHAP_VPC_Endpoints"></a>

AWS DMS suporta endpoints de nuvem privada virtual (VPC) da Amazon como fontes e destinos. AWS DMS podem se conectar a qualquer banco de dados de AWS origem ou destino com endpoints da Amazon VPC, desde que rotas explicitamente definidas para esses bancos de dados de origem e destino estejam definidas em sua VPC. AWS DMS 

Ao oferecer suporte aos endpoints do Amazon VPC, AWS DMS fica mais fácil manter a segurança da end-to-end rede para todas as tarefas de replicação sem configuração e configuração adicionais da rede. A utilização de endpoints da VPC para todos os endpoints de origem e de destino garante que todo o tráfego permaneça dentro da VPC e sob o seu controle.

Para uma instância AWS DMS de replicação criada em uma sub-rede privada ou replicação AWS DMS sem servidor, para se conectar a bancos de dados AWS gerenciados, é necessário configurar um endpoint da Amazon VPC:
+ Amazon S3
+ Amazon DynamoDB
+ Amazon Kinesis
+ banco de dados de origem
+  OpenSearch Serviço Amazon

Se você estiver usando o AWS Secrets Manager para armazenar credenciais de conexão para uso do DMS, você também precisará configurar um VPC endpoint.

A partir da AWS DMS versão 3.4.7, os endpoints VPC são necessários para estabelecer conexão entre a instância de replicação do DMS ou a replicação sem servidor e os serviços da Amazon acima, quando a rede privada é usada.

## AWS DMS Pré-requisitos comuns
<a name="CHAP_VPC_Endpoints.prereq"></a>

Antes de configurar um endpoint da VPC, você precisa atender aos seguintes pré-requisitos:
+ Localize ou crie a VPC para usar com a instância de replicação ou AWS DMS com AWS DMS a replicação sem servidor. Se você não fornecer essas informações, o DMS tentará usar a VPC padrão na região em que ela está configurada.
+ Verifique se você tem permissões para criar um endpoint da VPC. Para se conectar ao Amazon S3 ou ao Amazon DynamoDB, você pode criar endpoints da VPC de gateway que oferecem conectividade confiável sem precisar de um gateway da internet ou de um dispositivo NAT para sua VPC. Os endpoints de gateway não são usados AWS PrivateLink, ao contrário de outros tipos de endpoints de VPC. Para obter mais informações, consulte [Endpoints do Gateway](https://docs.aws.amazon.com/vpc/latest/privatelink/gateway-endpoints.html) no *AWS PrivateLinkguia*.
+ Configurar permissões do IAM para usar o DMS:
  + Configure o perfil `dms-vpc-role`. Para obter mais informações, consulte [Política AWS gerenciada: Amazon DMSVPCManagement Role](https://docs.aws.amazon.com/dms/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonDMSVPCManagementRole).
  + Configure o perfil `dms-cloudwatch-logs-role`. Para obter mais informações, consulte a [política AWS gerenciada: Amazon DMSCloud WatchLogsRole](https://docs.aws.amazon.com/dms/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonDMSCloudWatchLogsRole).
  + AWS DMS O Serverless exige que uma função vinculada ao serviço (SLR) exista em sua conta. AWS DMS gerencia a criação e o uso dessa função. Para obter mais informações sobre como garantir que você tem a SLR necessária, consulte [Perfil vinculado ao serviço do AWS DMS sem servidor](https://docs.aws.amazon.com/dms/latest/userguide/slr-services-sl.html). Quando você cria uma replicação, o AWS DMS Serverless cria programaticamente uma função vinculada ao serviço Serverless. É possível visualizar esse perfil no console do IAM.

## Configure um endpoint da Amazon VPC com o Secrets Manager AWS
<a name="CHAP_VPC_Endpoints.vpcforsecrets"></a>

Você pode configurar um endpoint Amazon VPC com o qual o AWS Secrets Manager trabalhe. AWS DMS Ao criar esse endpoint, você habilita instâncias de AWS DMS replicação ou configurações de replicação sem servidor em sub-redes privadas para acessar com segurança as credenciais do banco de dados armazenadas no Secrets Manager sem exigir acesso público à Internet.

**Pré-requisitos**

Antes de configurar um VPC endpoint com o AWS Secrets Manager AWS DMS, você deve atender aos seguintes pré-requisitos:
+ Configure todos os [AWS DMS Pré-requisitos comuns](#CHAP_VPC_Endpoints.prereq).
+ Crie e configure o banco de dados de [origem](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Sources.html) ou [destino](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html) ao qual você deseja se conectar.
+ Crie um segredo no gerenciador de AWS segredos com credenciais para acessar bancos de dados de origem e destino. O segredo deve estar localizado na mesma região da instância de AWS DMS replicação ou da replicação sem AWS DMS servidor. Dependendo do tipo de banco de dados, o esquema do segredo pode variar. Para obter mais informações, consulte [Trabalhando com AWS DMS endpoints](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.html).
**Importante**  
AWS DMS a instância de replicação e a replicação AWS DMS sem servidor não funcionam com segredos, gerenciados pelo Amazon RDS. Essas credenciais não incluem informações de host e porta, necessárias AWS DMS para estabelecer conexões.
+ A configuração de permissões do IAM para gerenciar o endpoint do DMS é necessária para alguns bancos de dados: Amazon S3, Amazon Kinesis, Amazon DynamoDB, Amazon Redshift, Amazon Service, Amazon Neptune e Amazon Timestream. OpenSearch Para obter mais informações, consulte [Trabalhando com AWS DMS endpoints](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.html).

**Crie um VPC endpoint para o Secrets Manager AWS**

1. Faça login no Console de gerenciamento da AWS e abra o console da Amazon VPC em. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)

1. Na barra de menu do console VPC, escolha a Região da AWS mesma da sua instância de AWS DMS replicação.

1. No painel de navegação da VPC, escolha **Endpoints**.

1. Em **Endpoints**, escolha **Criar endpoint**.

1. Configure o endpoint da VPC da seguinte maneira:

   1. Selecione **Tipo** como **Serviços da AWS **.

   1. Na caixa de texto **Nome do serviço**, procure **secretsmanager** e selecione **com.amazonaws.[region].secretsmanager**. O **tipo** do serviço selecionado deve ser **Interface**.

   1. Em **Configurações de rede**, selecione a VPC que está sendo executada na mesma região da sua instância de replicação do DMS ou onde você criou a replicação sem servidor.

   1. Na seção **Sub-redes**, selecione as sub-redes desejadas nas quais você deseja que o DMS opere. Selecione somente sub-redes privadas. Você pode identificar uma sub-rede privada com o ID da sub-rede. Por exemplo: `vpc-xxxxxx-subnet-private1-us-west-2a`.

      Se sua instância de replicação do DMS for criada sem acesso público, você deverá escolher as tabelas de rotas associadas às sub-redes privadas em que sua instância de replicação reside.
**nota**  
Anote as sub-redes privadas conforme necessário para fornecê-las ao criar um grupo de sub-redes de replicação do DMS. Para conectar o DMS ao gerenciador de AWS segredos usando os VPC endpoints, as sub-redes especificadas para o VPC endpoint devem ser iguais às sub-redes no grupo de sub-redes de replicação do DMS.

   1. Selecione os **grupos de segurança** desejados. As regras do grupo de segurança controlam o tráfego para a interface de rede do endpoint por meio dos recursos na sua VPC. Se você não especificar um grupo de segurança, será usado o grupo de segurança padrão selecionado.

1. Selecione **Acesso total** em **Política**. Se quiser utilizar uma política personalizada para especificar seu próprio controle de acesso, selecione **Personalizado**. Você pode utilizar uma política de confiança que esteja em conformidade com o documento de política JSON, `dms-vpc-role`. Para ter mais informações, consulte [Criar perfis do IAM a serem utilizados com o AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/security-iam.html#CHAP_Security.APIRole).

1. Selecione **Criar endpoint**.

   Você deve esperar até que o status se torne `Available`. Seu endpoint da VPC agora tem um ID que começa com `vpce-xxxx`.

Agora você criou com êxito um endpoint da VPC. Você deve configurar AWS DMS endpoints, grupos de sub-redes do DMS. Dependendo da opção de migração escolhida, configure a instância de replicação do DMS ou a replicação sem servidor.

## Configurar um endpoint da Amazon VPC com o Amazon S3
<a name="CHAP_VPC_Endpoints.vpcfors3"></a>

Você pode configurar um endpoint da Amazon VPC para trabalhar com o Amazon S3. AWS DMS Ao criar esse endpoint, você habilita instâncias de AWS DMS replicação ou configurações de replicação sem servidor em sub-redes privadas para acessar com segurança as credenciais do banco de dados armazenadas em buckets do S3 sem exigir acesso público à Internet.

**Pré-requisitos**

Antes de configurar um VPC endpoint com o Amazon S3 AWS DMS, você deve atender aos seguintes pré-requisitos:
+ Configure todos os [AWS DMS Pré-requisitos comuns](#CHAP_VPC_Endpoints.prereq).
+ Crie um bucket do Amazon S3 para usar como banco de dados [de origem](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Sources.html) ou [destino](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html). AWS DMS Não habilite o versionamento para o S3. Se o versionamento do S3 for necessário, utilize políticas de ciclo de vida para excluir ativamente as versões antigas. Caso contrário, é possível encontrar falhas na conexão de teste de endpoint devido ao tempo limite de uma chamada de list-object do S3.
+ Configure as permissões do IAM para gerenciar o endpoint do Amazon S3 do DMS. Se você estiver usando o console do AWS DMS , o perfil do IAM com as permissões necessárias poderá ser criado se você tiver permissões para criar perfis do IAM.

**Criação de um endpoint da VPC para o Amazon S3**

1. Faça login no Console de gerenciamento da AWS e abra o console da Amazon VPC em. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)

1. Na barra de menu do console VPC, escolha a Região da AWS mesma da sua instância de AWS DMS replicação.

1. No painel de navegação da VPC, escolha **Endpoints**.

1. Em **Endpoints**, escolha **Criar endpoint**.

1. Configure o endpoint da VPC da seguinte maneira:

   1. Selecione **Tipo** como **Serviços da AWS **.

   1. Na caixa de texto **Nome do serviço**, procure **s3** e selecione **com.amazonaws.[region].s3**. O **tipo** do serviço selecionado de ser **Gateway**. Você pode criar um endpoint da VPC de gateway ao se conectar ao Amazon S3 e ao DynamoDB. Os endpoints de gateway não usam o AWS PrivateLink, ao contrário de outros tipos de endpoints da VPC.

   1. Em **Configurações de rede**, selecione a VPC que está sendo executada na mesma região da sua instância de replicação do DMS ou onde você criou a replicação sem servidor.

   1. Na seção **Sub-redes**, selecione as sub-redes desejadas nas quais você deseja que o DMS opere. Selecione somente sub-redes privadas. Você pode identificar uma sub-rede privada com o ID da sub-rede. Por exemplo: `vpc-xxxxxx-subnet-private1-us-west-2a`.
**nota**  
Se você criou sua instância de replicação do DMS sem acesso público, deverá escolher as tabelas de rotas associadas às sub-redes privadas que estão na mesma região da sua instância do DMS. Anote as sub-redes privadas conforme necessário para fornecê-las ao criar um grupo de sub-redes de replicação do DMS. Para conectar o DMS ao Amazon S3 usando os endpoints da VPC, as sub-redes especificadas para o endpoint da VPC devem ser iguais às sub-redes no grupo de sub-redes de replicação do DMS.

1. Selecione **Acesso total** em **Política**. Se quiser utilizar uma política personalizada para especificar seu próprio controle de acesso, selecione **Personalizado**. Você pode utilizar uma política de confiança que esteja em conformidade com o documento de política JSON, `dms-vpc-role`. Para ter mais informações, consulte [Criar perfis do IAM a serem utilizados com o AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/security-iam.html#CHAP_Security.APIRole).

1. Selecione **Criar endpoint**.

   Você deve esperar até que o status se torne `Available`. Seu endpoint da VPC agora tem um ID que começa com `vpce-xxxx`.

Agora você criou com êxito um endpoint da VPC. Você deve configurar AWS DMS endpoints, grupos de sub-redes do DMS. Dependendo da opção de migração escolhida, configure a instância de replicação do DMS ou a replicação sem servidor.

## Configurar um de endpoint da Amazon VPC para o Amazon DynamoDB
<a name="CHAP_VPC_Endpoints.vpcfordynamoDB"></a>

Ao usar instâncias de AWS DMS replicação em sub-redes privadas ou replicação AWS DMS sem servidor, você deve criar um VPC endpoint para estabelecer conectividade segura com o Amazon DynamoDB. Sem uma configuração de VPC endpoint, AWS DMS enfrenta erros de conexão.

Ao criar o endpoint da VPC, você deve selecionar o **tipo de endpoint** como **Gateway** ou **Interface** no console do DMS. Para obter mais informações, consulte:
+ [AWS DMS Pré-requisitos comuns](#CHAP_VPC_Endpoints.prereq)
+ [Endpoints de gateway para o Amazon DynamoDB](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-ddb.html)
+ [Como soluciono problemas de conectividade com meus endpoints da Amazon VPC de gateway?](https://repost.aws/knowledge-center/connect-s3-vpc-endpoint)

## Configurar um endpoint da Amazon VPC para o Amazon Kinesis
<a name="CHAP_VPC_Endpoints.vpcforkinesis"></a>

Ao usar instâncias AWS DMS de replicação em sub-redes privadas ou replicação AWS DMS sem servidor, você deve criar um VPC endpoint para estabelecer conectividade segura com o Amazon Kinesis. Sem uma configuração de VPC endpoint, AWS DMS enfrenta erros de conexão. Para obter mais informações, consulte:
+ [AWS DMS Pré-requisitos comuns](#CHAP_VPC_Endpoints.prereq)
+ [Usando o Amazon Kinesis Data Streams como alvo para AWS Database Migration Service](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Kinesis.html)

## Configurar um endpoint da Amazon VPC para o Amazon Redshift
<a name="CHAP_VPC_Endpoints.vpcforredshift"></a>

Ao usar instâncias AWS DMS de replicação em sub-redes privadas ou replicação AWS DMS sem servidor, você deve criar um VPC endpoint para estabelecer conectividade segura com o Amazon Redshift. Sem uma configuração de VPC endpoint, AWS DMS enfrenta erros de conexão. Para obter mais informações, consulte:
+ [AWS DMS Pré-requisitos comuns](#CHAP_VPC_Endpoints.prereq)
+ [VPC endpoints gerenciados pelo Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-cross-vpc.html)

## Configurar um endpoint Amazon VPC para o Amazon Service OpenSearch
<a name="CHAP_VPC_Endpoints.vpcforos"></a>

Ao usar instâncias AWS DMS de replicação em sub-redes privadas ou replicação AWS DMS sem servidor, você deve criar um VPC endpoint para estabelecer conectividade segura com o Amazon Service. OpenSearch Sem uma configuração de VPC endpoint, AWS DMS enfrenta erros de conexão. Para obter mais informações, consulte:
+ [AWS DMS Pré-requisitos comuns](#CHAP_VPC_Endpoints.prereq)
+ [Configurando o acesso à VPC para pipelines de ingestão da Amazon OpenSearch ](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-security.html)

## Configurar instâncias de replicação, grupos de sub-redes do DMS e endpoints do DMS
<a name="CHAP_VPC_Endpoints.option.123"></a>

Você deve configurar os recursos de AWS DMS replicação depois de criar VPC endpoints. Você pode configurar grupos de sub-redes de replicação para isolamento de rede, instâncias de replicação ou replicações sem servidor para processamento e endpoints para conexão com bancos de dados de origem e destino a fim de permitir a migração segura do banco de dados em sua VPC.

### Configurar uma instância de AWS DMS replicação
<a name="CHAP_VPC_Endpoints.option.123.provisioned"></a>

Para configurar uma instância de replicação AWS DMS provisionada, você deve configurar grupos de sub-redes de replicação do DMS.

**Criar grupos de sub-redes de replicação do DMS**

1. Faça login no Console de gerenciamento da AWS e abra o console do DMS.

1. No painel de navegação à esquerda, abra **Grupos de sub-redes** e selecione **Criar grupo de sub-redes**.

1. Preencha os campos **Nome** e **Descrição**.

1. No menu suspenso **VPC**, selecione a VPC que está sendo executada na mesma região em que você deseja criar sua instância de replicação do DMS.

1. No menu suspenso **Adicionar sub-redes**, adicione as sub-redes privadas que você especificou ao criar o endpoint da VPC. Você pode identificar uma sub-rede privada com o ID da sub-rede. Por exemplo: `vpc-xxxxxx-subnet-private1-us-west-2a`.

1. Clique em **Criar grupo de sub-redes**.

**Criar instância de replicação do DMS (provisionada)**

1. Navegue até o Console de gerenciamento da AWS para criar uma instância de replicação. Para ter mais informações, consulte [Criar uma instância de replicação](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.Creating.html). Para saber mais sobre como escolher, dimensionar e configurar instâncias de replicação, consulte Como [trabalhar com uma AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.html) instância de replicação.

1. Na seção **Conectividade e segurança**, selecione a VPC na **nuvem privada virtual (VPC) IPv4** ou no **modo de pilha dupla** em que você deseja criar a instância de replicação. AWS DMS Para ter mais informações, consulte [Configurar uma rede para uma instância de replicação](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.VPC.html).

1. No menu suspenso **Grupo de sub-redes de replicação**, escolha o grupo de sub-redes que você criou para sua instância de replicação.
**nota**  
As sub-redes especificadas para o endpoint da VPC devem ser idênticas às sub-redes no grupo de sub-redes da instância de replicação do DMS. Você deve remover todas as sub-redes do grupo de sub-redes que não estejam associadas ao endpoint da VPC.

1. Desmarque a caixa de seleção **Acessível publicamente** para desabilitar o acesso público.

1. Na seção **Configurações avançadas**, no menu suspenso **Grupos de segurança da VPC**, selecione todos os grupos de sub-redes da VPC associados à sua instância de replicação. Esses grupos devem incluir o grupo de sub-redes que abrange as sub-redes que você especificou ao criar o endpoint da VPC.

   Se você não especificar os grupos de sub-redes, o DMS escolherá o **grupo de sub-redes de replicação** padrão ou o criará se ele não existir. Para ter mais informações, consulte [Configuração de grupos de segurança para o AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Advanced.Endpoints.securitygroup.html).

1. Conclua a configuração da instância de replicação e selecione **Criar instância de replicação.**

   Você deve esperar até que o status se torne `Available`.

**Crie endpoints de AWS DMS origem e destino**

1. Faça login no console do DMS.

1. Navegue até **Endpoints do AWS DMS ** e selecione **Criar endpoint**.

1. Crie e configure endpoints de [origem](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.html) e [destino](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.html).

1. No console do DMS, você pode escolher uma função do IAM existente ou criar uma nova função do IAM para acessar suas credenciais de banco de dados armazenadas no gerenciador de AWS segredos.

1. Clique em **Executar teste** para testar a conexão do endpoint na instância de replicação do DMS. Para executar o teste da instância de replicação, ela deve ter o status `Available`.

1. Selecione **Criar endpoint**.

### Configurar uma replicação AWS DMS sem servidor
<a name="CHAP_VPC_Endpoints.option.123.serverless"></a>

Para configurar uma replicação AWS DMS sem servidor, você deve configurar grupos de sub-redes de replicação do DMS.

**Crie endpoints de AWS DMS origem e destino**

1. Faça login no console do DMS.

1. Navegue até **Endpoints do AWS DMS ** e selecione **Criar endpoint**.

1. Crie e configure endpoints de [origem](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.html) e [destino](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.html).

1. No console do DMS, você pode escolher uma função do IAM existente ou criar uma nova função do IAM para acessar suas credenciais de banco de dados armazenadas no gerenciador de AWS segredos.
**nota**  
Para replicação AWS DMS sem servidor, você não pode testar a conexão para o endpoint do DMS nem usar a API. `TestConnection` O teste de conexão é realizado durante a execução da replicação sem servidor entre a instância do DMS e seus bancos de dados. source/target Para ter mais informações, consulte [Componentes do AWS DMS sem servidor](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Serverless.Components.html).

1. Selecione **Criar endpoint**.

**Criar grupos de sub-redes de replicação do DMS**

1. Faça login no Console de gerenciamento da AWS e abra o console do DMS.

1. No painel de navegação à esquerda, abra **Grupos de sub-redes** e selecione **Criar grupo de sub-redes**.

1. Preencha os campos **Nome** e **Descrição**.

1. No menu suspenso **VPC**, selecione a VPC que está sendo executada na mesma região da sua instância sem servidor do DMS.

1. No menu suspenso **Adicionar sub-redes**, adicione as sub-redes privadas que você especificou ao criar o endpoint da VPC. Você pode identificar uma sub-rede privada com o ID da sub-rede. Por exemplo: `vpc-xxxxxx-subnet-private1-us-west-2a`.

1. Clique em **Criar grupo de sub-redes**.

**Criar uma replicação sem servidor do DMS**

1. Navegue até o console do DMS para criar uma instância sem servidor. Para ter mais informações, consulte [Criar uma replicação sem servidor](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Serverless.Components.html#CHAP_Serverless.create). [Para saber mais sobre como escolher, dimensionar e configurar instâncias sem servidor, consulte Como trabalhar com instâncias sem servidor. AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Serverless.html)

1. Na seção **Conectividade e segurança**, selecione a VPC no menu suspenso **Virtual Private Cloud (VPC)** em que você deseja criar a instância sem servidor. AWS DMS Para ter mais informações, consulte [Configurar uma rede para uma instância de replicação](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.VPC.html).

1. No menu suspenso **Grupo de sub-redes**, escolha o grupo de sub-redes que você criou para sua instância sem servidor.
**nota**  
As sub-redes especificadas para o endpoint da VPC devem ser idênticas às sub-redes no grupo de sub-redes da instância sem servidor do DMS. Você deve remover todas as sub-redes do grupo de sub-redes que não estejam associadas à instância sem servidor.

1. Selecione a **zona de disponibilidade**.

1. No menu suspenso **Unidades de capacidade máxima do DMS (DCU)**, selecione a DCU desejada.

1. Selecione **Criar tarefa**. Isso cria uma configuração de replicação do DMS sem servidor que aparece na lista de tarefas com o status `Start required`.

1. Para iniciar a replicação sem servidor, escolha sua tarefa e selecione **Iniciar** no menu **Ações**.

## Quem é afetado ao migrar para as AWS DMS versões 3.4.7 e superiores?
<a name="CHAP_VPC_Endpoints.Users_Impacted"></a>

Quem estiver utilizando um ou mais dos endpoints do AWS DMS listados anteriormente e se esses endpoints não forem roteáveis publicamente ou não tiverem endpoints da VPC já associados a eles.

## Quem não é afetado ao migrar para as AWS DMS versões 3.4.7 e superiores?
<a name="CHAP_VPC_Endpoints.Users_Not_Impacted"></a>

Isso terá impacto para você se:
+ Você não está usando um ou mais dos AWS DMS endpoints listados anteriormente.
+ Estiver utilizando qualquer um dos endpoints listados anteriormente e eles forem roteáveis publicamente.
+ Estiver utilizando qualquer um dos endpoints listados anteriormente e eles tiverem endpoints da VPC associados a eles.

## Preparando uma migração para as versões 3.4.7 e superiores do AWS DMS
<a name="CHAP_VPC_Endpoints.User_Mitigation"></a>

Para evitar falhas AWS nas tarefas do DMS ao usar qualquer um dos endpoints descritos anteriormente, siga uma das etapas a seguir antes de atualizar o AWS DMS para a versão 3.4.7 ou superior:
+ Torne os endpoints do AWS DMS afetados publicamente roteáveis. Por exemplo, adicione uma rota de Internet Gateway (IGW) a qualquer VPC já usada pela AWS sua instância de replicação do DMS para tornar todos os endpoints de origem e destino roteáveis publicamente.
+ Crie endpoints da VPC para acessar todos os endpoints de origem e de destino utilizados pelo AWS DMS, conforme descrito a seguir.

Para todos os endpoints de VPC existentes que você usa para seus endpoints de origem e destino do AWS DMS, certifique-se de que eles usem uma política de confiança que esteja em conformidade com o documento de política XML,. `dms-vpc-role` Para obter mais informações sobre o documento da política XML, consulte [Criação das funções do IAM para usar com AWS DMS](security-iam.md#CHAP_Security.APIRole).

Caso contrário, configure as instâncias de replicação como endpoints da VPC adicionando um endpoint da VPC à VPC que os contém. Se você configurou as instâncias de replicação sem endpoints públicos, a adição de um endpoint da VPC publicamente acessível à VPC que contém as instâncias de replicação as torna acessíveis publicamente. Não é necessário fazer mais nada para associar especificamente as instâncias de replicação ao endpoint da VPC.

**nota**  
Serviços diferentes podem ter configurações exclusivas do endpoint da VPC. Por exemplo, ao utilizar o AWS Secrets Manager, normalmente não é necessário ajustar a tabela de roteamento. Sempre verifique os requisitos específicos de cada serviço.

Para obter mais informações sobre como configurar VPC endpoints para AWS uma instância de replicação do DMS, consulte. [Configurações de rede para migração de banco de dados](CHAP_ReplicationInstance.VPC.md#CHAP_ReplicationInstance.VPC.Configurations) *Para obter mais informações sobre como criar endpoints VPC de interface para acessar AWS serviços em geral, consulte [Acessar um AWS serviço usando um endpoint VPC de interface](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) no Guia.AWS PrivateLink * [Para obter informações sobre a disponibilidade regional do AWS DMS para VPC endpoints, consulte AWS a Tabela de regiões.](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)

# Declarações DDL apoiadas por AWS DMS
<a name="CHAP_Introduction.SupportedDDL"></a>

Você pode executar declarações de Data Definition Language (DDL - Linguagem de definição de dados) no banco de dados de origem durante o processo de migração de dados. As instruções serão replicadas no banco de dados de destino pelo servidor de replicação. 

As instruções DDL compatíveis incluem as seguintes: 
+ Create table
+ Drop table
+ Rename table
+ Truncate table
+ Add column
+ Drop column
+ Rename column
+ Change column data type

O DMS não captura todas as instruções DDL compatíveis com alguns tipos de mecanismos de origem. E o DMS processa as instruções DDL de forma diferente ao aplicá-las a mecanismos de destino específicos. Para obter informações sobre quais instruções DDL são compatíveis com uma origem específica e como elas são aplicadas a um destino, consulte o tópico da documentação específica desse endpoint de origem e de destino.

É possível utilizar as configurações de tarefas para definir a forma como o DMS processa o comportamento do DDL durante a captura de dados de alteração (CDC). Para obter mais informações, consulte [Configurações de tarefa para processamento de DDL de processamento de alterações](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md).

## Limitações e considerações
<a name="CHAP_Introduction.SupportedDDL.Limitations"></a>

Sequências rápidas de operações de DDL no banco de dados de origem (como DDL>DML>DDL) podem fazer com que o registro AWS DMS seja analisado incorretamente, levando à perda de dados ou a um comportamento inesperado. Para manter a consistência dos dados, aguarde AWS DMS a aplicação de cada alteração ao destino antes de realizar as operações subsequentes.

Por exemplo, durante a captura de dados de alteração (CDC), várias operações de renomeação rápida de tabelas em uma tabela de origem podem provocar erros. Se você renomear uma tabela e, em seguida, renomeá-la rapidamente de volta ao nome original, AWS DMS poderá informar que a tabela já existe no banco de dados de destino.

# Configuração do endpoint avançada
<a name="CHAP_Advanced.Endpoints"></a>

Você pode definir configurações avançadas para seus endpoints em AWS Database Migration Service (AWS DMS) para configurar o controle sobre como os endpoints de origem e destino se comportam durante o processo de migração. Como parte da configuração avançada, você pode configurar o emparelhamento de AWS DMS VPC para permitir a comunicação segura entre VPCs grupos de segurança do DMS para controlar o tráfego de entrada e saída, listas de controle de acesso à rede (NACLs) como camada adicional de segurança e endpoints de VPC para o Secrets Manager. AWS 

Você pode definir essas configurações durante a criação do endpoint ou modificadas posteriormente por meio do AWS DMS console ou da API, para ajustar os processos de migração com base nos requisitos específicos do mecanismo de banco de dados e nas necessidades de desempenho.

A seguir você pode obter mais detalhes sobe a configuração de endpoints avançados.

**Topics**
+ [Configuração de emparelhamento de VPC para. AWS DMS](CHAP_Advanced.Endpoints.vpc.peering.md)
+ [Configuração do grupo de segurança para AWS DMS](CHAP_Advanced.Endpoints.securitygroup.md)
+ [Configuração da Lista de Controle de Acesso à Rede (NACL) para AWS DMS](CHAP_Advanced.Ednpoints.NACL.md)
+ [Configurando o gerenciador de AWS DMS segredos VPC Endpoint](CHAP_Advanced.Endpoints.secretsmanager.md)
+ [Considerações adicionais](#CHAP_secretsmanager.additionalconsiderations)

# Configuração de emparelhamento de VPC para. AWS DMS
<a name="CHAP_Advanced.Endpoints.vpc.peering"></a>

O emparelhamento de VPC permite a conectividade de rede privada entre duas VPCs, permitindo que instâncias de AWS DMS replicação e endpoints de banco de dados se comuniquem entre si, VPCs como se estivessem na mesma rede. Isso é crucial quando sua instância de replicação do DMS reside em uma VPC, enquanto os bancos de dados de origem ou de destino existem separados VPCs, permitindo a migração de dados direta e segura sem atravessar a Internet pública.

Ao usar o Amazon RDS, você deve configurar o emparelhamento de VPC entre o DMS e o RDS se suas instâncias estiverem localizadas em locais diferentes. VPCs

Você deve executar as seguintes etapas:

**Criar uma conexão de emparelhamento de VPC**

1. Navegue até o [console da Amazon VPC](https://console.aws.amazon.com/vpc/).

1. No painel de navegação, selecione **Conexões de emparelhamento** em **Nuvem privada virtual**.

1. Clique em **Criar conexão de emparelhamento**.

1. Configure as conexões de emparelhamento:
   + Tag de nome (opcional): insira um nome para a conexão de emparelhamento (exemplo: `DMS-RDS-Peering`).

     **Solicitante da VPC**: selecione a VPC que contém sua instância do DMS.
   + **Aceitante da VPC**: selecione a VPC que contém sua instância do RDS.
**nota**  
Se a VPC aceitante estiver associada a uma conta diferente da AWS , você deverá ter o ID da conta e o ID da VPC dessa conta.

1. Clique em **Criar conexão de emparelhamento**.

**Aceitar uma a conexão de emparelhamento da VPC**

1. Na lista **Conexões de emparelhamento**, encontre a nova conexão de emparelhamento com o status **Aceitação pendente**.

1. Selecione a conexão de emparelhamento apropriada, clique em **Ações** e selecione **Aceitar solicitação**.

   O status da conexão de emparelhamento muda para **Ativo**.

**Atualizar tabelas de rotas**

Para habilitar o tráfego entre os VPCs, você deve atualizar a tabela de rotas em ambos os seus VPCs. Para atualizar as tabelas de rotas na VPC do DMS:

1. Identifique o bloco CIDR da VPC do RDS:

   1. Navegue até sua VPCs e selecione sua VPC do RDS.

   1. Copie o valor do IPv4 CIDR na **CIDRs**guia.

1. Identifique tabelas de rotas relevantes do DMS usando o mapa de recursos:

   1. Navegue até sua VPCs e selecione sua VPC do DMS.

   1. Clique na guia **Mapa de recursos** e preste atenção às tabelas de rotas associadas às sub-redes em que sua instância do DMS está localizada.

1. Atualize todas as tabelas de rotas na VPC do DMS:

   1. Navegue até as tabelas de rotas no [console da Amazon VPC](https://console.aws.amazon.com/vpc/).

   1. Selecione as tabelas de rotas identificadas para a VPC do DMS. Você pode abri-las na guia **Mapa de recursos** da VPC.

   1. Clique em **Editar rotas**.

   1. Clique em “Adicionar rota” e insira as seguintes informações:
      + **Destino**: insira o bloco IPv4 CIDR da VPC do RDS (exemplo:). `10.1.0.0/16`
      + **Destino**: selecione o ID de configuração de emparelhamento (exemplo: `pcx-1234567890abcdef`).

   1. Clique em **Salvar rotas**.

      Suas rotas de VPC são salvas para a VPC do DMS. Execute as mesmas etapas para a VPC do RDS.

**Atualizar Grupos de Segurança**

1. Verifique o grupo de segurança da instância do DMS:

   1. Você deve garantir que as regras de saída permitam o tráfego para a instância do RDS:
     + **Tipo**: TCP personalizado ou a porta específica do banco de dados (exemplo: 3306 para MySQL).
     + **Destino**: o bloco CIDR da VPC do RDS ou o grupo de segurança da instância do RDS.

1. Verifique o grupo de segurança da instância do RDS:

   1. Você deve garantir que as regras de entrada permitam o tráfego da instância do DMS:
     + **Tipo**: a porta específica do banco de dados.
     + Destino: o bloco CIDR da VPC do DMS ou o grupo de segurança da instância do RDS.

**nota**  
Você também deve verificar o seguinte:  
**Conexão de emparelhamento ativa**: verifique se a conexão de emparelhamento da VPC está no estado **Ativo** antes de continuar.
**Mapa de recursos**: use a guia **Mapa de recursos** no [console da Amazon VPC](https://console.aws.amazon.com/vpc/) para identificar quais tabelas de rotas precisam ser atualizadas.
**Sem blocos CIDR sobrepostos: VPCs devem ter blocos** CIDR não sobrepostos.
**Práticas recomendadas de segurança**: restrinja as regras do grupo de segurança às portas e origens necessárias.  
Para ter mais informações, consulte [Conexões de emparelhamento da VPC](https://docs.aws.amazon.com/vpc/latest/peering/working-with-vpc-peering.html) no *Guia do usuário da Amazon Virtual Private Cloud*.

# Configuração do grupo de segurança para AWS DMS
<a name="CHAP_Advanced.Endpoints.securitygroup"></a>

O grupo de segurança de entrada AWS DMS deve permitir conexões de entrada e saída para suas instâncias de replicação na porta apropriada do banco de dados. Se você estiver usando o Amazon RDS, deverá configurar o grupo de segurança entre o DMS e o RDS para suas instâncias.

Você deve executar as seguintes etapas:

**Configurar o grupo de segurança da instância do RDS**

1. Navegue até o [console da Amazon VPC](https://console.aws.amazon.com/vpc/).

1. No painel de navegação à esquerda, em **Segurança**, selecione **Grupos de segurança**.

1. Selecione o grupo de segurança do RDS associado à instância do RDS.

1. Edite as regras de entrada:

   1. Clique em **Ações** e selecione **Editar regras de saída**.

   1. Clique em **Adicionar regra** para criar uma regra.

   1. Configure a regra desta forma:
      + **Tipo**: Selecione seu tipo de banco de dados (Exemplo: MySQL/Aurora para a porta 3306, PostgreSQL para a porta 5432).
      + **Protocolo**: é preenchido automaticamente com base no tipo de banco de dados.
      + **Intervalo de portas**: é preenchido automaticamente com base no tipo de banco de dados.
      + **Origem**: escolha **Personalizada** e cole o ID do grupo de segurança associado à sua instância do DMS. Isso permite o tráfego de qualquer recurso dentro desse grupo de segurança. Você também pode especificar o intervalo de IP (bloco CIDR) da sua instância do DMS.

   1. Clique em **Salvar regras**.

**Configurar o grupo de segurança da instância de replicação do DMS**

1. Navegue até o [console da Amazon VPC](https://console.aws.amazon.com/vpc/).

1. No painel de navegação à esquerda, em **Segurança**, selecione **Grupos de segurança**.

1. Na lista **Grupo de segurança**, localize e selecione o grupo de segurança associado à sua instância de replicação do DMS.

1. Edite as regras de saída:

   1. Clique em **Ações** e selecione **Editar regras de saída**.

   1. Clique em **Adicionar regra** para criar uma regra.

   1. Configure a regra desta forma:
      + Tipo: selecione o tipo de banco de dados (exemplo: MySQL/Aurora, PostgreSQL).
      + Protocolo: é preenchido automaticamente com base no tipo de banco de dados.
      + Intervalo de portas: é preenchido automaticamente com base no tipo de banco de dados.
      + Origem: escolha **Personalizada** e cole o ID do grupo de segurança associado à sua instância do RDS. Isso permite o tráfego de qualquer recurso dentro desse grupo de segurança. Você também pode especificar o intervalo de IP (bloco CIDR) da sua instância do RDS.

   1. Clique em **Salvar regras**.

## Considerações adicionais
<a name="CHAP_securitygroup_additional_considerations"></a>

Você deve considerar as seguintes informações de configuração adicional:
+ **Use referências a grupos de segurança**: fazer referência a grupos de segurança nas instâncias de origem ou destino permite um gerenciamento dinâmico e é mais seguro do que usar endereços IP, pois isso inclui automaticamente todos os recursos do grupo.
+ **Portas do banco de dados**: verifique se você está usando a porta correta para seu banco de dados.
+ **Práticas recomendadas de segurança**: abra somente as portas necessárias para minimizar os riscos de segurança. Você também deve analisar regularmente as regras do grupo de segurança para garantir que elas atendam aos seus padrões e requisitos de segurança.

# Configuração da Lista de Controle de Acesso à Rede (NACL) para AWS DMS
<a name="CHAP_Advanced.Ednpoints.NACL"></a>

Ao usar o Amazon RDS como fonte de replicação, você deve atualizar as listas de controle de acesso à rede (NACLs) para sua instância de DMS e RDS. Certifique-se de que NACLs estejam associados às sub-redes em que essas instâncias residem. Isso permite tráfego de entrada e saída na porta específica do banco de dados.

Para atualizar as listas de controle de acesso à rede, você deve realizar as seguintes etapas:

**nota**  
Se suas instâncias do DMS e do RDS estiverem na mesma sub-rede, você só precisará atualizar a NACL dessa sub-rede.

**Identifique o relevante NACLs**

1. Navegue até o [console da Amazon VPC](https://console.aws.amazon.com/vpc/).

1. No painel de navegação à esquerda, em **Segurança**, selecione **Rede ACLs**.

1. Selecione o relevante NACLs associado às sub-redes em que residem suas instâncias do DMS e do RDS.

**Atualize o NACLs para a sub-rede da instância DMS**

1. Identifique a NACL associada à sub-rede da sua instância do DMS. Para fazer isso, você pode navegar pelas sub-redes no [console da Amazon VPC](https://console.aws.amazon.com/vpc/), encontrar a sub-rede do DMS e anotar o ID da NACL correspondente.

1. Edite as regras de entrada:

   1. Clique na guia **Regras de entrada** da NACL selecionada.

   1. Selecione **Editar regras de entrada**.

   1. Adicione uma nova regra:
      + **Número da regra**: escolha um número exclusivo (exemplo: 100).
      + **Tipo**: selecione **Regra de TCP personalizada**.
      + **Protocolo**: TCP
      + **Intervalo de portas**: insira a porta do seu banco de dados (exemplo: 3306 para MySQL).
      + **Origem**: insira o bloco CIDR da sub-rede do RDS (exemplo: 10.1.0.0/16).
      + **Permitir/Negar**: selecione **Permitir**.

1. Edite as regras de saída:

   1. Clique na guia **Regras de entrada** da NACL selecionada.

   1. Clique em **Editar regras de saída**.

   1. Adicione uma nova regra:
      + **Número da regra**: use o mesmo número usado nas regras de entrada.
      + **Tipo:** todo o tráfego.
      + **Destino**: 0.0.0.0/0
      + **Permitir/Negar**: selecione **Permitir**.

1. Clique em **Salvar alterações**.

1. Execute as mesmas etapas para atualizar a sub-rede NACLs associada à instância do RDS.

## Verificar as regras da NACL
<a name="CHAP_NACL.verify.NACL.Rules"></a>

Você deve garantir os seguintes critérios em relação às regras da NACL:
+ **Ordem das regras**: NACLs processa as regras na ordem crescente com base no número da regra. Todas as regras definidas como “**Permitir**” devem ter números de regra mais baixos do que todas as regras definidas como “**Negar**”, pois isso pode bloquear o tráfego.
+ **Natureza apátrida**: NACLs são apátridas. Você deve permitir explicitamente o tráfego de entrada e de saída.
+ **Blocos CIDR**: você deve garantir que os blocos CIDR usados representem com precisão as sub-redes de suas instâncias do DMS e RDS.

# Configurando o gerenciador de AWS DMS segredos VPC Endpoint
<a name="CHAP_Advanced.Endpoints.secretsmanager"></a>

Você deve criar um VPC endpoint para acessar o AWS Secrets Manager a partir de uma instância de replicação em uma sub-rede privada. Isso permite que a instância de replicação acesse o Secrets Manager diretamente pela rede privada sem enviar tráfego pela internet pública.

Para configurar, você deve seguir as etapas abaixo:

**Crie um grupo de segurança para o endpoint da VPC.**

1. Navegue até o [console da Amazon VPC](https://console.aws.amazon.com/vpc/).

1. No painel de navegação à esquerda, selecione **Grupos de segurança** e escolha **Criar grupo de segurança**.

1. Configure detalhes do grupo de segurança:
   + **Nome do grupo de segurança**: por exemplo, `SecretsManagerEndpointSG`.
   + **Descrição**: insira uma descrição apropriada. (Exemplo: grupo de segurança para o endpoint da VPC do Secrets Manager).
   + **VPC**: selecione a VPC em que a instância de replicação e os endpoints residem.

1. Clique em **Adicionar regra** para definir regras de entrada e configurar o seguinte:
   + Tipo: HTTPS (pois o Secrets Manager usa HTTPS na porta 443).
   + Origem: escolha **Personalizada** e insira o ID do grupo de segurança da instância de replicação. Isso garante que qualquer instância associada a esse grupo de segurança possa acessar o endpoint da VPC.

1. Analise as alterações e clique em **Criar grupo de segurança**.

**Criar um endpoint da VPC do Secrets Manager**
**nota**  
Crie um endpoint da VPC de interface conforme descrito no tópico da documentação [Criar um endpoint de interface](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws) no *Guia do usuário da Amazon Virtual Private Cloud*. Ao seguir as etapas neste procedimento, faça o seguinte:  
Em **Categoria de serviço**, você deve selecionar **Serviços da AWS **.
Em **Nome do serviço**, pesquise `seretsmanager` e selecione o serviço Secrets Manager.

1. Selecione **VPC e sub-redes** e configure o seguinte:
   + **VPC**: deve ser a mesma VPC da instância de replicação.
   + **Sub-redes**: selecione as sub-redes em que a instância de replicação reside.

1. Em **Configurações adicionais**, **Habilitar nome DNS** deve estar habilitada por padrão para os endpoints da interface.

1. Em **Grupo de segurança**, selecione o nome do grupo de segurança apropriado. Exemplo: `SecretsManagerEndpointSG`, conforme criado anteriormente.

1. Analise todas as configurações e clique em **Criar endpoint**.

**Recuperar o nome de DNS do endpoint da VPC**

1. Acesse os detalhes do endpoint da VPC:

   1. Navegue até o [console da Amazon VPC](https://console.aws.amazon.com/vpc/) e escolha **Endpoints**.

   1. Selecione o endpoint apropriado que você criou.

1. Copie o nome de DNS:

   1. Na guia **Detalhes**, navegue até a seção **Nomes de DNS**.

   1. Copie o primeiro nome de DNS listado. (Exemplo: `vpce-0abc123def456789g-secretsmanager.us-east-1.vpce.amazonaws.com`). Essa é a entrada do nome de DNS regional.

**Atualizar o endpoint do DMS**

1. Navegue até o console [AWS DMS](https://console.aws.amazon.com/dms/v2).

1. Modifique o endpoint do DMS:

   1. No painel de navegação à esquerda, selecione **Endpoints**.

   1. Escolha o endpoint que você deseja configurar.

   1. Clique em **Ações** e selecione **Modificar**.

1. Configure as definições do endpoint:

   1. Navegue até **Configurações do endpoint** e marque a caixa de seleção **Usar atributos de conexão de endpoint**.

   1. No campo **Atributos de conexão**, adicione `secretsManagerEndpointOverride=<copied DNS name>`.
**nota**  
Se você tiver vários atributos de conexão, poderá separá-los com ponto e vírgula (“;”). Por exemplo: `datePartitionEnabled=false;secretsManagerEndpointOverride=vpce-0abc123def456789g-secretsmanager.us-east-1.vpce.amazonaws.com`

1. Clique em **Modificar endpoint** para salvar as alterações.

## Considerações adicionais
<a name="CHAP_secretsmanager.additionalconsiderations"></a>

Você deve considerar as seguintes informações de configuração adicional:

**Grupo de segurança da instância de replicação:**
+ O grupo de segurança associado à instância de replicação deve permitir tráfego de saída para o endpoint da VPC na porta 443 (HTTPS).

**Configurações de DNS da VPC:**
+ Confirme se as opções **Resolução de DNS** e **Hotnames de DNS** estão habilitadas em sua VPC. Isso permite que as instâncias resolvam os nomes de DNS do endpoint da VPC. **Você pode confirmar isso navegando até VPCs o console da [Amazon VPC e selecionando sua VPC](https://console.aws.amazon.com/vpc/) para verificar se a resolução de DNS e os hotnames de **DNS** estão definidos como **"**Sim”.**

**Testar a conectividade:**
+ Em sua instância de replicação, você pode realizar uma pesquisa de DNS para garantir a resolução do endpoint da VPC: `nslookup secretsmanager.<region>amazonaws.com`. Ela deve exibir o endereço IP associado ao seu endpoint da VPC.