다음을 통해 공유


cdc.<capture_instance>_CT(Transact-SQL)

원본 테이블에서 변경 데이터 캡처를 활성화할 때 생성된 변경 테이블입니다. 이 테이블은 원본 테이블에 대해 수행된 각 삽입 및 삭제 작업당 한 개의 행을, 업데이트 작업당 두 개의 행을 반환합니다. 원본 테이블이 활성화될 때 변경 테이블의 이름이 지정되지 않을 경우 이름이 파생됩니다. 이 이름의 형식은 cdc.capture_instance_CT이며 여기에서 capture_instance는 원본 테이블의 스키마 이름 및 schema_table 형식의 원본 테이블 이름입니다. 예를 들어 AdventureWorks2008R2 예제 데이터베이스의 Person.Address 테이블에서 변경 데이터 캡처가 활성화된 경우 파생 변경 테이블 이름은 cdc.Person_Address_CT가 됩니다.

시스템 테이블은 직접 쿼리하지 않는 것이 좋습니다. 대신 cdc.fn_cdc_get_all_changes_<capture_instance>cdc.fn_cdc_get_net_changes_<capture_instance> 함수를 실행하십시오.

열 이름

데이터 형식

설명

__$start_lsn

binary(10)

변경에 대한 커밋 트랜잭션과 연관된 LSN(로그 시퀀스 번호)입니다.

동일한 트랜잭션에서 커밋된 변경의 커밋 LSN은 모두 동일합니다. 예를 들어 원본 테이블의 삭제 작업에서 두 개의 행을 삭제할 경우 변경 테이블은 동일한 __$start_lsn 값을 가진 두 개의 행을 포함하게 됩니다.

__$end_lsn

binary(10)

정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

SQL Server 2008에서 이 열은 항상 NULL입니다.

__$seqval

binary(10)

트랜잭션 내 행 변경을 정렬하는 데 사용되는 시퀀스 값입니다.

__$operation

int

변경과 연관된 DML(데이터 조작 언어) 작업을 식별합니다. 다음 중 하나일 수 있습니다.

1 = 삭제

2 = 삽입

3 = 업데이트(이전 값)

열 데이터는 update 문을 실행하기 전의 행 값을 가집니다.

4 = 업데이트(새 값)

열 데이터는 update 문을 실행한 후의 행 값을 가집니다.

__$update_mask

varbinary(128)

변경된 열을 식별하는 변경 테이블의 열 서수를 기준으로 하는 비트 마스크입니다.

<captured source table columns>

다양함

변경 테이블의 나머지 열은 캡처 인스턴스가 생성될 때 캡처된 열로 식별된 원본 테이블의 열입니다. 캡처된 열 목록에 아무 열도 지정하지 않으면 원본 테이블의 모든 열이 이 테이블에 포함됩니다.

주의

캡처된 열 데이터 형식

이 테이블에 포함된 캡처된 열의 데이터 형식과 값은 다음 항목을 제외하고 해당하는 원본 열과 동일합니다.

  • Timestamp 열은 binary(8)로 정의됩니다.

  • Identity 열은 int 또는 bigint로 정의됩니다.

그러나 이러한 열의 값은 원본 열 값과 같습니다.

큰 개체 데이터 형식

LOB 데이터 형식 varchar(max), nvarchar(max), varbinary(max), image, text, ntext, xml의 경우 업데이트 중에 실제로 열이 변경되면 업데이트 이전 행에만 이전 값이 표시됩니다. 다른 데이터 형식의 경우 열 값이 항상 두 업데이트 행에 표시됩니다.

기본적으로 단일 INSERT, UPDATE, WRITETEXT 또는 UPDATETEXT 문에서 캡처된 열에 추가할 수 있는 최대 크기는 65,536바이트(64KB)입니다. 이 크기를 늘려 더 큰 LOB 데이터를 지원하려면 max text repl size 옵션을 사용하여 최대 크기를 더 크게 지정하십시오. 자세한 내용은 방법: max text repl size 옵션 구성(SQL Server Management Studio)을 참조하십시오.

