Compartilhar via


sys.fn_all_changes_<capture_instance> (Transact-SQL)

Aplica-se: SQL Server

Wrappers para as funções de consulta de todas as alterações . Os scripts necessários para criar essas funções são gerados pelo sys.sp_cdc_generate_wrapper_function procedimento armazenado. Para obter mais informações sobre o procedimento armazenado usado para criar sys.fn_all_changes_<capture_instance>o , consulte sys.sp_cdc_generate_wrapper_function (Transact-SQL).

Convenções de sintaxe de Transact-SQL

Sintaxe

fn_all_changes_<capture_instance> ('start_time' ,'end_time', '<row_filter_option>' )  
  
<capture_instance> ::= The name of the capture instance.  
<row_filter_option> ::=  
{ all  
  | all update old  
}  

Argumentos

start_time

O valor datetime que representa o ponto final inferior do intervalo de entradas da tabela de alterações a serem incluídas no conjunto de resultados.

Somente as linhas na tabela de cdc.<capture_instance>_CT alterações que têm um tempo de confirmação associado maior que start_time são incluídas no conjunto de resultados.

Se um valor NULL for fornecido para este argumento, o ponto de extremidade inferior do intervalo da consulta corresponderá ao ponto de extremidade inferior de um intervalo válido para a instância de captura.

Se o valor do parâmetro @start_time ou @end_time exceder o tempo do LSN mais baixo ou do LSN mais alto, a execução das funções de wrapper geradas retornará no erro 313: Msg 313, Level 16, State 3, Line 1 An insufficient number of arguments were supplied for the procedure or function. Esse erro deve ser resolvido pelo desenvolvedor.

end_time

O valor datetime que representa o ponto final superior do intervalo de entradas da tabela de alterações a serem incluídas no conjunto de resultados.

Esse parâmetro pode assumir um dos dois significados possíveis, dependendo do valor escolhido para @closed_high_end_point quando sys.sp_cdc_generate_wrapper_function é chamado para gerar o script de criação para a função wrapper:

  • @closed_high_end_point = 1

    Somente as linhas na tabela de cdc.<capture_instance>_CT alterações que têm um tempo de confirmação associado menor ou igual a end_time são incluídas no conjunto de resultados.

  • @closed_high_end_point = 0

    Somente as linhas na tabela de cdc.capture_instance_CT alterações que têm um tempo de confirmação associado estritamente menor que end_time são incluídas no conjunto de resultados.

Se um valor NULL for fornecido para este argumento, o ponto de extremidade superior do intervalo da consulta corresponderá ao ponto de extremidade superior de um intervalo válido para a instância de captura.

Se o valor do parâmetro @start_time ou @end_time exceder o tempo do LSN mais baixo ou do LSN mais alto, a execução das funções de wrapper geradas retornará no erro 313: Msg 313, Level 16, State 3, Line 1 An insufficient number of arguments were supplied for the procedure or function. Esse erro deve ser resolvido pelo desenvolvedor.

<> row_filter_option ::= { all | all update old }

Um opção que rege o conteúdo das colunas de metadados e as linhas retornadas no conjunto de resultados.

Pode ser uma das seguintes opções:

all
Retorna todas as alterações do intervalo LSN especificado. Para alterações que ocorrem devido a uma operação de atualização, essa opção retorna apenas a linha que contém os novos valores após a aplicação da atualização.

all update old
Retorna todas as alterações do intervalo LSN especificado. Para alterações que ocorrem devido a uma operação de atualização, essa opção retorna duas linhas que contêm os valores de coluna de antes e depois da atualização.

Tabela retornada

Nome da coluna Tipo de coluna Descrição
__CDC_STARTLSN binary(10) O LSN de confirmação da transação que é associado à alteração. Todas as alterações confirmadas na mesma transação compartilham o mesmo LSN de confirmação.
__CDC_SEQVAL binary(10) Valor de sequência usado para organizar as alterações de linha em uma transação.
<colunas de @column_list> varia As colunas identificadas no argumento column_list para sp_cdc_generate_wrapper_function quando ele é chamado para gerar o script que cria a função wrapper.
__CDC_OPERATION nvarchar(2) Um código de operação que indica qual operação é necessária para aplicar a linha ao ambiente de destino. Ele variará de acordo com o valor do argumento row_filter_option fornecido na chamada:

row_filter_option = 'todos'

'D' – exclui a operação

