Partilhar via


Alterar a captura de dados e outros recursos

Aplica-se a:SQL ServerAzure SQL Managed Instance

Este artigo descreve como os recursos a seguir interagem com a captura de dados de alteração para o SQL Server e a Instância Gerenciada SQL do Azure. Para o Banco de Dados SQL do Azure, consulte CDC com o Banco de Dados SQL do Azure.

Controlo de alterações

A captura de dados de alterações e o controle de alterações podem ser habilitados no mesmo banco de dados. Não são necessárias considerações especiais. Para obter mais informações, consulte Trabalhar com o controle de alterações.

Espelhamento de banco de dados

Um banco de dados habilitado para captura de dados de alteração pode ser espelhado. Para garantir que a captura e a limpeza ocorram automaticamente após um failover, siga estas etapas:

  1. Verifique se o SQL Server Agent está em execução na nova instância do servidor principal.

  2. Crie o trabalho de captura e limpeza no novo banco de dados principal (o antigo banco de dados espelho). Para criar as tarefas, use o procedimento armazenado sp_cdc_add_job.

Para exibir a configuração atual de um trabalho de limpeza ou captura, use o procedimento armazenado sys.sp_cdc_help_jobs na nova instância do servidor principal. Para um determinado banco de dados, o trabalho de captura é chamado cdc.database_name_capture, e o trabalho de limpeza é chamado CDC.database_name_cleanup, onde database_name é o nome do banco de dados.

Para alterar a configuração de um trabalho, use o procedimento armazenado sys.sp_cdc_change_job.

Para obter informações sobre espelhamento de banco de dados, consulte espelhamento de banco de dados (SQL Server).

Replicação transacional

A captura de dados de alteração e a replicação transacional podem coexistir no mesmo banco de dados, mas o preenchimento das tabelas de alteração é tratado de forma diferente quando ambos os recursos estão habilitados. A captura de dados de alteração e a replicação transacional sempre usam o mesmo procedimento, sp_replcmds, para ler as alterações do log de transações. Quando a captura de dados de alteração é ativada isoladamente, um trabalho do SQL Server Agent chama sp_replcmds. Quando ambos os recursos estão habilitados no mesmo banco de dados, o Log Reader Agent chama sp_replcmds. Esse agente preenche as tabelas de alteração e as tabelas do banco de dados de distribuição. Para obter mais informações, consulte Replication Log Reader Agent.

Considere um cenário no qual a captura de dados de alteração esteja habilitada no banco de dados AdventureWorks2025 e duas tabelas estejam habilitadas para captura. Para preencher as tabelas de alteração, o trabalho de captura chama sp_replcmds. O banco de dados é habilitado para replicação transacional e uma publicação é criada. Agora, o Log Reader Agent é criado para o banco de dados, e o trabalho de captura é eliminado. O Log Reader Agent continua a verificar o log a partir do último número de sequência de log que foi confirmado na tabela de alterações. Isso garante a consistência dos dados nas tabelas de alteração. Se a replicação transacional estiver desabilitada nesse banco de dados, o Log Reader Agent será removido e o trabalho de captura será recriado.

Observação

Quando o Log Reader Agent é usado para captura de dados de alteração e replicação transacional, as alterações replicadas são gravadas primeiro no banco de dados de distribuição. Em seguida, as alterações capturadas são gravadas nas tabelas de alterações. Ambas as operações são realizadas em conjunto. Se houver alguma latência na gravação no banco de dados de distribuição, haverá uma latência correspondente antes que as alterações apareçam nas tabelas de alteração.

A opção proc exec de replicação transacional não está disponível quando a captura de dados de alteração está habilitada.

Restauração ou anexação de banco de dados

O SQL Server usa a seguinte lógica para determinar se a captura de dados de alteração permanece habilitada depois que um banco de dados é restaurado ou anexado:

  • Se um banco de dados for restaurado para o mesmo servidor com o mesmo nome de banco de dados, a captura de dados de alteração permanecerá habilitada.

  • Se um banco de dados for restaurado para outro servidor, por padrão, a captura de dados de alteração será desabilitada e todos os metadados relacionados serão excluídos.

    Para manter a captura de dados de alteração, use a opção KEEP_CDC ao restaurar o banco de dados. Para obter mais informações sobre essa opção, consulte RESTORE.

  • Se um banco de dados for desanexado e conectado ao mesmo servidor ou a outro servidor, a captura de dados de alteração permanecerá habilitada.

  • Se um banco de dados for anexado ou restaurado com a opção KEEP_CDC para qualquer edição que não seja Standard, Enterprise ou SQL Managed Instance, a operação será bloqueada porque a captura de dados de alteração requer as edições SQL Server Standard, Enterprise ou SQL Managed Instance. A mensagem de erro 934 é exibida:

    SQL Server cannot load database '%.*ls' because change data capture is enabled. The currently installed edition of SQL Server does not support change data capture. Either restore database without KEEP_CDC option, or upgrade the instance to one that supports change data capture.

Pode utilizar sys.sp_cdc_disable_db para remover a captura de alterações de dados de um banco de dados restaurado ou anexado.

Depois de restaurar um banco de dados na Instância Gerenciada SQL do Azure, o CDC permanecerá habilitado, mas você deve garantir que os trabalhos de verificação e limpeza sejam adicionados e executados. Você pode adicionar manualmente os trabalhos executando sys.sp_cdc_add_job.

Bases de dados contidas

A captura de alterações de dados não é suportada em bases de dados contidas .

Grupos de disponibilidade

Quando você usa grupos de disponibilidade Always On, a enumeração de alterações deve ser feita na réplica secundária para reduzir a carga de disco na principal.

Índices Columnstore

A captura de dados de alteração não pode ser habilitada em tabelas com um índice columnstore clusterizado. A partir do SQL Server 2016, ele pode ser habilitado em tabelas com um índice columnstore não clusterizado.

Colunas computadas

O CDC não suporta os valores para colunas computadas, mesmo que a coluna computada seja definida como persistente. As colunas computadas incluídas em uma instância de captura sempre têm um valor de NULL. Esse comportamento é intencional e não um bug.

Linux

O CDC é suportado para o SQL Server 2017 no Linux a partir do CU18, e para o SQL Server 2019 no Linux.

Ver também