

# Trabalhar com réplicas de leitura do Microsoft SQL Server no Amazon RDS
<a name="SQLServer.ReadReplicas"></a>

Normalmente, você usa réplicas de leitura para configurar a replicação entre as instâncias de banco de dados do Amazon RDS. Para obter informações gerais sobre réplicas de leitura, consulte [Trabalhar com réplicas de leitura de instância de banco de dados](USER_ReadRepl.md). 

Nesta seção, você pode encontrar informações específicas sobre como trabalhar com réplicas de leitura no Amazon RDS for SQL Server.
+ [Sincronização de usuários e objetos do banco de dados com uma réplica de leitura do SQL Server](SQLServer.ReadReplicas.ObjectSynchronization.md)
+ [Solução de problemas de uma réplica de leitura do SQL Server](SQLServer.ReadReplicas.Troubleshooting.md)

## Configurar réplicas de leitura do SQL Server
<a name="SQLServer.ReadReplicas.Configuration"></a>

Antes que uma instância de banco de dados possa servir como uma instância de origem para replicação, é necessário habilitar backups automáticos na instância de banco de dados de origem. Para fazer isso, defina o período de retenção de backup como um valor diferente de 0. Definir esse tipo de implantação também impõe que os backups automáticos estejam habilitados.

Criar uma réplica de leitura do SQL Server não requer a interrupção da instância de banco de dados primária. O Amazon RDS define os parâmetros e as permissões necessários para a instância banco de dados de origem e para a réplica de leitura sem qualquer interrupção do serviço. Um snapshot é feito da instância de banco de dados de origem, e esse snapshot se torna a réplica de leitura. Quando você exclui uma réplica de leitura, não ocorre nenhuma interrupção. 

Você pode criar até quinze réplicas de leitura de uma instância de banco de dados de origem. Para que a replicação funcione eficazmente, recomendamos configurar cada réplica de leitura com a mesma quantidade de recursos de computação e de armazenamento que a instância de banco de dados de origem. Se você dimensionar a instância de banco de dados de origem, dimensione as réplicas de leitura também.

A versão do mecanismo de banco de dados SQL Server da instância de banco de dados de origem e todas as réplicas de leitura devem ser iguais. O Amazon RDS atualiza aa primária imediatamente após a atualização das réplicas de leitura, desconsiderando a janela de manutenção de uma réplica. Para ter mais informações sobre como atualizar a versão do mecanismo de banco de dados, consulte [Atualizações do mecanismo de banco de dados do Microsoft SQL Server](USER_UpgradeDBInstance.SQLServer.md).

Para que uma réplica de leitura receba e aplique alterações da origem, ela deve ter recursos suficientes de computação e armazenamento. Se uma réplica de leitura atingir a capacidade de recursos de computação, rede ou armazenamento, ela deixará de receber ou aplicar alterações de sua origem. É possível modificar os recursos de armazenamento e CPU de uma réplica de leitura independentemente de sua origem e de outras réplicas de leitura. 

Para ter mais informações sobre como criar uma réplica de leitura, consulte [Como criar uma réplica de leitura](USER_ReadRepl.Create.md).

## Limitações de réplica de leitura com o SQL Server
<a name="SQLServer.ReadReplicas.Limitations"></a>

