

# Suporte à captura de dados de alteração (CDC) com o RDS Custom para SQL Server
<a name="custom-sqlserver-features.cdc"></a>

## Visão geral
<a name="custom-sqlserver-features.cdc.overview"></a>

O RDS Custom para SQL Server oferece suporte nativo à captura de dados de alteração (CDC), permitindo que você acompanhe e capture modificações nos dados de suas tabelas do SQL Server. A CDC armazena metadados detalhados sobre essas alterações para recuperação e análise posteriores. Para ter mais informações sobre como a funcionalidade de CDC, consulte [Change data capture](https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/track-data-changes-sql-server#Capture) na documentação da Microsoft.

A operação de CDC no SQL Server requer valores correspondentes entre o *servidor local* (que tem `server_id` = 0) em `sys.servers` e os identificadores `SERVERPROPERTY('ServerName')`. O RDS Custom para SQL Server mantém automaticamente essa sincronização durante o ciclo de vida da instância para garantir o funcionamento contínuo da CDC, mesmo que os hosts sejam substituídos durante as operações de manutenção ou recuperação.

**Importante**  
Após o failover de uma instância multi-AZ, a função `SERVERPROPERTY('Servername')` reflete automaticamente as alterações no nome da rede/computador. No entanto, a função `@@SERVERNAME` mantém o nome antigo do servidor até que o serviço `MSSQLSERVER` seja reiniciado. A consulta de @@SERVERNAME exibe o nome do servidor anterior após um failover. Para obter o nome exato do servidor após um failover, use a seguinte consulta SQL:  

```
SELECT name FROM sys.servers WHERE server_id=0
```
Essa consulta fornece as informações de nome de servidor mais atualizadas sem exigir a reinicialização do serviço.

## Disponibilidade de regiões e versões
<a name="custom-sqlserver-features.cdc.regionAvail"></a>

A funcionalidade de CDC pode ser usada em todas as Regiões da AWS em que o RDS Custom para SQL Server está disponível, para todas as versões do SQL Server compatíveis com o RDS Custom. Para ter mais informações sobre versões compatíveis e disponibilidade de regiões do RDS Custom para SQL Server, consulte [Regiões e mecanismos de banco de dados compatíveis com o RDS Custom para SQL Server](Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.md#Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.sq).

## Requisitos e limitações
<a name="custom-sqlserver-features.cdc.reqsLims"></a>

Ao implementar a CDC no RDS Custom para SQL Server, esteja ciente destas considerações importantes:
+ Se você configurar manualmente `@@SERVERNAME` e/ou *servidor local* em `sys.servers` para usar recursos como o MS Replication, se o valor do servidor local (que tem `server_id = 0`) em `sys.servers` estiver definido em um formato que corresponda a `*.rds.amazonaws.com` ou `*.awsrds.*.com`, o RDS Custom para SQL Server não tentará modificá-lo para corresponder a `SERVERPROPERTY('ServerName')`.
+ O RDS não pode modificar o servidor local (que tem `server_id = 0`) em `sys.servers` para um novo nome de host enquanto logins remotos ou servidores vinculados estiverem usando ativamente o nome de host antigo. Essa limitação se aplica em dois cenários:
  + Quando um servidor vinculado estabelece uma conexão com o servidor local usando um login remoto associado ao nome de host antigo
  + Quando uma instância do RDS Custom para SQL Server atua como publicador ou distribuidor e vincula logins associados ao nome de host antigo às instâncias do assinante.

## Solução de problemas
<a name="custom-sqlserver-features.cdc.Troubleshooting"></a>

Para identificar logins remotos ou logins vinculados associados ao nome antigo do servidor, use as consultas a seguir. Valide os resultados e remova esses logins para garantir que a CDC funcione adequadamente.

```
SELECT * FROM sys.remote_logins WHERE server_id=0
```

or

```
select sss.srvname,ssp.name,srl.remote_name  from sys.server_principals ssp 
inner join sys.remote_logins srl on srl.local_principal_id=ssp.principal_id
inner join sys.sysservers sss  on srl.server_id = sss.srvid
where sss.srvname = @@SERVERNAME
```