CDC.<capture_instance>_CT (Transact-SQL)

Aplica-se a: SQL ServerBanco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

A tabela de alterações criada quando a captura de dados de alterações é habilitada em uma tabela de origem. A tabela retorna uma linha para cada operação de inserção e exclusão executada contra a tabela de origem, e duas linhas para cada operação de atualização executada contra a tabela de origem. Quando o nome da tabela de alteração não é especificado no momento em que a tabela de origem é habilitada, o nome é derivado. O formato do nome é cdc.capture_instance_CT em que capture_instance é o nome do esquema da tabela de origem e o nome da tabela de origem no formato schema_table. Por exemplo, se a tabela Person.Address no banco de dados de exemplo AdventureWorks estiver habilitada para captura de dados de alteração, o nome da tabela de alteração derivada será cdc.Person_Address_CT.

Recomendamos que você não consulte as tabelas do sistema diretamente. Em vez disso, execute as funções cdc.fn_cdc_get_all_changes_<capture_instance> e cdc.fn_cdc_get_net_changes_<capture_instance>.

Nome da coluna Tipo de dados Descrição
__$start_lsn binary(10) LSN (número de sequência de log) associado à transação de confirmação da alteração.

Todas as alterações confirmadas na mesma transação compartilham o mesmo LSN de confirmação. Por exemplo, se uma operação de exclusão na tabela de origem remover duas linhas, a tabela de alteração conterá duas linhas, cada uma com o mesmo valor __$start_lsn .
__$end_lsn binary(10) Identificado apenas para fins informativos. Não há suporte. A compatibilidade futura não está garantida.

No SQL Server 2012 (11.x), essa coluna é sempre NULL.
__$seqval binary(10) Sequência da operação conforme representada no log de transações. Não deve ser usado para pedidos. Em vez disso, use a coluna __$command_id .
__$operation int Identifica a operação DML (linguagem de manipulação de dados) associada com a alteração. Um dos seguintes pode ser feito:

1 = excluir

2 = inserir

3 = atualizar (valores antigos)

Os dados de coluna têm valores de linha antes de executar a instrução de atualização.

4 = atualizar (valores novos)

Os dados de coluna têm valores de linha depois de executar a instrução de atualização.
__$update_mask varbinary(128) Uma máscara de bits com base nos ordinais de coluna da tabela de alteração que identificam as colunas que foram alteradas.
<colunas da tabela de origem capturada> varia As colunas restantes na tabela de alteração são as colunas da tabela de origem que foram identificadas como colunas capturadas quando a instância de captura foi criada. Se nenhuma coluna tiver sido especificada na lista de colunas capturadas, todas as colunas da tabela de origem serão incluídas nessa tabela.
__$command_id int Rastreia a ordem das operações em uma transação.

Comentários

A __$command_id coluna foi introduzida em uma atualização cumulativa nas versões 2012 a 2016. Para obter informações sobre versão e download, consulte o artigo da base de conhecimento 3030352 em CORREÇÃO: A tabela de alterações é ordenada incorretamente para linhas atualizadas depois que você habilita a captura de dados de alteração para um banco de dados do Microsoft SQL Server. Para obter mais informações, consulte A funcionalidade CDC pode ser interrompida após a atualização para a mais recente do SQL Server 2012, 2014 e 2016.

Tipos de dados da coluna capturada

As colunas capturadas incluídas nesta tabela têm o mesmo tipo de dados e valor que suas colunas de origem correspondentes com as exceções a seguir:

  • As colunas de carimbo de data/hora são definidas como binary(8).

  • As colunas de identidade são definidas como int ou bigint.

No entanto, os valores nessas colunas são iguais aos valores da coluna de origem.

Tipos de dados de objeto grande

As colunas do tipo de dados image, text e ntext sempre recebem um valor NULL quando __$operation = 1 ou __$operation = 3. As colunas do tipo de dados varbinary(max), varchar(max) ou nvarchar(max) recebem um valor NULL quando __$operation = 3, a menos que a coluna seja alterada durante a atualização. Quando __$operation = 1, essas colunas recebem seu valor no momento da exclusão. As colunas computadas incluídas em uma instância de captura sempre têm um valor de NULL.

