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:
Executar o procedimento armazenado para gerar o script para criar o wrapper.
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.