다음을 통해 공유


<sys.fn_net_changes_capture_instance>(Transact-SQL)

적용 대상: SQL Server

순 변경 쿼리 함수에 대한 래퍼입니다. 이러한 함수를 만드는 데 필요한 스크립트는 저장 프로시저에서 sys.sp_cdc_generate_wrapper_function 생성됩니다. 만드는 sys.fn_net_changes_<capture_instance>데 사용되는 저장 프로시저에 대한 자세한 내용은 sys.sp_cdc_generate_wrapper_function(Transact-SQL)를 참조하세요.

Transact-SQL 구문 표기 규칙

구문

  
fn_net_changes_<capture_instance> ('start_time', 'end_time', '<row_filter_option>' )  
  
<capture_instance> ::= The name of the capture instance.  
<row_filter_option> ::=  
{ all  
  | all with mask  
  | all with merge  
}  

인수

start_time

결과 집합에 포함할 변경 테이블 항목 범위의 하위 엔드포인트를 나타내는 datetime 값입니다.

연결된 커밋 시간이 start_time 보다 엄격하게 큰 변경 테이블의 행 cdc.<capture_instance>_CT 만 결과 집합에 포함됩니다.

이 인수에 값 NULL을 제공하면 쿼리 범위의 하위 엔드포인트가 캡처 인스턴스에 대해 유효한 범위의 하위 엔드포인트에 대응됩니다.

@start_time 또는 @end_time 매개 변수 값이 가장 낮은 LSN 또는 가장 높은 LSN의 시간을 초과하면 생성된 래퍼 함수의 실행은 오류 313 Msg 313, Level 16, State 3, Line 1 An insufficient number of arguments were supplied for the procedure or function에서 반환됩니다. 이 오류는 개발자가 처리해야 합니다.

end_time

결과 집합에 포함할 변경 테이블 항목 범위의 상위 엔드포인트를 나타내는 datetime 값입니다.

이 매개 변수는 래퍼 함수를 만드는 스크립트를 생성하기 위해 호출되는 경우에 sys.sp_cdc_generate_wrapper_function 대해 @closed_high_end_point 선택한 값에 따라 두 가지 의미 중 하나를 사용할 수 있습니다.

  • @closed_high_end_point = 1

    값이 __$start_lsn이고 해당 커밋 시간이 start_time 미만인 변경 테이블의 행 cdc.<capture_instance>_CT 만 결과 집합에 포함됩니다.

  • @closed_high_end_point = 0

    값이 __$start_lsn이고 해당 커밋 시간이 start_time 미만인 변경 테이블의 행 cdc.<capture_instance>_CT 만 결과 집합에 포함됩니다.

이 인수에 대해 NULL 값을 제공하는 경우 쿼리 범위의 상위 엔드포인트는 캡처 인스턴스에 유효한 범위의 상위 엔드포인트에 해당합니다.

@start_time 또는 @end_time 매개 변수 값이 가장 낮은 LSN 또는 가장 높은 LSN의 시간을 초과하면 생성된 래퍼 함수의 실행은 오류 313 Msg 313, Level 16, State 3, Line 1 An insufficient number of arguments were supplied for the procedure or function에서 반환됩니다. 이 오류는 개발자가 처리해야 합니다.

<> row_filter_option ::= { all | 모두 마스크 | 모두 병합 }

메타데이터 열의 내용과 결과 집합에서 반환된 행을 제어하는 옵션입니다. 다음 옵션 중 하나일 수 있습니다.

all
콘텐츠 열에서 변경된 행의 최종 내용과 메타데이터 열 __CDC_OPERATION 행을 적용하는 데 필요한 작업을 반환합니다.

모두 마스크가 있는 경우
내용 열에서 변경된 모든 행의 최종 내용은 물론 메타데이터 열 __CDC_OPERATION에서 각 행을 적용하는 데 필요한 작업을 반환합니다. 래퍼 함수를 만드는 스크립트를 생성할 때 업데이트 플래그 목록이 지정되면 업데이트 마스크를 채우기 위해 이 옵션이 필요합니다.

모두 병합
내용 열에서 변경된 모든 행의 최종 내용을 반환합니다.

__CDC_OPERATION 열은 다음 두 값 중 하나입니다.

  • 행을 삭제해야 하는 경우 D입니다.

  • 행을 삽입하거나 업데이트해야 하는 경우 M입니다.

대상에 변경 사항을 적용하기 위해 삽입 또는 업데이트가 필요한지 여부를 결정하는 논리는 쿼리 복잡성을 더합니다. 삽입 작업과 업데이트 작업을 구분할 필요가 없는 경우 성능을 향상시키려면 이 옵션을 사용합니다. 이 방법은 병합 작업을 직접 사용할 수 있는 대상 환경에서 가장 적합합니다.

반환된 테이블

열 이름 열 유형 설명
<열의 @column_list> 다양함 래퍼를 만드는 스크립트를 생성하기 위해 호출될 때의 column_list 인수에서 식별되는 열 sp_cdc_generate_wrapper_function 입니다. column_list NULL이면 추적된 모든 원본 열이 결과 집합에 표시됩니다.
__CDC_OPERATION nvarchar(2) 대상 환경에 행을 적용하는 데 필요한 작업을 나타내는 작업 코드입니다. 작업은 다음 호출에서 제공되는 인수 row_filter_option 값에 따라 달라집니다.

