Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este tópico descreve como habilitar e desabilitar a captura de dados de alteração para um banco de dados e uma tabela.
Habilitar a Captura de Dados de Alteração para um Banco de Dados
Antes que uma instância de captura possa ser criada para tabelas individuais, um membro da função de sysadmin servidor fixa deve primeiro habilitar o banco de dados para a captura de dados de alteração. Isso é feito executando o procedimento armazenado sys.sp_cdc_enable_db (Transact-SQL) no contexto do banco de dados. Para determinar se um banco de dados já está habilitado, consulte a coluna is_cdc_enabled na exibição do catálogo sys.databases.
Quando um banco de dados está habilitado para a captura de dados de alteração, o esquema, cdc o cdc usuário, as tabelas de metadados e outros objetos do sistema são criados para o banco de dados. O cdc esquema 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ções individuais servem como um repositório para dados de alteração. O cdc esquema também contém funções de sistema associadas usadas para consultar dados de alteração.
A captura de dados de alteração requer o uso exclusivo do esquema cdc e do usuário cdc. Se houver um esquema ou um usuário de banco de dados chamado cdc atualmente em um banco de dados, o banco de dados não poderá ser habilitado para captura de dados de alteração até que o esquema e ou o usuário sejam descartados ou renomeados.
Consulte o modelo Habilitar Banco de Dados para Captura de Dados de Alteração para obter um exemplo de habilitação de um banco de dados.
Importante
Para localizar os modelos no SQL Server Management Studio, acesse Exibir, clique no Gerenciador de Modelos e selecione Modelos do SQL Server. Captura de Alterações de Dados é uma subpasta. Nesta pasta, você encontrará todos os modelos referenciados neste tópico. Há também um ícone do Gerenciador de Modelos na barra de ferramentas do SQL Server Management Studio.
-- ====
-- Enable Database for CDC template
-- ====
USE MyDB
GO
EXEC sys.sp_cdc_enable_db
GO
Desabilitar a Captura de Dados de Alteração para um Banco de Dados
Um membro da função de servidor fixa sysadmin pode executar o procedimento armazenado sys.sp_cdc_disable_db (Transact-SQL) no contexto do banco de dados para desabilitar a captura de dados de alteração em um banco de dados. Não é necessário desabilitar tabelas individuais antes de desabilitar o banco de dados. Desabilitar o banco de dados remove todos os metadados associados à captura de dados de alteração, incluindo o usuário, o esquema cdc e as tarefas de captura de dados de alteração. No entanto, quaisquer papéis de controle criados pela captura de dados de alteração não serão removidos automaticamente e devem ser excluídos explicitamente. Para determinar se um banco de dados está habilitado, consulte a is_cdc_enabled coluna na exibição do catálogo sys.databases.
Se um banco de dados habilitado do Change Data Capture for descartado, os trabalhos de Change Data Capture serão removidos automaticamente.
Consulte o modelo Desabilitar Banco de Dados para Captura de Dados de Alteração para obter um exemplo de desabilitação de um banco de dados.
Importante
Para localizar os modelos no SQL Server Management Studio, acesse Exibir, clique no Gerenciador de Modelos e clique em Modelos do SQL Server. A Captura de Dados de Alteração é uma subpasta em que você encontrará todos os modelos referenciados neste tópico. Há também um ícone do Gerenciador de Modelos na barra de ferramentas do SQL Server Management Studio.
-- =======
-- Disable Database for Change Data Capture template
-- =======
USE MyDB
GO
EXEC sys.sp_cdc_disable_db
GO
Habilitar a Captura de Dados de Alteração para uma Tabela
Depois que um banco de dados tiver sido habilitado para a captura de dados de alteração, os db_owner membros da função de banco de dados fixa poderão criar uma instância de captura para tabelas de origem individuais usando o procedimento sys.sp_cdc_enable_tablearmazenado. Para determinar se uma tabela de origem já foi habilitada para captura de dados de alteração, examine a coluna is_tracked_by_cdc na exibição de catálogo sys.tables.
As seguintes opções podem ser especificadas ao criar uma instância de captura:
Columns in the source table to be captured.
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.
A filegroup to contain the change table.
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ções 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 Enable a Table Specifying Filegroup Option modelo para obter um exemplo mostrando o uso do parâmetro @filegroup_name .
-- =========
-- Enable a Table Specifying Filegroup Option Template
-- =========
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
A role for controlling access to a change table.
O propósito 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 desse nome será criada automaticamente. Membros de qualquer uma das funções sysadmin ou db_owner têm acesso total aos dados nas tabelas de alterações. Todos os outros usuários devem ter permissão SELECT em todas as colunas capturadas da tabela de origem. Além disso, quando um papel é especificado, os usuários que não são membros do papel sysadmin ou db_owner devem também ser membros do papel especificado.
Se você não quiser usar uma função gating, defina explicitamente o parâmetro @role_name como NULL. Consulte o Enable a Table Without Using a Gating Role modelo para obter um exemplo para habilitar uma tabela sem uma função de controle.
-- =========
-- Enable a Table Without Using a Gating Role template
-- =========
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
A function to query for net changes.
Uma instância de captura sempre incluirá uma função com valor de tabela para retornar todas as entradas de tabela de alteração que ocorreram em um intervalo definido. Essa função recebe seu nome ao adicionar o nome da instância de captura a "cdc.fn_cdc_get_all_changes_". Para obter mais informações, confira cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL).
Se o parâmetro @supports_net_changes for definido como 1, uma função de alterações líquidas também será gerada para a instância de captura. Essa função retorna apenas uma alteração para cada linha distinta alterada no intervalo especificado na chamada. Para obter mais informações, confira cdc.fn_cdc_get_net_changes_<capture_instance> (Transact-SQL).
Para dar suporte às consultas de entradas, a tabela de origem deve ter uma chave primária ou índice exclusivo para identificar linhas. Se um índice exclusivo for usado, o nome do índice deverá ser especificado com o uso do parâmetro @index_name . As colunas definidas na chave primária ou índice exclusivo deverão ser incluídas na lista de colunas de origem a serem capturadas.
Consulte o Enable a Table for All and Net Changes Queries modelo para obter um exemplo que demonstra a criação de uma instância de captura com ambas as funções de consulta.
-- =============
-- Enable a Table for All and Net Changes Queries template
-- =============
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
Observação
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 serão permitidas sem primeiro desabilitar a captura de dados de alteração para a tabela. Isso é verdadeiro quer o suporte para consultas de alterações globais tenha sido solicitado ou não durante a configuração do Change Data Capture. Se não houver nenhuma chave primária em uma tabela no momento em que ela estiver habilitada para 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 tabela ser habilitada, as colunas de chave podem ser removidas sem restrições.
Desabilitar a Captura de Dados de Alteração para uma Tabela
Os membros da função fixa de banco de dados db_owner podem remover uma instância de captura para tabelas de origem individuais usando o procedimento armazenado sys.sp_cdc_disable_table. Para determinar se uma tabela de origem está atualmente habilitada para 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 desabilitação, os trabalhos de captura de dados de alteração também serão removidos.
Se uma tabela habilitado do Change Data Capture for descartada, os metadados associados à tabela de Change Data Capture serão removidos automaticamente.
Consulte o modelo de instância de captura para desativar uma tabela, para obter um exemplo de desativação de uma tabela.
-- =====
-- Disable a Capture Instance for a Table template
-- =====
USE MyDB
GO
EXEC sys.sp_cdc_disable_table
@source_schema = N'dbo',
@source_name = N'MyTable',
@capture_instance = N'dbo_MyTable'
GO
Consulte Também
Rastrear alterações de dados (SQL Server)
Sobre o change data capture (SQL Server)
Trabalhar com Dados de Mudança (SQL Server)
Administrar e monitorar a captura de dados de alteração (SQL Server)