Compartilhar via


sys.fn_cdc_map_time_to_lsn (Transact-SQL)

Retorna o valor LSN (número de seqüência de log) da coluna start_lsn na tabela do sistema cdc.lsn_time_mapping na hora especificada. Você pode usar essa função para mapear sistematicamente intervalos de datetime dentro do intervalo com base no LSN necessário às funções de enumeração do Change Data Capturecdc.fn_cdc_get_all_changes_<capture_instance> e cdc.fn_cdc_get_net_changes_<capture_instance> para retornar alterações de dados naquele intervalo.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

sys.fn_cdc_map_time_to_lsn ('<relational_operator>', tracking_time )

<relational_operator> ::=
{  largest less than
 | largest less than or equal
 | smallest greater than
 | smallest greater than or equal
}

Argumentos

  • '<relational_operator>' { maior menos que | maior menos que ou igual | menor maior que | menor maior que ou igual }
    É usado para identificar um valor do LSN distinto dentro da tabela cdc.lsn_time_mapping com um tran_end_time associado que satisfaz a relação quando comparado ao valor tracking_time.

    relational_operator é nvarchar(30).

  • tracking_time
    É o valor de data e hora a ser comparado com tracking_time é datetime.

Tipo de retorno

binary(10)

Comentários

Para entender como o sys.fn_cdc_map_time_lsn pode ser usado para mapear intervalos de data e hora para intervalos LSN, considere o seguinte cenário. Presuma que um consumidor queira extrair dados de alteração diariamente. Ou seja, o consumidor deseja apenas as alterações de um determinado dia até a meia-noite. O limite inferior do intervalo de tempo deve ir até, mas não incluir, a meia-noite do dia anterior. O limite superior deve ir até e incluir a meia-noite do dia determinado. O exemplo a seguir mostra como a função sys.fn_cdc_map_time_to_lsn pode ser usada para mapear sistematicamente esse intervalo baseado em tempo no intervalo baseado em LSN requerido pelas funções de enumeração do Change Data Capture para retornar todas as alterações desse intervalo.

DECLARE @begin\_time datetime, @end\_time datetime, @begin\_lsn binary(10), @end\_lsn binary(10);

SET @begin\_time = '2007-01-01 12:00:00.000';

SET @end\_time = '2007-01-02 12:00:00.000';

SELECT @begin\_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than', @begin\_time);

SELECT @end\_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', @end\_time);

SELECT * FROM cdc.fn_cdc_get_net_changes_HR_Department(@begin_lsn, @end\_lsn, 'all');

O operador relacional 'smallest greater than' é usado para restringir mudanças àquelas que ocorrem após a meia-noite do dia anterior. Se várias entradas com valores LSN diferentes compartilharem o valor tran_end_time identificado como o limite inferior na tabela cdc.lsn_time_mapping, a função retornará o menor LSN, garantindo assim que todas as entradas foram incluídas. Para o limite superior, o operador relacional 'largest less than or equal to' é usado para assegurar que o intervalo inclui todas as entradas para o dia, incluindo aquelas que tem meia-noite como seu valor tran_end_time. Se várias entradas com diferentes valores LSN compartilharem o valor tran_end_time identificado como o limite superior, a função retornará o maior LSN assegurando que todas as entradas foram incluídas.

Permissões

Requer associação na função public.

Exemplos

O exemplo a seguir usa a função sys.fn_cdc_map_time_lsn para determinar se há alguma linha na tabela cdc.lsn_time_mapping com um valor tran_end_time que seja maior que ou igual a meia-noite. Essa consulta pode ser usada para determinar, por exemplo, se o processo de captura já processou as alterações confirmadas desde meia-noite do dia anterior, de forma que a extração de dados de alteração para esse dia possa prosseguir.

DECLARE @extraction_time datetime, @lsn binary(10);
SET @extraction_time = '2007-01-01 12:00:00.000';
SELECT @lsn = sys.fn_cdc_map_time_to_lsn ('smallest greater than or equal', @extraction_time);
IF @lsn IS NOT NULL
BEGIN
<some action>
END