sys.fn_cdc_map_time_to_lsn (Transact-SQL)
Aplica-se: SQL Server
Retorna o valor do LSN (número de sequência de log) da start_lsn
coluna na tabela do sistema cdc.lsn_time_mapping para o tempo especificado. Você pode usar essa função para mapear sistematicamente intervalos de data e hora no intervalo baseado em LSN necessário para as funções de enumeração de captura de dados de alteração cdc.fn_cdc_get_all_changes_<capture_instance> e cdc.fn_cdc_get_net_changes_<capture_instance> para retornar alterações de dados dentro desse intervalo.
Convenções de sintaxe de 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 menor que | maior menor ou igual | menor maior que | menor maior ou igual }
Usado para identificar um valor LSN distinto na cdc.lsn_time_mapping
tabela com um associado tran_end_time
que satisfaz a relação quando comparado ao valor tracking_time .
relational_operator é nvarchar(30).
tracking_time
É o valor de data e hora ao qual corresponder. tracking_time é datetime.
Tipo de retorno
binary(10)
Comentários
Para entender como a sys.fn_cdc_map_time_to_lsn
função pode ser usada para mapear intervalos de data e hora para intervalos LSN, considere o cenário a seguir.
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 para o intervalo baseado em LSN necessário para que as funções de enumeração de captura de dados de alteração retornem todas as alterações dentro 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 smallest greater than
relacional é usado para restringir as alterações àquelas que ocorreram após a meia-noite do dia anterior. Se várias entradas com valores LSN diferentes compartilharem o tran_end_time
valor identificado como o limite inferior na tabela cdc.lsn_time_mapping , a função retornará o menor LSN, garantindo que todas as entradas sejam incluídas. Para o limite superior, o operador largest less than or equal to
relacional é usado para garantir que o intervalo inclua todas as entradas do dia, incluindo aquelas que têm meia-noite como valor tran_end_time
. Se várias entradas com valores LSN diferentes compartilharem o tran_end_time
valor identificado como o limite superior, a função retornará o maior LSN, garantindo que todas as entradas sejam incluídas.
Permissões
Requer associação à função pública .
Exemplos
O exemplo a seguir usa a sys.fn_cdc_map_time_to_lsn
função para determinar se há linhas na tabela cdc.lsn_time_mapping com um tran_end_time
valor maior 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