Ler em inglês

Partilhar via


Ativar e desativar a captura de dados de alteração

Aplica-se a:SQL ServerAzure SQL Managed Instance

Este artigo descreve como habilitar e desabilitar a captura de dados de alteração (CDC) para um banco de dados e uma tabela 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.

Permissões

As permissões de sysadmin são necessárias para habilitar ou desabilitar a captura de dados de alteração no SQL Server e na Instância Gerenciada SQL do Azure.

Habilitar para um banco de dados

Antes de criar uma instância de captura para tabelas individuais, você deve habilitar a captura de dados de alteração para o banco de dados.

Para habilitar a captura de dados de alteração, execute o de sys.sp_cdc_enable_db de procedimento armazenado (Transact-SQL) no contexto do banco de dados. Para determinar se um banco de dados já tem o CDC habilitado, consulte a coluna is_cdc_enabled na exibição de catálogo sys.databases.

Quando um banco de dados tem a captura de dados de alteração habilitada, o esquema de cdc, cdc usuário, tabelas de metadados e outros objetos do sistema são criados para o banco de dados. O esquema cdc contém as tabelas de metadados de captura de dados de alteração e, depois que as tabelas de origem são habilitadas para captura de dados de alteração, as tabelas de alteração individuais servem como um repositório para dados de alteração. O esquema cdc também contém funções de sistema associadas usadas para consultar dados de alteração.

A captura de alterações de dados requer o uso exclusivo do esquema cdc e do usuário cdc. Se um esquema ou um usuário de banco de dados chamado cdc existir atualmente em um banco de dados, a captura de dados de alteração não poderá ser habilitada para o banco de dados até que o esquema e/ou usuário seja descartado ou renomeado.

-- ====
-- Enable Database for CDC
-- ====
USE MyDB
GO
EXEC sys.sp_cdc_enable_db
GO

Nota

Para localizar modelos relacionados ao CDC no SQL Server Management Studio, vá para Exibir, selecione Explorador de Modelose, em seguida, selecione Modelos do SQL Server. Change data capture é uma subpasta que contém os modelos

Desativar a base de dados

Use sys.sp_cdc_disable_db (Transact-SQL) no contexto da base de dados para desativar a captura de dados de alteração para uma base de dados. Não é necessário desativar o CDC para tabelas individuais antes de desabilitar o CDC para o banco de dados. A desativação do CDC para o banco de dados remove todos os metadados de captura de dados de alteração associados, incluindo o cdc usuário, esquema e os trabalhos de captura de dados de alteração. No entanto, quaisquer funções de regulação criadas pelo CDC não serão removidas automaticamente e devem ser explicitamente excluídas. Para determinar se um banco de dados tem CDC habilitado, consulte a coluna is_cdc_enabled na vista de catálogo sys.databases.

Se um banco de dados habilitado para CDC for descartado, as tarefas de captura de dados alterados serão removidas automaticamente.

-- Disable Database for change data capture
USE MyDB
GO
EXEC sys.sp_cdc_disable_db
GO

Ativar para uma tabela

Depois que um banco de dados tiver sido habilitado para captura de dados de alteração, os membros da função de banco de dados fixa db_owner poderão criar uma instância de captura para tabelas de origem individuais usando o procedimento armazenado sys.sp_cdc_enable_table. Para determinar se uma tabela de origem já foi ativada para a captura de dados de alteração, examine a coluna is_tracked_by_cdc na vista do catálogo sys.tables.

Importante

Para obter mais informações sobre os argumentos do procedimento armazenado sys.sp_cdc_enable_table, consulte sys.sp_cdc_enable_table (Transact-SQL).

As seguintes opções podem ser especificadas ao criar uma instância de captura:

Colunas na tabela de origem a serem capturadas.

Por padrão, todas as colunas na tabela de origem são identificadas como colunas capturadas. Se apenas um subconjunto de colunas precisar ser rastreado, como por motivos de privacidade ou desempenho, use o parâmetro @captured_column_list para especificar o subconjunto de colunas.

Um grupo de arquivos para conter a tabela de alterações.

Por padrão, a tabela de alterações está localizada no grupo de arquivos padrão do banco de dados. Os proprietários de banco de dados que desejam controlar o posicionamento de tabelas de alteração individuais podem usar o parâmetro @filegroup_name para especificar um grupo de arquivos específico para a tabela de alterações associada à instância de captura. O grupo de arquivos nomeado já deve existir. Geralmente, é recomendável que as tabelas de alteração sejam colocadas em um grupo de arquivos separado das tabelas de origem. Consulte o modelo Enable a Table Specifying Filegroup Option para obter um exemplo que demonstra o uso do parâmetro @filegroup_name.