Por padrão, o tamanho máximo que pode ser adicionado a uma coluna capturada em uma única instrução INSERT, UPDATE, WRITETEXT ou UPDATETEXT é de 65.536 bytes ou 64 KB. Para aumentar esse tamanho para oferecer suporte a dados LOB maiores, use a opção de configuração do servidor Configurar o tamanho máximo de repl de texto para especificar um tamanho máximo maior. Para obter mais informações, veja Configurar a opção max text repl size de configuração de servidor.

Modificações da linguagem de definição de dados

As modificações DDL na tabela de origem, como adicionar ou descartar colunas, são registradas na tabela cdc.ddl_history . Essas alterações não são aplicadas à tabela de alterações. Ou seja, a definição da tabela de alteração permanece constante. Ao inserir linhas na tabela de alterações, o processo de captura ignora as colunas que não aparecem na lista de colunas capturadas associada à tabela de origem. Se uma coluna aparecer na lista de colunas capturadas e não estiver mais na tabela de origem, será atribuído um valor nulo à coluna.

A alteração do tipo de dados de uma coluna na tabela de origem também é registrada na tabela cdc.ddl_history . No entanto, essa alteração modifica a definição da tabela de alteração. Os tipos de dados da coluna capturada na tabela de alteração são modificados quando o processo de captura encontrar o registro de log para a alteração de DDL feita na tabela de origem.

Se você precisar modificar o tipo de dados de uma coluna capturada na tabela de origem de forma a diminuir o tamanho do tipo de dados, use o procedimento a seguir para assegurar que a coluna equivalente na tabela de alteração poderá ser modificada com êxito.

  1. Na tabela de origem, atualize os valores na coluna a ser modificada para que se ajustem ao tamanho do tipo de dados planejado. Por exemplo, se você alterar o tipo de dados de int para smallint, atualize os valores para um tamanho que caiba no intervalo smallint, -32.768 a 32.767.

  2. Na tabela de alteração, execute a mesma operação de atualização na coluna equivalente.

  3. Altere a tabela de origem especificando o novo tipo de dados. A alteração do tipo de dados é propagada com êxito na tabela de alteração.

Modificações da linguagem de manipulação de dados

Quando as operações de inserção, atualização e exclusão forem executadas em uma tabela de origem com a captura de dados de alteração habilitada, um registro dessas operações DML aparecerão no log de transações do banco de dados. O processo de captura de dados de alteração recupera informações sobre essas alterações do log de transações e adiciona uma ou duas linhas à tabela de alterações para registrar a alteração. As entradas são adicionadas à tabela de alteração na mesma ordem em que foram confirmadas na tabela de origem. Dito isso, a confirmação de entradas da tabela de alterações normalmente deve ser executada em um grupo de alterações, em vez de executada por cada entrada.

Uma operação de inserção resulta em uma linha adicionada à tabela de alteração; Uma operação de exclusão resulta em uma linha adicionada à tabela de alterações; se o SQL Server implementar uma atualização como uma "atualização adiada", o que significa como um par de operações de exclusão e inserção, a operação de atualização resultará em duas linhas adicionadas à tabela de alterações: a primeira linha refletindo a exclusão dos dados capturados e a segunda linha refletindo a inserção dos dados capturados atualizados; se o SQL Server não implementar uma atualização como uma "atualização adiada", a operação de atualização resultará em duas linhas adicionadas à tabela de alterações: a primeira linha refletindo os dados capturados antes da atualização e a segunda linha refletindo os dados capturados após a atualização.

Na entrada da tabela de alterações, a coluna __$start_lsn é usada para registrar o LSN de confirmação associado à alteração na tabela de origem, a coluna __$command_id é usada para ordenar a alteração em sua transação e a coluna __$operation é usada para registrar a operação executada. Juntas, essas colunas de metadados podem ser usadas para garantir que a ordem de confirmação das alterações de origem será preservada. Como o processo de captura obtém suas informações de alteração do log de transações, é importante observar que as entradas da tabela de alterações não aparecem de forma síncrona com as alterações da tabela de origem correspondentes. Em vez disso, as alterações correspondentes aparecem de forma assíncrona, depois que o processo de captura processou as entradas de alteração pertinentes do log de transação.

Para as operações de inserção e exclusão, todos os bits na máscara de atualização estão definidos. Para operações de atualização, a máscara de atualização nas linhas da antiga atualização e da nova atualização será modificada para refletir as colunas alteradas durante a atualização.

Confira também

sys.sp_cdc_enable_table (Transact-SQL)
sys.sp_cdc_get_ddl_history (Transact-SQL)