cdc.<capture_instance>_CT (Transact-SQL)

É a tabela de alteração criada quando os dados de alteração capturados são habilitados 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 for especificado no momento em que a tabela de origem for habilitada, o nome será derivado. O formato do nome é cdc.capture_instance_CT onde capture_instance é o nome de esquema da tabela de origem e o nome de 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 de tabela de alteração derivado seria cdc.Person_Address_CT.

É recomendável não consultar 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 seqüê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 qual com o mesmo valor de __$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 2008, esta coluna é sempre NULL.

__$seqval

binary(10)

Valor de seqüência usado para ordenar as alterações de linha em uma transação.

__$operation

int

Identifica a operação DML (linguagem de manipulação de dados) associada com a alteração. Pode ser uma destas opções:

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 capturadas>>

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.

Comentários

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 Timestamp são definidas como binary(8).

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

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

Nesta versão, não é oferecido suporte aos tipos de dados introduzidos no SQL Server 2008.

Tipos de dados de objeto grande

Para os tipos de dados LOB varchar(max), nvarchar(max), varbinary(max), image, text, ntexte xml, o valor antigo só será exibido na linha anterior de atualização se a coluna de fato tiver sido alterada durante a atualização. Para outros tipos de dados, o valor de coluna sempre será exibido nas duas linhas de atualização.

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 a fim de fornecer suporte a dados LOB maiores, use a opção max text repl size para especificar um tamanho máximo maior. Para obter mais informações, consulte Como configurar a opção max text repl size (SQL Server Management Studio).

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

As modificações de DDL na tabela de origem, como adicionar ou descartar colunas, são registradas na tabela cdc.ddl_history. Essas alterações não serã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ção, o processo de captura ignora as colunas que não aparecem na lista de colunas capturadas associadas à 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 tabelacdc.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 a um tamanho que se ajuste 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 alterações do log de transações e insere uma ou duas linhas na tabela de alteração 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, embora a confirmação das entradas da tabela de alterações normalmente deva ser feita em um grupo de alterações e não para uma única entrada.

Na entrada da tabela de alteração, a coluna __$start_lsn é usada para registrar o LSN de confirmação associado à alteração na coluna de origem, e a coluna __$seqval é usada para ordenar a alteração em sua transação. 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 as informações sobre alterações do log de transações, é importante observar que as entradas da tabela de alteração não aparecem de forma sincronizada com as alterações da tabela de origem correspondente. 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.