데이터 정의 언어 수정

열 추가, 삭제와 같은 원본 테이블에 대한 DDL 수정은 cdc.ddl_history 테이블에 기록됩니다. 이러한 변경 내용은 변경 테이블에는 적용되지 않습니다. 즉 변경 테이블의 정의는 일정하게 유지됩니다. 변경 테이블에 열을 삽입할 때 캡처 프로세스는 원본 테이블과 연관된 캡처된 열 목록에 표시되지 않는 열은 무시합니다. 원본 테이블에 더 이상 없는 캡처된 열 목록에 열이 표시되는 경우 해당 열에는 Null 값이 할당됩니다.

원본 테이블에서 열의 데이터 형식을 변경할 경우에도 cdc.ddl_history 테이블에 기록됩니다. 이 변경은 변경 테이블의 정의를 바꿉니다. 캡처 프로세스에서 원본 테이블에 적용된 DDL 변경에 대한 로그 레코드가 발견되면 변경 테이블에 있는 캡처된 열의 데이터 형식이 수정됩니다.

원본 테이블에서 데이터 형식의 크기를 줄이는 방식으로 캡처된 열의 데이터 형식을 수정해야 하는 경우 다음 단계에 따라 변경 테이블의 해당 열을 성공적으로 수정할 수 있는지 확인하십시오.

  1. 원본 테이블의 열에서 수정할 값을 업데이트하여 계획된 데이터 형식 크기에 맞춥니다. 예들 들어 데이터 형식을 int에서 smallint로 변경할 경우 smallint 범위인 -32,768에서 32,767 사이에 맞는 크기로 값을 업데이트합니다.

  2. 변경 테이블에서 해당 열에 동일한 업데이트 작업을 수행합니다.

  3. 새 데이터 형식을 지정하여 원본 테이블을 변경합니다. 데이터 형식 변경이 변경 테이블로 성공적으로 전파됩니다.

데이터 조작 언어 수정

변경 데이터 캡처가 활성화된 원본 테이블에서 삽입, 업데이트 및 삭제 작업을 수행하면 데이터베이스 트랜잭션 로그에 이러한 DML 작업에 대한 레코드가 기록됩니다. 변경 데이터 캡처 프로세스는 트랜잭션 로그에서 이러한 변경 내용에 대한 정보를 검색하고 변경 테이블에 하나 또는 두 개의 행을 추가하여 변경 내용을 기록합니다. 일반적으로 변경 테이블 항목의 커밋은 단일 항목이 아니라 변경 내용 그룹에 대해 수행되어야 하지만 항목은 원본 테이블에 커밋된 순서와 동일하게 변경 테이블 추가됩니다.

변경 테이블 항목 내에서 __$start_lsn 열은 원본 테이블의 변경 내용과 관련된 커밋 LSN을 기록하는 데 사용되고 __$seqval column은 해당 트랜잭션 내 변경 내용을 정렬하는 데 사용됩니다. 이러한 메타데이터 열은 원본 변경 내용의 커밋 순서가 유지되도록 하는 데 사용될 수 있습니다. 캡처 프로세스가 해당 변경 정보를 트랜잭션 로그에서 가져오기 때문에 변경 테이블 항목은 해당 원본 테이블 변경 내용과 동기적으로 나타나지 않습니다. 대신 캡처 프로세스가 트랜잭션 로그에서 관련 변경 항목을 처리한 후 해당 변경 내용이 비동기적으로 나타납니다.

삽입 및 삭제 작업의 경우 업데이트 마스크에 있는 모든 비트가 설정됩니다. 업데이트 작업의 경우 업데이트 이전 행 및 업데이트 이후 행에서 업데이트 마스크가 수정되어 업데이트 중 변경된 열을 반영합니다.