다음을 통해 공유


sys.fn_cdc_map_time_to_lsn(Transact-SQL)

지정된 시간에 대해 cdc.lsn_time_mapping 시스템 테이블의 start_lsn 열에서 LSN(로그 시퀀스 번호) 값을 반환합니다. 이 함수를 사용하면 변경 데이터 캡처 열거 함수 cdc.fn_cdc_get_all_changes_<capture_instance>cdc.fn_cdc_get_net_changes_<capture_instance>에 필요한 LSN 기반 범위로 날짜/시간 범위를 체계적으로 매핑하여 해당 범위 내의 데이터 변경을 반환할 수 있습니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

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
}

인수

  • '<relational_operator>' { largest less than | largest less than or equal | smallest greater than | smallest greater than or equal }
    tracking_time 값과 비교 시 관계를 충족하는 연관된 tran_end_time이 있는 cdc.lsn_time_mapping 테이블 내에 있는 고유한 LSN 값을 식별하는 데 사용됩니다.

    relational_operator는 nvarchar(30)입니다.

  • tracking_time
    대조할 날짜/시간 값입니다. tracking_time은 datetime입니다.

반환 형식

binary(10)

주의

sys.fn_cdc_map_time_lsn을 사용하여 날짜/시간 범위를 LSN 범위에 매핑하는 방법에 대한 이해를 위해 다음 시나리오를 살펴보겠습니다. 변경 데이터를 매일 추출하려는 고객이 있다고 가정해 보십시오. 즉, 고객은 지정된 날에 자정까지(자정 포함)의 변경 내용만 원합니다. 시간 범위의 하한은 전날 자정까지이며 자정은 포함하지 않습니다. 상한은 지정된 날의 자정까지이며 자정도 포함합니다. 다음 예에서는 sys.fn_cdc_map_time_to_lsn 함수를 사용하여 이 시간 기반 범위를 변경 데이터 캡처 열거 함수에 필요한 LSN 기반 범위에 체계적으로 매핑하여 해당 범위 내의 모든 변경 내용을 반환하는 방법을 보여 줍니다.

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');

전날 자정 이후에 발생한 변경으로만 제한하기 위해 관계형 연산자 'smallest greater than'이 사용되었습니다. 서로 다른 LSN 값을 가진 여러 항목이 cdc.lsn_time_mapping 테이블에서 하한으로 식별된 tran_end_time 값을 공유하는 경우에는 모든 항목이 포함되도록 가장 작은 LSN이 반환됩니다. 상한에는 tran_end_time 값이 자정인 항목을 포함하여 해당 일의 모든 항목이 포함되도록 관계형 연산자 ‘largest less than or equal to’가 사용되었습니다. 서로 다른 LSN 값을 가진 여러 항목이 상한으로 식별된 tran_end_time 값을 공유하는 경우에는 모든 항목이 포함되도록 가장 큰 LSN이 반환됩니다.

사용 권한

public 역할의 멤버여야 합니다.

다음 예에서는 sys.fn_cdc_map_time_lsn 함수를 사용하여 cdc.lsn_time_mapping 테이블에 자정과 같거나 큰 tran_end_time 값을 가진 행이 있는지 확인합니다. 예를 들어 이 쿼리는 캡처 프로세스가 전날 자정 때까지 커밋된 변경 내용을 이미 처리했는지 확인하여 해당 일의 변경 데이터 추출을 계속 진행하는 데 사용할 수 있습니다.

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