Ativar captura de dados alterados (CDC)

Nesta página, explicamos como ativar a captura de dados alterados (CDC, na sigla em inglês) no Cloud SQL para o SQL Server. Este recurso está disponível para os bancos de dados de suas instâncias.

A CDC permite capturar vários tipos de alterações. Para informações sobre como ativar e desativar a CDC, consulte a documentação da Microsoft.

Depois de se conectar a uma instância, o usuário sqlserver pode fazer várias operações de CDC.

Consulte também Trabalhar com dados de alteração.

Antes de começar

Antes de implementar a CDC em uma instância, revise todas as informações nesta página.

Confirme a disponibilidade do recurso

A CDC está disponível para as seguintes versões de banco de dados do Cloud SQL para o SQL Server:

  • SQL Server 2022 Standard
  • SQL Server 2022 Enterprise
  • SQL Server 2019 Standard
  • SQL Server 2019 Enterprise
  • SQL Server 2017 Standard
  • SQL Server 2017 Enterprise

Como ativar a CDC e iniciar jobs de captura

Seu banco de dados tem os seguintes procedimentos armazenados, para uso do usuário sqlserver:

  • msdb.dbo.gcloudsql_cdc_enable_db
  • msdb.dbo.gcloudsql_cdc_disable_db

Ative a CDC

Para ativar esse recurso em um banco de dados, execute o procedimento armazenado necessário e transmita o nome dele. Exemplo:

EXEC msdb.dbo.gcloudsql_cdc_enable_db 'DATABASE_NAME'

Desative a CDC

Para desativar esse recurso em um banco de dados, execute um comando como este:

EXEC msdb.dbo.gcloudsql_cdc_disable_db 'DATABASE_NAME'

Inicie jobs de captura de CDC

Depois que a CDC é ativada, jobs são criados para captura e limpeza. Os jobs não são visíveis para o usuário sqlserver no SQL Server Management Studio (SSMS). No entanto, é possível modificar os jobs usando procedimentos armazenados incorporados. Além disso, é possível visualizar os jobs pelo procedimento armazenado a seguir:

Para iniciar um job de limpeza, use o seguinte comando:

EXEC sys.sp_cdc_start_job @job_type = N'cleanup'

Para alterar os parâmetros do job, use um comando semelhante ao seguinte, por exemplo:

EXEC sys.sp_cdc_change_job  @job_type = N'capture',
        @maxtrans = 20,
        @pollinginterval = NULL,
        @maxscans = NULL,
        @continuous = NULL

Para mais informações sobre como iniciar e alterar jobs, consulte:

Consulte também sys.sp_cdc_add_job.

Como ativar a CDC em uma tabela

Depois de ativar a CDC para um banco de dados, qualquer usuário com acesso dbo (proprietário do banco de dados) pode configurar o rastreamento de tabelas no banco de dados.

Para mais informações sobre os comandos e opções padrão da CDC, consulte Ativar e desativar a captura de dados de alterações.

Rastreie as alterações em uma tabela

Para rastrear uma tabela, use o procedimento armazenado sys.sp_cdc_enable_table.

Por exemplo, é possível especificar um comando semelhante ao seguinte:

EXEC sys.sp_cdc_enable_table
  @source_schema = N'dbo',
  @source_name = N'customer',
  @role_name = N'CDC'

Verifique se a CDC está ativada em uma tabela

Para verificar se a CDC está ativada em uma tabela, use o procedimento armazenado sys.sp_cdc_help_change_data_capture.

Por exemplo, é possível especificar um comando semelhante ao seguinte:

EXECUTE sys.sp_cdc_help_change_data_capture
  @source_schema = N'dbo',
  @source_name = N'customer'

Consulte alterações utilizando uma tabela de alterações de CDC

Para visualizar alterações de CDC feitas em uma tabela, use uma consulta SELECT na tabela que é criada automaticamente quando a CDC está ativada.

A tabela é nomeada da seguinte maneira:

<schema>_<table_name>_CT

Por exemplo, é possível especificar um comando semelhante ao seguinte:

SELECT * FROM cdc.dbo_customer_CT

Ative a CDC em uma tabela com uma instância de captura especificada

Para rastrear uma tabela com uma "instância de captura", use o procedimento armazenado sys.sp_cdc_enable_table.

Por exemplo, é possível especificar um comando semelhante ao seguinte:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name = N'customer',
    @role_name = N'CDC',
    @capture_instance = N'customer_cdc',
    @supports_net_changes = 1

Consulte todas as alterações em uma instância de captura

Para visualizar as alterações de CDC feitas em uma tabela em uma instância de captura, use o procedimento armazenado cdc.fn_cdc_get_all_changes_<capture_instance>.

Por exemplo, é possível especificar uma instrução SQL semelhante a esta:

DECLARE @from_lsn binary(10), @to_lsn binary(10)
SET @from_lsn = sys.fn_cdc_get_min_lsn(N'customer_cdc')
SET @to_lsn = sys.fn_cdc_get_max_lsn()
SELECT * FROM cdc.fn_cdc_get_all_changes_customer_cdc(@from_lsn, @to_lsn, N'all');

Como desativar a CDC de uma tabela

Para desativar o rastreamento de CDC de uma tabela, use o procedimento armazenado sys.sp_cdc_disable_table. Especifique uma instância de captura para desativá-la. Se preferir, especifique uma instância de captura como 'all'.

Por exemplo, é possível especificar um comando semelhante ao seguinte para desativar a CDC da tabela:

EXEC sys.sp_cdc_disable_table
  @source_schema = N'dbo',
  @source_name = N'customer',
  @capture_instance = N'all'

Como excluir um banco de dados ativado para CDC

Se o CDC estiver ativado para um banco de dados e você tentar excluí-lo, poderá encontrar erros. Se isso ocorrer, desative o CDC do banco de dados e exclua o banco de dados.

Por exemplo, especifique um comando semelhante ao seguinte para desativar e excluir um banco de dados:

EXEC msdb.dbo.gcloudsql_cdc_disable_db 'DATABASE_NAME'
DROP DATABASE 'DATABASE_NAME'

Se não for possível excluir o banco de dados porque ele tem conexões abertas, use a seguinte consulta para vê-las:

select db_name(dbid),* from sys.sysprocesses where db_name(dbid)= 'DATABASE_NAME'

Feche todas as conexões abertas. Desativar o CDC para o banco de dados e, em seguida, excluí-lo.

Como importar um banco de dados ativado pela CDC

Ao importar um banco de dados ativado pela CDC, o Cloud SQL para SQL Server mantém a sinalização KEEP_CDC ativada e cria automaticamente jobs de captura e limpeza com parâmetros padrão.