sys.fn_cdc_map_time_to_lsn(Transact-SQL)
적용 대상: SQL Server
지정된 시간 동안 cdc.lsn_time_mapping 시스템 테이블의 start_lsn
열에서 LSN(로그 시퀀스 번호) 값을 반환합니다. 이 함수를 사용하여 변경 데이터 캡처 열거형 함수 cdc.fn_cdc_get_all_changes_capture_instance 및>< cdc.fn_cdc_get_net_changes_<capture_instance> 필요한 LSN 기반 범위에 날짜/시간 범위를 체계적으로 매핑하여 해당 범위 내에서 데이터 변경 내용을 반환할 수 있습니다.
구문
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>' { 보다 작음 | 보다 작거나 같음 | 보다 작음 | 보다 작음 또는 같음 }
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_to_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을 반환합니다. 상한의 경우 관계형 연산 largest less than or equal to
자를 사용하여 자정을 해당 값으로 tran_end_time
포함하는 항목을 포함하여 해당 날짜의 모든 항목을 범위에 포함하도록 합니다. LSN 값이 다른 여러 항목이 상한으로 식별된 값을 공유하는 tran_end_time
경우 함수는 모든 항목이 포함되도록 가장 큰 LSN을 반환합니다.
사용 권한
public 역할의 멤버 자격이 필요합니다.
예제
다음 예제에서는 함수를 sys.fn_cdc_map_time_to_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