Ative a captura de dados de alterações (CDC)

Esta página descreve como ativar a captura de dados de alterações (CDC) no Cloud SQL para SQL Server. Esta funcionalidade está disponível para as bases de dados das suas instâncias.

A CDC permite-lhe captar muitos tipos de alterações. Para informações sobre como ativar e desativar a CDC, consulte a documentação da Microsoft.

Depois de se ligar a uma instância, o sqlserver utilizador pode realizar muitas operações de CDC.

Veja também Trabalhe com dados de alterações.

Antes de começar

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

Confirme a disponibilidade das funcionalidades

A CDC está disponível para as seguintes versões de base de dados do Cloud SQL para 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

Ativar a CDC e iniciar tarefas de captura de CDC

A sua base de dados tem os seguintes procedimentos armazenados para utilização pelo utilizador sqlserver:

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

Ative o CDC

Para ativar esta funcionalidade para uma base de dados, execute o procedimento armazenado necessário e transmita o nome da base de dados. Por exemplo:

EXEC msdb.dbo.gcloudsql_cdc_enable_db 'DATABASE_NAME'

Desative o CDC

Para desativar esta funcionalidade para uma base de dados, execute um comando como o seguinte:

EXEC msdb.dbo.gcloudsql_cdc_disable_db 'DATABASE_NAME'

Inicie tarefas de captura de CDC

Depois de a CDC ser ativada, são criadas tarefas para captura e limpeza. As tarefas são invisíveis para o utilizador sqlserver no SQL Server Management Studio (SSMS). No entanto, pode modificar as tarefas através de procedimentos armazenados incorporados. Além disso, os trabalhos são visíveis através do seguinte procedimento armazenado:

Para iniciar uma tarefa de limpeza, pode usar o seguinte comando:

EXEC sys.sp_cdc_start_job @job_type = N'cleanup'

Para alterar os parâmetros da tarefa, pode usar 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 trabalhos, consulte o seguinte:

Veja também sys.sp_cdc_add_job.

Ativar a CDC para uma tabela

Depois de ativar a CDC para uma base de dados, qualquer utilizador com acesso dbo (proprietário da base de dados) pode configurar o acompanhamento de tabelas na base de dados.

Para obter informações sobre os comandos e as opções padrão de CDC, consulte o artigo Ative e desative a captura de dados de alterações.

Registe alterações numa tabela

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

Por exemplo, pode 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 numa tabela

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

Por exemplo, pode especificar um comando semelhante ao seguinte:

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

Consultar alterações através de uma tabela de alterações da CDC

Para ver as alterações da CDC feitas numa tabela, use uma consulta SELECT na tabela que é criada automaticamente quando a CDC é ativada nessa tabela.

A tabela tem o seguinte nome:

<schema>_<table_name>_CT

Por exemplo, pode especificar um comando semelhante ao seguinte:

SELECT * FROM cdc.dbo_customer_CT

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

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

Por exemplo, pode 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

Consultar todas as alterações numa instância de captura

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

Por exemplo, pode especificar uma declaração SQL semelhante à seguinte:

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');

Desativar a CDC para uma tabela

Para desativar o acompanhamento de CDC para uma tabela, use o procedimento armazenado sys.sp_cdc_disable_table. Especifique uma instância de captura para a desativar. Em alternativa, especifique uma instância de captura como 'all'.

Por exemplo, pode especificar um comando semelhante ao seguinte para desativar a CDC para a tabela:

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

Eliminar uma base de dados ativada para CDC

Se a CDC estiver ativada para uma base de dados e tentar eliminá-la, pode encontrar erros. Se isto ocorrer, desative a CDC para a base de dados e, em seguida, elimine-a.

Por exemplo, pode especificar um comando semelhante ao seguinte para desativar e eliminar uma base de dados:

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

Se não conseguir eliminar a base de dados porque tem ligações abertas, use a seguinte consulta para ver essas ligações:

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

Feche todas as ligações abertas. Desative a CDC para a base de dados e, de seguida, elimine a base de dados.

Importar uma base de dados ativada para CDC

Quando importa uma base de dados com CDC ativado, o Cloud SQL para SQL Server mantém a flag KEEP_CDC ativada e cria automaticamente tarefas de captura e limpeza com parâmetros predefinidos.