-- Enable CDC for a table specifying filegroup
USE MyDB
GO

EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name   = N'MyTable',
    @role_name     = N'MyRole',
    @filegroup_name = N'MyDB_CT',
    @supports_net_changes = 1
GO

Uma função para controlar o acesso a uma tabela de alterações.

O objetivo da função nomeada é controlar o acesso aos dados de alteração. A função especificada pode ser uma função de servidor fixa existente ou uma função de banco de dados. Se a função especificada ainda não existir, uma função de banco de dados com esse nome será criada automaticamente. Os usuários devem ter a permissão SELECT em todas as colunas capturadas da tabela de origem. Além disso, quando uma função é especificada, os usuários que não são membros da função sysadmin ou db_owner também devem ser membros da função especificada.

Se você não quiser usar uma função de regulação, defina explicitamente o parâmetro @role_name como NULL. Consulte o modelo Habilitar uma tabela sem usar uma função de regulação para obter um exemplo de habilitação de uma tabela sem uma função de regulação.

-- Enable CDC for a table using a gating role option
USE MyDB
GO
    EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name   = N'MyTable',
    @role_name     = NULL,
    @supports_net_changes = 1
GO

Uma função para consultar alterações de rede.

Uma instância de captura sempre inclui uma função de valor de tabela (TVF) para retornar todas as entradas da tabela de alterações que ocorreram dentro de um intervalo definido. Esta função é nomeada ao adicionar o nome da instância de captura a `cdc.fn_cdc_get_all_changes_`. Para obter mais informações, consulte cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL).

Se o parâmetro @supports_net_changes estiver definido como 1, uma função net changes também será gerada para a instância de captura. Esta função retorna apenas uma alteração para cada linha distinta alterada no intervalo especificado na chamada. Para obter mais informações, consulte cdc.fn_cdc_get_net_changes_<capture_instance> (Transact-SQL).

Para dar suporte a consultas de alterações de rede, a tabela de origem deve ter uma chave primária ou um índice exclusivo para identificar linhas exclusivamente. Se um índice exclusivo for usado, o nome do índice deve ser especificado usando o parâmetro @index_name. As colunas definidas na chave primária ou índice exclusivo devem ser incluídas na lista de colunas de origem a serem capturadas.

Consulte o modelo Habilitar uma tabela para todas as consultas e alterações líquidas para obter um exemplo que demonstra como criar uma instância de captura com ambas as funções de consulta.

-- Enable CDC for a table for all and net changes queries
USE MyDB
GO
EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name   = N'MyTable',
    @role_name     = N'MyRole',
    @supports_net_changes = 1
GO

Nota

Se a captura de dados de alteração estiver habilitada em uma tabela com uma chave primária existente e o parâmetro @index_name não for usado para identificar um índice exclusivo alternativo, o recurso de captura de dados de alteração usará a chave primária. Alterações subsequentes na chave primária não são permitidas sem primeiro desabilitar a captura de dados de alteração para a tabela. Isso é verdade independentemente de o suporte para consultas de alterações de rede ter sido solicitado quando a captura de dados de alteração foi configurada. Se não houver nenhuma chave primária em uma tabela no momento em que ela estiver habilitada para a captura de dados de alteração, a adição subsequente de uma chave primária será ignorada pela captura de dados de alteração. Como a captura de dados de alteração não usará uma chave primária criada após a habilitação da tabela, a chave primária e as colunas de chave primária podem ser removidas sem restrições.

Desativar uma tabela

Os membros da função de banco de dados fixa db_owner podem remover uma instância de captura para tabelas de origem individuais utilizando o procedimento armazenado sys.sp_cdc_disable_table. Para determinar se uma tabela de origem está ativada atualmente para a captura de dados de alteração, examine a coluna is_tracked_by_cdc na vista de catálogo sys.tables. Se não houver tabelas habilitadas para o banco de dados após a desativação, os trabalhos de captura de dados de alteração também serão removidos.

Se uma tabela habilitada para captura de dados de alteração for descartada, os metadados de captura de dados de alteração associados à tabela serão removidos automaticamente.

Consulte o modelo Desabilitar uma instância de captura para uma tabela para obter um exemplo de desativação de uma tabela.

-- Disable a Capture Instance for a table
USE MyDB
GO
    EXEC sys.sp_cdc_disable_table
    @source_schema = N'dbo',
    @source_name   = N'MyTable',
    @capture_instance = N'dbo_MyTable'
GO

Ver também