row_filter_option = 'all', '모두 마스크'

'D' - 삭제 작업

'I' - 삽입 작업

'UN' - 업데이트 작업

row_filter_option = '모두 병합'

'D' - 삭제 작업

'M' - 삽입 작업 또는 업데이트 작업
<열의 @update_flag_list> bit 열 이름에 _uflag 추가하여 이름을 지정하는 비트 플래그입니다. 플래그는 row_filter_option = '모두 마스크' 및 __CDC_OPERATION = 'UN'인 경우에만 NULL이 아닌 값을 사용합니다. 쿼리 창 내에서 해당 열이 수정된 경우 이 플래그는 1로 설정됩니다. 그렇지 않은 경우, 0.

설명

이 함수는 fn_net_changes_<capture_instance> 쿼리 함수의 cdc.fn_cdc_get_net_changes_<capture_instance> 래퍼 역할을 합니다. sys.sp_cdc_generate_wrapper 저장 프로시저는 래퍼에 대한 스크립트를 만드는 데 사용됩니다.

래퍼 함수는 자동으로 만들어지지 않습니다. 래퍼 함수를 만들려면 다음 두 가지 작업을 수행해야 합니다.

  1. 래퍼 생성 스크립트를 만드는 저장 프로시저를 실행합니다.

  2. 스크립트를 실행하여 실제로 래퍼 함수를 만듭니다.

래퍼 함수를 사용하면 사용자가 LSN 값이 아닌 datetime 값으로 제한된 간격 내에 발생한 변경 내용을 체계적으로 쿼리할 수 있습니다. 래퍼 함수는 제공된 datetime 값과 내부적으로 쿼리 함수에 대한 인수로 필요한 LSN 값 간에 필요한 모든 변환을 수행합니다. 변경 데이터 스트림을 처리하기 위해 래퍼 함수가 직렬로 사용된 경우 특정 호출과 연결된 간격의 @end_time 값이 후속 호출과 연결된 간격의 @start_time 값으로 제공된다는 규칙을 준수하면 데이터가 손실되거나 반복되지 않습니다.

스크립트를 만들 때 매개 변수를 @closed_high_end_point 사용하여 지정된 쿼리 창에서 닫힌 상한 또는 열린 상한을 지원하는 래퍼를 생성할 수 있습니다. 즉, 커밋 시간이 추출 간격의 상한과 같은 항목을 간격에 포함할지 여부를 결정할 수 있습니다. 기본적으로 상한이 포함됩니다.

순 변경 래퍼 함수에서 반환되는 결과 집합은 래퍼가 생성되었을 때 추적된 열 @column_list 만 반환합니다. NULL인 경우 @column_list 추적된 모든 원본 열이 반환됩니다. 원본 열 뒤에는 작업을 식별하는 한 문자 또는 두 문자 열인 작업 열 __CDC_OPERATION이 옵니다.

그런 다음, 매개 변수 @update_flag_list에서 식별되는 각 열의 결과 집합에 비트 플래그가 추가됩니다. net 변경 래퍼의 경우 래퍼 함수 호출에 사용되는 비트 플래그가 'all' 또는 'all with merge'인 경우 @row_filter_option 항상 NULL이 됩니다. @row_filter_option'모두 마스크'로 설정되고 __CDC_OPERATION 'D' 또는 'I'이면 플래그 값도 NULL이 됩니다. __CDC_OPERATION 'UN'인 경우 순 업데이트 작업으로 인해 열이 변경되었는지 여부에 따라 플래그가 1 또는 0으로 설정됩니다.

변경 데이터 캡처 구성 템플릿 '스키마용 CDC 래퍼 TVF 인스턴스화'는 저장 프로시저를 사용하여 sp_cdc_generate_wrapper_function 스키마의 정의된 쿼리 함수에 대한 모든 래퍼 함수에 대한 CREATE 스크립트를 가져오는 방법을 보여 줍니다. 그런 다음 템플릿은 해당 스크립트를 만듭니다. 템플릿에 대한 자세한 내용은 템플릿 탐색기를 참조하세요.

래퍼 함수는 sys.fn_all_changes_<capture_instance> 시스템 함수 및 sys.fn_net_changes_<capture_instance> cdc.fn_cdc_get_net_changes_<capture_instance>.에 종속됩니다cdc.fn_cdc_get_all_changes_<capture_instance>. 제공된 LSN 범위가 호출 cdc.fn_cdc_get_all_changes_<capture_instance> 하거나 cdc.fn_cdc_get_net_changes_<capture_instance>호출할 때 적절하지 않은 경우 오류 313이 필요합니다. 매개 변수가 lsn_value 가장 낮은 LSN 또는 가장 높은 LSN의 시간을 초과하면 이러한 함수를 실행하면 오류 313 Msg 313, Level 16, State 3, Line 1 An insufficient number of arguments were supplied for the procedure or function이 반환됩니다. 이 오류는 개발자가 처리해야 합니다.

참고 항목