cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL)

적용 대상:SQL Server

지정된 LSN(로그 시퀀스 번호) 범위 내의 원본 테이블에 적용된 각 변경 내용에 대해 하나의 행을 반환합니다. 간격 동안 원본 행에 여러 변경 내용이 있는 경우 각 변경 내용은 반환된 결과 집합에 표시됩니다. 변경 데이터를 반환하는 것 외에도 4개의 메타데이터 열은 변경 내용을 다른 데이터 원본에 적용하는 데 필요한 정보를 제공합니다. 행 필터링 옵션은 결과 집합에 반환되는 행 및 메타데이터 열의 내용을 제어합니다. 'all' 행 필터 옵션을 지정하면 각 변경 내용에 변경 사항을 식별할 행이 정확히 한 개 있습니다. '모든 이전 업데이트' 옵션을 지정하면 업데이트 작업은 업데이트 전에 캡처된 열의 값을 포함하고 다른 하나는 업데이트 후 캡처된 열의 값을 포함하는 두 개의 행으로 표시됩니다.

이 열거형 함수는 원본 테이블이 변경 데이터 캡처를 사용하도록 설정된 시점에 만들어집니다. 함수 이름은 파생되며 원본 테이블이 변경 데이터 캡처를 사용하도록 설정된 경우 capture_instance 캡처 인스턴스에 대해 지정된 값인 형식 cdc.fn_cdc_get_all_changes_<capture_instance> 을 사용합니다.

Transact-SQL 구문 표기 규칙

구문

  
cdc.fn_cdc_get_all_changes_capture_instance ( from_lsn , to_lsn , '<row_filter_option>' )  
  
<row_filter_option> ::=  
{ all  
 | all update old  
}  

인수

from_lsn

결과 집합에 포함할 LSN 범위의 하위 엔드포인트를 나타내는 LSN 값입니다. from_lsn binary(10)입니다.

cdc의 행만.[ capture_instance]_CT이 __$start_lsn from_lsn 보다 크거나 같은 변경 테이블이 결과 집합에 포함됩니다.

to_lsn

결과 집합에 포함할 LSN 범위의 상위 엔드포인트를 나타내는 LSN 값입니다. to_lsn binary(10)입니다.

cdc의 행만.[ capture_instance]_CT이 __$start_lsn from_lsn 크거나 같고 to_lsn 이하인 변경 테이블이 결과 집합에 포함됩니다.

<> row_filter_option ::= { all | all update old }

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

다음 옵션 중 하나일 수 있습니다.

all
지정된 LSN 범위 내의 모든 변경 내용을 반환합니다. 업데이트 작업으로 인한 변경 내용의 경우 이 옵션은 업데이트가 적용된 후에 새 값이 포함된 행만 반환합니다.

all update old
지정된 LSN 범위 내의 모든 변경 내용을 반환합니다. 업데이트 작업으로 인한 변경의 경우 업데이트 전 열 값을 포함하는 행과 업데이트 후 열 값을 포함하는 행을 모두 반환합니다.

반환된 테이블

열 이름 데이터 형식 설명
__$start_lsn binary(10) 변경의 커밋 순서를 유지하는 변경 내용과 연결된 LSN을 커밋합니다. 동일한 트랜잭션에서 커밋된 변경의 커밋 LSN 값은 동일합니다.
__$seqval binary(10) 트랜잭션 내의 행에 대한 변경 내용을 정렬하는 데 사용되는 시퀀스 값입니다.
__$operation int 변경 데이터의 행을 대상 데이터 원본에 적용하는 데 필요한 DML(데이터 조작 언어) 작업을 식별합니다. 다음 중 하나일 수 있습니다.

1 = 삭제

2 = 삽입

3 = 업데이트(캡처된 열 값은 업데이트 작업 전의 값)입니다. 이 값은 행 필터 옵션 '모든 이전 업데이트'를 지정한 경우에만 적용됩니다.

4 = 업데이트(캡처된 열 값은 업데이트 작업 후의 값임)
__$update_mask varbinary(128) 캡처 인스턴스에 대해 식별된 각 캡처된 열에 해당하는 비트가 있는 비트 마스크입니다. 이 값은 __$operation = 1 또는 2일 때 정의된 모든 비트가 1로 설정됩니다. __$operation = 3 또는 4이면 변경된 열에 해당하는 비트만 1로 설정됩니다.
<captured source table columns> {b>상황에 따라 다름 함수에서 반환된 나머지 열은 캡처 인스턴스를 만들 때 식별되는 캡처된 열입니다. 캡처된 열 목록에 열이 지정되지 않은 경우 원본 테이블의 모든 열이 반환됩니다.

사용 권한

sysadmin 고정 서버 역할 또는 db_owner 고정 데이터베이스 역할의 멤버 자격이 필요합니다. 다른 모든 사용자의 경우 원본 테이블의 모든 캡처된 열에 대해 SELECT 권한이 필요하며 캡처 인스턴스에 대한 게이팅 역할이 정의된 경우 해당 데이터베이스 역할의 멤버 자격이 필요합니다. 호출자에게 원본 데이터를 볼 수 있는 권한이 없는 경우 함수는 오류 229를 반환합니다. The SELECT permission was denied on the object 'fn_cdc_get_all_changes_...', database '\<DatabaseName>', schema 'cdc'.

설명

데이터 형식 이미지, 텍스트ntext의 열은 __$operation = 1 또는 __$operation = 3일 때 항상 NULL 값이 할당됩니다. 업데이트 중에 열이 변경되지 않는 한 데이터 형식 varbinary(max), varchar(max) 또는 nvarchar(max)의 열에는 __$operation = 3이면 NULL 값이 할당됩니다. __$operation = 1이면 삭제 시 이러한 열에 해당 값이 할당됩니다. 캡처 인스턴스에 포함된 계산 열의 값은 항상 NULL입니다.

제공된 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이 반환됩니다. 이 오류는 개발자가 처리해야 합니다. 해결 방법을 위한 샘플 T-SQL은 GitHub의 ReplTalk에서 찾을 수 있습니다.

변경 데이터 캡처 쿼리 함수를 사용하는 방법을 보여 주는 몇 가지 SQL Server Management Studio 템플릿을 사용할 수 있습니다. 이러한 템플릿은 Management Studio의 보기 메뉴에서 사용할 수 있습니다. 자세한 내용은 템플릿 탐색기를 참조 하세요.

이 예제에서는 .Enumerate All Changes for Valid Range Template 이 템플릿은 AdventureWorks2022 데이터베이스의 HumanResources.Department 원본 테이블에 대해 정의된 cdc.fn_cdc_get_all_changes_HR_Department 함수를 사용하여 HR_Department 캡처 인스턴스에서 현재 사용할 수 있는 모든 변경 내용을 보고합니다.

-- ========  
-- Enumerate All Changes for Valid Range Template  
-- ========  
USE AdventureWorks2022;  
GO  
  
DECLARE @from_lsn binary(10), @to_lsn binary(10);  
SET @from_lsn = sys.fn_cdc_get_min_lsn('HR_Department');  
SET @to_lsn   = sys.fn_cdc_get_max_lsn();  
SELECT * FROM cdc.fn_cdc_get_all_changes_HR_Department  
  (@from_lsn, @to_lsn, N'all');  
GO  

참고 항목