'I' – insere a operação

'UN' – atualiza os novos valores da operação

row_filter_option = 'todas as atualizações antigas'

'D' – exclui a operação

'I' – insere a operação

'UN' – atualiza os novos valores da operação

'UO' – atualiza os valores antigos da operação
<colunas de @update_flag_list> bit Um sinalizador de bit é nomeado anexando _uflag ao nome da coluna. O sinalizador é sempre definido como NULL quando __CDC_OPERATION é 'D', 'I', de 'UO'. Quando __CDC_OPERATION é 'UN', ele é definido como 1 se a atualização produziu uma alteração na coluna correspondente. Caso contrário, será 0.

Comentários

A fn_all_changes_<capture_instance> função serve como um wrapper para a cdc.fn_cdc_get_all_changes_<capture_instance> função de consulta. O sys.sp_cdc_generate_wrapper procedimento armazenado é usado para gerar o script para criar o wrapper.

As funções de wrapper não são criadas automaticamente. Há duas coisas que você precisa fazer para criar funções de wrapper:

  1. Executar o procedimento armazenado para gerar o script para criar o wrapper.

  2. Executar o script para realmente criar a função de wrapper.

As funções de wrapper permitem que os usuários consultem sistematicamente as alterações que ocorreram dentro de um intervalo limitado por valores datetime em vez de valores LSN. As funções de wrapper executam todas as conversões necessárias entre os valores de data e hora fornecidos e os valores LSN necessários internamente como argumentos para as funções de consulta. Quando as funções de wrapper são usadas em série para processar um fluxo de dados de alteração, elas garantem que nenhum dado seja perdido ou repetido, desde que a seguinte convenção seja seguida: o @end_time valor do intervalo associado a uma chamada é fornecido como o @start_time valor do intervalo associado à chamada subsequente.

Usando o parâmetro @closed_high_end_point ao criar o script, você pode gerar wrappers para oferecer suporte a um limite superior fechado ou a um limite superior em aberto na janela de consulta especificada. Ou seja, você pode decidir se as entradas que têm uma hora de confirmação igual ao limite superior do intervalo de extração devem ser incluídas no intervalo. Por padrão, o limite superior é incluído.

O conjunto de resultados retornado pela função wrapper all changes retorna as colunas __$start_lsn e __$seqval da tabela de alterações como colunas __CDC_STARTLSN e __CDC_SEQVAL, respectivamente. Ele segue apenas com as colunas controladas que apareceram no parâmetro @column_list quando o wrapper foi gerado. Se @column_list for NULL, todas as colunas de origem controladas serão retornadas. As colunas de origem são acompanhadas por uma coluna de operação, __CDC_OPERATION, que é uma coluna de um ou dois caracteres que identifica a operação.

Em seguida, os sinalizadores de bit são acrescentados ao conjunto de resultados para cada coluna identificada no parâmetro @update_flag_list. Para o wrapper all changes , os sinalizadores de bits sempre serão NULL se __CDC_OPERATION for 'D', 'I' ou 'UO'. Se __CDC_OPERATION for 'UN', o sinalizador será definido como 1 ou 0, dependendo se a operação de atualização causou uma alteração na coluna.

O modelo de configuração de captura de dados de alteração 'Instanciar TVFs de wrapper CDC para esquema' mostra como usar o sp_cdc_generate_wrapper_function procedimento armazenado para obter scripts CREATE para todas as funções de wrapper para as funções de consulta definidas de um esquema. Em seguida, o modelo cria esses scripts. Para obter mais informações sobre modelos, consulte Gerenciador de Modelos.

O wrapper funciona sys.fn_all_changes_<capture_instance> e sys.fn_net_changes_<capture_instance> depende das funções cdc.fn_cdc_get_all_changes_<capture_instance> do sistema e cdc.fn_cdc_get_net_changes_<capture_instance>do . O erro 313 é esperado se o intervalo LSN fornecido não for apropriado ao chamar cdc.fn_cdc_get_all_changes_<capture_instance> ou cdc.fn_cdc_get_net_changes_<capture_instance>. Se o lsn_value parâmetro estiver além do tempo do LSN mais baixo ou do LSN mais alto, a execução dessas funções retornará no erro 313: Msg 313, Level 16, State 3, Line 1 An insufficient number of arguments were supplied for the procedure or function. Esse erro deve ser resolvido pelo desenvolvedor.

Confira também