Cdc.<>capture_instance_CT(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

원본 테이블에서 변경 데이터 캡처를 사용할 때 만든 변경 테이블입니다. 이 테이블은 원본 테이블에 대해 수행되는 각 삽입 및 삭제 작업에 대해 하나의 행을 반환하고 원본 테이블에 대해 수행된 각 업데이트 작업에 대해 두 개의 행을 반환합니다. 원본 테이블을 사용할 때 변경 테이블의 이름을 지정하지 않으면 이름이 파생됩니다. 이름의 형식은 cdc입니다.capture_instance_CT 여기서 capture_instance 원본 테이블의 스키마 이름과 schema_table 형식의 원본 테이블 이름입니다. 예를 들어 AdventureWorks 샘플 데이터베이스의 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 2012(11.x)에서 이 열은 항상 NULL입니다.
__$seqval binary(10) 트랜잭션 로그에 표시된 작업의 시퀀스입니다. 순서 지정에 사용하면 안 됩니다. 대신 __$command_id 열을 사용합니다.
__$operation int 변경과 관련된 DML(데이터 조작 언어) 작업을 식별합니다. 다음 중 하나일 수 있습니다.

1 = 삭제

2 = 삽입

3 = 업데이트(이전 값)

열 데이터에는 update 문을 실행하기 전에 행 값이 있습니다.

4 = 업데이트(새 값)

열 데이터에는 update 문을 실행한 후 행 값이 있습니다.
__$update_mask varbinary(128) 변경된 열을 식별하는 변경 테이블의 열 서수를 기준으로 하는 비트 마스크입니다.
<captured source table columns> {b>상황에 따라 다름 변경 테이블의 나머지 열은 캡처 인스턴스를 만들 때 캡처된 열로 식별된 원본 테이블의 열입니다. 캡처된 열 목록에 열이 지정되지 않은 경우 원본 테이블의 모든 열이 이 테이블에 포함됩니다.
__$command_id int 트랜잭션 내의 작업 순서를 추적합니다.

설명

이 열은 __$command_id 2012~2016 버전에서 누적 업데이트에 도입되었습니다. 버전 및 다운로드 정보는 MICROSOFT SQL Server 데이터베이스에 대한 변경 데이터 캡처를 사용하도록 설정한 후 업데이트된 행에 대해 변경 테이블의 순서가 잘못 지정된 수정 사항의 KB 문서 3030352 참조하세요. 자세한 내용은 SQL Server 2012, 2014 및 2016용 최신 CU로 업그레이드한 후 CDC 기능이 중단되었을 수 있음을 참조하세요.

캡처된 열 데이터 형식

이 테이블에 포함된 캡처된 열은 다음과 같은 예외를 제외하고 해당 원본 열과 동일한 데이터 형식 및 값을 갖습니다.

  • 타임스탬프 열은 binary(8)정의됩니다.

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

그러나 이러한 열의 값은 원본 열 값과 동일합니다.

큰 개체 데이터 형식

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

기본적으로 단일 INSERT, UPDATE, WRITETEXT 또는 UPDATETEXT 문에서 캡처된 열에 추가할 수 있는 최대 크기는 65,536바이트 또는 64KB입니다. 더 큰 LOB 데이터를 지원하도록 이 크기를 늘리려면 최대 텍스트 리플 크기 구성 서버 구성 옵션을 사용하여 더 큰 최대 크기를 지정합니다. 자세한 내용은 max text repl size 서버 구성 옵션 구성을 참조하세요.

데이터 정의 언어 수정

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

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

원본 테이블에 있는 캡처된 열의 데이터 형식을 수정할 때 데이터 형식의 크기가 줄어드는 경우에는 다음 절차에 따라 변경 테이블에서 해당 열이 성공적으로 수정될 수 있는지 확인하십시오.

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

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

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

데이터 조작 언어 수정

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

삽입 작업을 수행하면 한 행이 변경 테이블에 추가됩니다. 삭제 작업을 수행하면 한 행이 변경 테이블에 추가됩니다. SQL Server에서 업데이트를 "지연된 업데이트"로 구현하는 경우 즉, 삭제 및 삽입 작업 쌍으로 업데이트 작업을 수행하면 두 개의 행이 변경 테이블에 추가됩니다. 첫 번째 행은 캡처된 데이터의 삭제를 반영하고 두 번째 행은 업데이트된 캡처된 데이터의 삽입을 반영합니다. SQL Server가 업데이트를 "지연된 업데이트"로 구현하지 않으면 업데이트 작업으로 인해 변경 테이블에 두 개의 행이 추가됩니다. 즉, 업데이트 전에 캡처된 데이터를 반영하는 첫 번째 행과 업데이트 후 캡처된 데이터를 반영하는 두 번째 행이 생성됩니다.

변경 테이블 항목 내에서 __$start_lsn 열은 원본 테이블의 변경 내용과 연결된 커밋 LSN을 기록하는 데 사용되고, __$command_id 열은 트랜잭션 내에서 변경 내용을 정렬하는 데 사용되며 , __$operation 열은 수행된 작업을 기록하는 데 사용됩니다. 이러한 메타데이터 열을 함께 사용하여 원본 변경 내용의 커밋 순서가 유지되도록 할 수 있습니다. 캡처 프로세스는 트랜잭션 로그에서 변경 정보를 가져오기 때문에 변경 테이블 항목이 해당 원본 테이블 변경 내용과 동기적으로 나타나지 않는다는 점에 유의해야 합니다. 대신 캡처 프로세스가 트랜잭션 로그에서 관련 변경 항목을 처리한 후 해당 변경 내용이 비동기적으로 표시됩니다.

삽입 및 삭제 작업의 경우 업데이트 마스크의 모든 비트가 설정됩니다. 업데이트 작업의 경우 업데이트 중에 변경된 열을 반영하도록 업데이트 이전 행과 업데이트 새 행의 업데이트 마스크가 수정됩니다.

참고 항목

sys.sp_cdc_enable_table(Transact-SQL)
sys.sp_cdc_get_ddl_history(Transact-SQL)