As seguintes limitações se aplicam a réplicas de leitura do SQL Server no Amazon RDS:
+ Réplicas de leitura só estão disponíveis no mecanismo do SQL Server Enterprise Edition (EE).
+ Réplicas de leitura estão disponíveis para as versões do SQL Server 2016–2022.
+ Você pode criar até quinze réplicas de leitura de uma instância de banco de dados de origem. A replicação poderá atrasar quando a instância de banco de dados de origem tiver mais de cinco réplicas de leitura.
+ Réplicas de leitura só estão disponíveis para instâncias de banco de dados em execução em classes de instância de banco de dados com quatro ou mais vCPUs.
+ Uma réplica de leitura comporta até cem bancos de dados, dependendo do tipo de classe de instância e do modo de disponibilidade. É necessário criar bancos de dados na instância de banco de dados de origem para replicá-las automaticamente nas réplicas de leitura. Não é possível escolher bancos de dados individuais para replicar. Para obter mais informações, consulte [Limitações das instâncias de banco de dados Microsoft SQL Server](CHAP_SQLServer.md#SQLServer.Concepts.General.FeatureSupport.Limits).
+ Não é possível descartar um banco de dados de uma réplica de leitura. Para descartar um banco de dados, retire-o da instância de banco de dados de origem com o procedimento armazenado `rds_drop_database`. Para obter mais informações, consulte [Eliminar um banco de dados em uma instância de banco de dados do Amazon RDS para Microsoft SQL Server](Appendix.SQLServer.CommonDBATasks.DropMirrorDB.md).
+ Se a instância de banco de dados de origem usa criptografia de dados transparente (TDE) para criptografar dados, a réplica de leitura também configura a TDE.

  Se a instância de banco de dados de origem usar uma chave do KMS para criptografar dados, réplicas de leitura na mesma região usarão a mesma chave do KMS. Em relação a réplicas de leitura entre regiões, você deve especificar uma chave do KMS da região da réplica de leitura ao criar a réplica de leitura. Não é possível alterar a chave do KMS para uma réplica de leitura.
+ As réplicas de leitura têm o mesmo fuso horário e agrupamento da instância de banco de dados de origem, independentemente da zona de disponibilidade em que foram criadas.
+ Os seguintes não são compatíveis com o Amazon RDS for SQL Server:
  + Retenção de backup de réplicas de leitura
  + Recuperação point-in-time de réplicas de leitura
  + Snapshots manuais de réplicas de leitura
  + Réplicas de leitura Multi-AZ
  + Criar réplicas de leitura de réplicas de leitura
  + Sincronização de logins de usuários para réplicas de leitura
+ O Amazon RDS for SQL Server não intervém para atenuar atrasos altos de replicação entre uma instância de banco de dados de origem e suas réplicas de leitura. Certifique-se de que a instância de banco de dados de origem e suas réplicas de leitura estejam dimensionadas corretamente, em termos de capacidade de computação e armazenamento, para atender a suas cargas operacionais.
+ Você pode replicar entre as regiões AWS GovCloud (Oeste dos EUA) e AWS GovCloud (Leste dos EUA), mas não para dentro ou fora da AWS GovCloud (US) Regions.

## Considerações opcionais sobre réplicas do RDS para SQL Server
<a name="SQLServer.ReadReplicas.limitations.options"></a>

Antes de criar uma réplica do RDS para SQL Server, considere os seguintes requisitos, restrições e recomendações:
+ Se a réplica do SQL Server estiver na mesma região da instância de banco de dados de origem, verifique se ela pertence ao mesmo grupo de opções que essa instância. Modificações no grupo de opções de origem ou na associação do grupo de opções de origem são propagadas para as réplicas. Essas alterações serão aplicadas às réplicas logo depois de serem aplicadas à instância de banco de dados de origem, independentemente da janela de manutenção da réplica.

  Para ter mais informações sobre grupos de opções, consulte [Trabalhar com grupos de opções](USER_WorkingWithOptionGroups.md).
+ Quando você cria uma réplica entre regiões no SQL Server, o Amazon RDS cria um grupo de opções dedicado para ela.

  Não é possível remover uma réplica entre regiões no SQL Server do seu grupo de opções dedicado. Nenhuma outra instância de banco de dados pode usar o grupo de opções dedicado para uma réplica entre regiões no SQL Server.

  As opções a seguir são opções replicadas. Para adicionar outras opções a uma réplica de leitura entre regiões do SQL Server, adicione-as ao grupo de opções da instância de banco de dados de origem. A opção também é instalada em todas as réplicas da instância do banco de dados de origem.
  + `TDE`

  As opções a seguir são opções não replicadas. Você pode adicionar ou remover opções não replicadas de um grupo de opções dedicado.
  + `MSDTC`
  + `SQLSERVER_AUDIT`
  + Para ativar a opção `SQLSERVER_AUDIT` na réplica de leitura entre regiões, adicione a opção `SQLSERVER_AUDIT` no grupo de opções dedicado na réplica de leitura entre regiões e no grupo de opções da instância de origem. Ao adicionar a opção `SQLSERVER_AUDIT` na instância de origem da réplica de leitura entre regiões do SQL Server, você pode criar o Objeto de auditoria em nível de servidor e especificações de auditoria em nível de servidor em cada uma das réplicas de leitura entre regiões da instância de origem. Para permitir que as réplicas de leitura entre regiões tenham acesso para fazer upload dos logs de auditoria concluídos em um bucket do Amazon S3, adicione a opção `SQLSERVER_AUDIT` ao grupo de opções dedicado e defina as configurações da opção. O bucket do Amazon S3 que você usa como destino para arquivos de auditoria deve estar na mesma região que a réplica leitura entre regiões. Você pode modificar a configuração da opção `SQLSERVER_AUDIT` para cada réplica de leitura entre regiões de forma independente para que cada um possa acessar um bucket do Amazon S3 em sua respectiva região.

  As opções a seguir não são compatíveis com réplicas de leitura entre regiões.
  + `SSRS`
  + `SSAS`
  + `SSIS`

  As opções a seguir são parcialmente compatíveis com réplicas de leitura entre regiões.
  + `SQLSERVER_BACKUP_RESTORE`
  + A instância de banco de dados de origem de uma réplica entre regiões do SQL Server pode ter a opção `SQLSERVER_BACKUP_RESTORE`, mas você não pode realizar restaurações nativas na instância de banco de dados de origem até excluir todas as réplicas entre regiões. Todas as tarefas de restauração nativa existentes serão canceladas durante a criação de uma réplica entre regiões. Você não pode adicionar a opção `SQLSERVER_BACKUP_RESTORE` a um grupo de opções dedicado.

    Para ter mais informações sobre o backup e a restauração nativos, consulte [Importar e exportar bancos de dados do SQL Server usando backup e restauração nativos](SQLServer.Procedural.Importing.md).

  Quando você promove uma réplica de leitura entre regiões no SQL Server, a réplica promovida se comporta da mesma maneira que outras instâncias de banco de dados do SQL Server, inclusive o gerenciamento de suas opções. Para ter mais informações sobre grupos de opções, consulte [Trabalhar com grupos de opções](USER_WorkingWithOptionGroups.md).

# Sincronização de usuários e objetos do banco de dados com uma réplica de leitura do SQL Server
<a name="SQLServer.ReadReplicas.ObjectSynchronization"></a>

Espera-se que todos os logins, perfis de servidor personalizados, trabalhos do agente do SQL ou outros objetos no nível do servidor que existam na instância de banco de dados primária no momento da criação de uma réplica de leitura estejam presentes na réplica de leitura recém-criada. No entanto, todos os objetos no nível do servidor criados na instância de banco de dados primária após a criação da réplica de leitura não serão replicados automaticamente, e você deverá criá-los manualmente na réplica de leitura.

Os usuários do banco de dados são replicados automaticamente da instância de banco de dados primária para a réplica de leitura. Como o banco de dados de réplica de leitura está no modo somente leitura, o identificador de segurança (SID) do usuário do banco de dados não pode ser atualizado no banco de dados. Portanto, ao criar logins de SQL na réplica de leitura, é essencial garantir que o SID desse login corresponda ao SID do login SQL correspondente na instância de banco de dados primária. Se você não sincronizar os SIDs dos logins do SQL, eles não poderão acessar o banco de dados na réplica de leitura. Os logins autenticados do Windows Active Directory (AD) não apresentam esse problema porque o SQL Server obtém o SID do Active Directory.

**Para sincronizar um login do SQL da instância de banco de dados primária com a réplica de leitura**

1. Conecte-se à instância de banco de dados primária.

1. Crie um login do SQL na instância de banco de dados primária.

   ```
   USE [master]
   GO
   CREATE LOGIN TestLogin1
   WITH PASSWORD = 'REPLACE WITH PASSWORD';
   ```
**nota**  
Especifique uma senha diferente do prompt mostrado aqui como prática recomendada de segurança.

1. Crie um usuário do banco de dados para o login do SQL no banco de dados.

   ```
   USE [REPLACE WITH YOUR DB NAME]
   GO
   CREATE USER TestLogin1 FOR LOGIN TestLogin1;
   GO
   ```

1. Verifique o SID do login do SQL recém-criado na instância de banco de dados primária.

   ```
   SELECT name, sid FROM sys.server_principals WHERE name =  'TestLogin1';
   ```

1. Conecte-se à réplica de leitura. Crie o login do SQL.

   ```
   CREATE LOGIN TestLogin1 WITH PASSWORD = 'REPLACE WITH PASSWORD', SID=REPLACE WITH sid FROM STEP #4;
   ```

**Como alternativa, se você tiver acesso ao banco de dados da réplica de leitura, poderá corrigir o usuário órfão da seguinte forma:**

1. Conecte-se à réplica de leitura.

1. Identifique os usuários órfãos no banco de dados.

   ```
   USE [REPLACE WITH YOUR DB NAME]
   GO
   EXEC sp_change_users_login 'Report';
   GO
   ```

1. Crie um login do SQL para o usuário órfão do banco de dados.

   ```
   CREATE LOGIN TestLogin1 WITH PASSWORD = 'REPLACE WITH PASSWORD', SID=REPLACE WITH sid FROM STEP #2;
   ```

   Exemplo:

   ```
   CREATE LOGIN TestLogin1 WITH PASSWORD = 'TestPa$$word#1', SID=0x1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P;
   ```
**nota**  
Especifique uma senha diferente do prompt mostrado aqui como prática recomendada de segurança.

# Solução de problemas de uma réplica de leitura do SQL Server
<a name="SQLServer.ReadReplicas.Troubleshooting"></a>

Você pode monitorar o atraso da replicação no Amazon CloudWatch visualizando a métrica `ReplicaLag` do Amazon RDS. Para obter informações sobre o tempo de atraso de replicação, consulte [Monitoramento da replicação de leitura](USER_ReadRepl.Monitoring.md).

Se o atraso de replicação for muito longo, use a seguinte consulta para obter informações sobre esse atraso:

```
SELECT AR.replica_server_name
     , DB_NAME (ARS.database_id) 'database_name'
     , AR.availability_mode_desc
     , ARS.synchronization_health_desc
     , ARS.last_hardened_lsn
     , ARS.last_redone_lsn
     , ARS.secondary_lag_seconds
FROM sys.dm_hadr_database_replica_states ARS
INNER JOIN sys.availability_replicas AR ON ARS.replica_id = AR.replica_id
--WHERE DB_NAME(ARS.database_id) = 'database_name'
ORDER BY AR.replica_server_name;
```