다음을 통해 공유


cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL)

적용 대상:SQL Server

지정된 LSN(로그 시퀀스 번호) 범위 내의 원본 테이블에 적용된 각 변경 내용에 대해 하나의 행을 반환합니다. 간격 동안 원본 행에 여러 변경 내용이 있는 경우 각 변경 내용은 반환된 결과 집합에 표시됩니다. 변경 데이터를 반환하는 것 외에도 4개의 메타데이터 열은 변경 내용을 다른 데이터 원본에 적용하는 데 필요한 정보를 제공합니다.

행 필터링 옵션은 메타데이터 열의 내용과 결과 집합에 반환된 행을 제어합니다. 모든 행 필터 옵션을 지정하면 변경 사항을 식별하기 위해 각 변경 내용에 정확히 하나의 행이 있습니다. 모든 업데이트 이전 옵션을 지정하면 업데이트 작업은 업데이트 전에 캡처된 열의 값을 포함하고 다른 하나는 업데이트 후 캡처된 열의 값을 포함하는 두 개의 행으로 표시됩니다.

이 열거형 함수는 원본 테이블이 변경 데이터 캡처를 사용하도록 설정된 시점에 만들어집니다. 함수 이름은 파생되며 원본 테이블이 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_lsnfrom_lsn 보다 크거나 같은 변경 테이블이 결과 집합에 포함됩니다.

to_lsn

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

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

<row_filter_option>

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

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

  • 모든

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

  • 모든 업데이트 이전

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

반환된 테이블

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

1 = 삭제
2 = insert
3 = update(캡처된 열 값은 업데이트 작업 전 열 값)입니다. 이 값은 행 필터 옵션 '모든 이전 업데이트'를 지정한 경우에만 적용됩니다.
4 = update(캡처된 열 값은 업데이트 작업 후 열 값)
__$update_mask varbinary(128) 캡처 인스턴스에 대해 식별된 각 캡처된 열에 해당하는 비트가 있는 비트 마스크입니다. 이 값은 __$operation1 또는 2경우 정의된 모든 비트가 1 설정됩니다. __$operation 3 또는 4변경된 열에 해당하는 비트만 1설정됩니다.
<captured source table columns> 다양함 함수에서 반환된 나머지 열은 캡처 인스턴스를 만들 때 식별되는 캡처된 열입니다. 캡처된 열 목록에 열이 지정되지 않은 경우 원본 테이블의 모든 열이 반환됩니다.

사용 권한

sysadmin 고정 서버 역할 또는 db_owner 고정 데이터베이스 역할의 멤버 자격이 필요합니다. 다른 모든 사용자의 경우 원본 테이블의 모든 캡처된 열에 대해 SELECT 권한이 필요하며 캡처 인스턴스에 대한 게이팅 역할이 정의된 경우 해당 데이터베이스 역할의 멤버 자격이 필요합니다. 호출자에게 원본 데이터를 볼 수 있는 권한이 없으면 함수는 오류 229를 반환합니다.

The SELECT permission was denied on the object 'fn_cdc_get_all_changes_...', database '<DatabaseName>', schema 'cdc'.

설명

데이터 형식 이미지, 텍스트ntext 열은 __$operation1 또는 __$operation3경우 항상 NULL 값이 할당됩니다. 업데이트 중에 열이 변경되지 않는 한 varbinary(max), varchar(max)또는 nvarchar(max) 데이터 형식 경우 값이 할당됩니다. __$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.

이 오류는 개발자가 처리해야 합니다.

예제

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

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

-- Enumerate All Changes for Valid Range Template
USE AdventureWorks2022;
GO

DECLARE @from_lsn AS BINARY (10), @to_lsn AS 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