Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
A tabela de alterações criada quando a captura de dados de alteração está ativada numa tabela de origem. A tabela devolve uma linha para cada operação de inserção e eliminação realizada contra a tabela de origem, e duas linhas para cada operação de atualização realizada contra a tabela de origem. Quando o nome da tabela de alteração não é especificado no momento em que a tabela de origem é ativada, o nome é derivado. O formato do nome é cdc. capture_instance_CT onde 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 na base de dados de exemplo AdventureWorks estiver ativada para captura de dados de alteração, o nome derivado da tabela de alterações será cdc.Person_Address_CT.
Recomendamos que não consulte diretamente as tabelas do sistema. 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 | Description |
|---|---|---|
| __$start_lsn | binary(10) | Número de sequência logarítmica (LSN) associado à transação de commit para a alteração. Todas as alterações comprometidas na mesma transação partilham o mesmo LSN de commit. Por exemplo, se uma operação de eliminação na tabela de origem remover duas linhas, a tabela de alterações contém duas linhas, cada uma com o mesmo valor __$start_lsn . |
| __$end_lsn | binary(10) | Identificado apenas para fins informativos. Não suportado. A compatibilidade futura não é garantida. No SQL Server 2012 (11.x), esta coluna é sempre NULL. |
| __$seqval | binary(10) | Sequência da operação representada no registo de transações. Não deve ser usado para encomendas. Em vez disso, use a coluna __$command_id . |
| __$operação | int | Identifica a operação de linguagem de manipulação de dados (DML) associada à alteração. Pode ser um dos seguintes: 1 = eliminar 2 = inserir 3 = atualização (valores antigos) Os dados das colunas têm valores de linha antes de executar a instrução update. 4 = atualização (novos valores) Os dados da coluna têm valores de linha após a execução da instrução update. |
| __$update_mask | varbinary(128) | Uma máscara de bits baseada nos ordinais das colunas da tabela de alterações que identifica as colunas que mudaram. |
| <Colunas da tabela de fonte capturadas> | varia | As colunas restantes na tabela de alterações 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 for especificada na lista de colunas capturada, todas as colunas da tabela de origem são incluídas nesta tabela. |
| __$command_id | int | Acompanha a ordem das operações dentro de uma transação. |
Observações
A __$command_id coluna foi introduzida numa atualização cumulativa nas versões de 2012 a 2016. Para informações sobre versões e download, consulte o artigo da KB 3030352 em FIX: A tabela de alterações está incorretamente ordenada para linhas atualizadas após ativar a captura de dados de alterações para uma base de dados Microsoft SQL Server. Para mais informações, consulte a funcionalidade CDC pode avariar após a atualização para a versão mais recente do SQL Server 2012, 2014 e 2016.
Tipos de Dados de Coluna Capturados
As colunas capturadas incluídas nesta tabela têm o mesmo tipo de dado e valor que as respetivas colunas de origem, com as seguintes exceções:
As colunas de carimbo temporal são definidas como binária(8).
As colunas de identidade são definidas como int ou bigint.
No entanto, os valores nestas colunas são os mesmos que os valores das colunas de origem.
Tipos de Dados de Objetos Grandes
Colunas de tipo de dado image, text e ntext são sempre atribuídas a um valor NULL quando __$operation = 1 ou __$operation = 3. Colunas de tipo de dados varbinary(max), varchar(max) ou nvarchar(max) recebem um valor NULL quando __$operation = 3, a menos que a coluna tenha mudado durante a atualização. Quando __$operação = 1, estas colunas recebem o seu valor no momento da eliminação. As colunas computadas que são incluídas numa instância de captura têm sempre um valor de NULL.
Por defeito, o tamanho máximo que pode ser adicionado a uma coluna capturada numa única instrução INSERT, UPDATE, WRITETEXT ou UPDATETEXT é de 65.536 bytes ou 64 KB. Para aumentar este tamanho e suportar dados LOB maiores, use a opção Configurar o tamanho máximo de texto da repl Configuração do Servidor para especificar um tamanho máximo maior. Para mais informações, consulte Configurar o tamanho máximo de repl de texto Opção de Configuração do Servidor.
Modificações na Linguagem de Definição de Dados
As modificações DDL à tabela de origem, como adicionar ou eliminar colunas, são registadas na tabela cdc.ddl_history . Estas alterações não são aplicadas à tabela de alterações. Ou seja, a definição da tabela de alterações mantém-se constante. Ao inserir linhas na tabela de mudança, 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 capturada que já não está na tabela de origem, a coluna recebe um valor nulo.
A alteração do tipo de dados de uma coluna na tabela de origem também é registada na tabela cdc.ddl_history . No entanto, esta alteração altera a definição da tabela de alteração. O tipo de dado da coluna capturada na tabela de alterações é modificado quando o processo de captura encontra o registo de registo de registo para a alteração DDL feita na tabela de origem.
Se precisar de modificar o tipo de dado de uma coluna capturada na tabela de origem de forma a diminuir o tamanho do tipo de dado, utilize o procedimento seguinte para garantir que a coluna equivalente na tabela de alterações pode ser modificada com sucesso.
Na tabela de origem, atualize os valores na coluna a serem modificados para se ajustarem ao tamanho planeado do tipo de dados. Por exemplo, se mudares o tipo de dado de int para smallint, atualiza os valores para um tamanho que se encaixe no intervalo smallint , -32.768 para 32.767.
Na tabela de mudanças, execute a mesma operação de atualização para a coluna equivalente.
Altere a tabela de origem especificando o novo tipo de dado. A alteração do tipo de dado é propagada com sucesso para a tabela de alterações.
Modificações da Linguagem de Manipulação de Dados
Quando são realizadas operações de inserção, atualização e eliminação numa tabela de origem ativada pela captura de dados de alteração, um registo dessas operações DML aparece no registo de transações da base de dados. O processo de captura de dados de alterações recupera informações sobre essas alterações do registo de transações e adiciona uma ou duas linhas à tabela de alterações para registar a alteração. As entradas são adicionadas à tabela de alterações pela mesma ordem em que foram registadas na tabela de origem. Dito isto, o commit das entradas da tabela de alterações deve normalmente ser realizado num grupo de alterações em vez de ser realizado por cada entrada.
Uma operação de inserção resulta na adição de uma linha à tabela de alterações; uma operação de eliminação resulta na adição de uma linha à tabela de alteração; se o SQL Server implementar uma atualização como uma "atualização diferida", o que significa que, como um par de operações de eliminação e inserção, a operação de atualização resulta em duas linhas adicionadas à tabela de alterações: a primeira linha refletindo a eliminação dos dados capturados, e a segunda linha refletindo a inserção dos dados atualizados e capturados; se o SQL Server não implementar uma atualização como uma "atualização diferida", a operação de atualização resulta em duas linhas adicionadas à tabela de alteração: a primeira linha refletindo os dados capturados antes da atualização e a segunda linha refletindo os dados capturados após a atualização.
Dentro da entrada da tabela de alteração, a coluna __$start_lsn é usada para registar o LSN de commit associado à alteração da tabela de origem, a coluna __$command_id é usada para ordenar a alteração dentro da sua transação, e a coluna __$operation é usada para registar a operação realizada. Em conjunto, estas colunas de metadados podem ser usadas para garantir que a ordem de commit das alterações de origem é preservada. Como o processo de captura obtém a sua informação de alteração a partir do registo de transações, é importante notar que as entradas da tabela de alterações não aparecem sincronizadas com as respetivas alterações da tabela de origem. Em vez disso, as alterações correspondentes aparecem assíncronas, depois de o processo de captura ter processado as entradas de alterações relevantes do registo de transações.
Para operações de inserção e eliminação, todos os bits da máscara de atualização estão definidos. Para operações de atualização, a máscara de atualização tanto na linha de atualização antiga como na de atualização nova será modificada para refletir as colunas que mudaram durante a atualização.
Ver também
sys.sp_cdc_enable_table (Transact-SQL)
sys.sp_cdc_get_ddl_history (Transact-SQL)