다음을 통해 공유


변경 데이터 캡처 및 기타 기능

적용 대상: SQL Server Azure SQL Managed Instance

이 문서에서는 SQL Server 및 Azure SQL Managed Instance에 대한 변경 데이터 캡처와 상호 작용하는 다음 기능의 방식을 설명합니다. Azure SQL 데이터베이스의 경우 Azure SQL 데이터베이스를 사용한 CDC를 참조하세요.

변경 내용 추적

동일한 데이터베이스에서 변경 데이터 캡처 및 변경 추적을 사용할 수 있습니다. 특별한 고려 사항은 필요하지 않습니다. 자세한 내용은 변경 내용 추적 사용을 참조하세요.

데이터베이스 미러링

변경 데이터 캡처가 설정된 데이터베이스를 미러링할 수 있습니다. 장애 조치(Failover) 후 캡처 및 정리가 자동으로 발생하도록 하려면 다음 단계를 따릅니다.

  1. 새로운 주 서버 인스턴스에서 SQL Server 에이전트가 실행 중인지 확인합니다.

  2. 새 주 데이터베이스(이전에는 미러 데이터베이스)에 대한 캡처 작업 및 정리 작업을 만듭니다. 작업을 만들려면 sp_cdc_add_job 저장 프로시저를 사용합니다.

정리 또는 캡처 작업의 현재 구성을 보려면 새로운 주 서버 인스턴스에서 sys.sp_cdc_help_jobs 저장 프로시저를 사용합니다. 지정된 데이터베이스에 대해 캡처 작업의 이름은 cdc.database_name_capture로 지정되고 정리 작업의 이름은 cdc.database_name_cleanup으로 지정됩니다. 여기서 database_name은 데이터베이스의 이름입니다.

작업의 구성을 변경하려면 sys.sp_cdc_change_job 저장 프로시저를 사용합니다.

데이터베이스 미러링에 대한 자세한 내용은 데이터베이스 미러링(SQL Server)을 참조하세요.

트랜잭션 복제

변경 데이터 캡처 및 트랜잭션 복제는 동일한 데이터베이스에 함께 존재할 수 있지만 두 기능이 모두 설정된 경우 변경 테이블 채우기가 다르게 처리됩니다. 변경 데이터 캡처 및 트랜잭션 복제는 항상 동일한 sp_replcmds프로시저를 사용하여 트랜잭션 로그에서 변경 내용을 읽습니다. 변경 데이터 캡처를 자체적으로 사용하도록 설정하면 SQL Server 에이전트 작업이 sp_replcmds를 호출합니다. 동일한 데이터베이스에서 두 기능을 모두 사용하도록 설정하면 로그 판독기 에이전트가 sp_replcmds를 호출합니다. 이 에이전트는 변경 테이블과 배포 데이터베이스 테이블을 모두 채웁니다. 자세한 내용은 복제 로그 판독기 에이전트를 참조하세요.

변경 데이터 캡처가 AdventureWorks2022 데이터베이스에서 사용하도록 설정되어 있고 두 개의 테이블이 캡처에 사용하도록 설정되어 있는 시나리오를 가정해 보겠습니다. 변경 테이블을 채우기 위해 캡처 작업은 sp_replcmds를 호출합니다. 데이터베이스가 트랜잭션 복제에 사용하도록 설정되고 게시물이 만들어집니다. 이제 데이터베이스에 대한 로그 판독기 에이전트가 만들어지고 캡처 작업이 삭제됩니다. 로그 판독기 에이전트는 변경 테이블에 커밋된 마지막 로그 시퀀스 번호부터 로그를 계속 스캔합니다. 이렇게 하면 변경 테이블의 데이터 일관성이 보장됩니다. 이 데이터베이스에서 트랜잭션 복제를 사용하지 않도록 설정되어 있으면 로그 판독기 에이전트가 제거되고 캡처 작업이 다시 만들어집니다.

참고 사항

로그 판독기 에이전트가 변경 데이터 캡처와 트랜잭션 복제에 모두 사용되는 경우, 복제된 변경 내용은 먼저 배포 데이터베이스에 기록됩니다. 그런 다음 캡처된 변경 내용이 변경 테이블에 기록됩니다. 두 작업은 함께 커밋됩니다. 배포 데이터베이스에 쓰는 데 대기 시간이 있는 경우 변경 내용이 변경 테이블에 표시되기 전에 해당 대기 시간이 적용됩니다.

변경 데이터 캡처를 사용하면 트랜잭션 복제의 proc exec 옵션을 사용할 수 없습니다.

데이터베이스 복원 또는 연결

SQL Server는 다음 논리를 사용하여 데이터베이스를 복원하거나 연결한 후에도 변경 데이터 캡처를 사용하도록 설정할지 여부를 결정합니다.

  • 데이터베이스가 동일한 데이터베이스 이름으로 동일한 서버에 복원된 경우 변경 데이터 캡처를 사용하도록 설정된 상태로 유지됩니다.

  • 데이터베이스가 다른 서버로 복원된 경우에는 기본적으로 변경 데이터 캡처를 사용하지 않도록 설정되며 모든 관련 메타데이터가 삭제됩니다.

    변경 데이터 캡처를 유지하려면 데이터베이스를 복원할 때 KEEP_CDC 옵션을 사용합니다. 이 옵션에 대한 자세한 내용은 RESTORE를 참조하세요.

  • 데이터베이스가 분리되어 동일한 서버 또는 다른 서버에 연결된 경우 변경 데이터 캡처는 사용하도록 설정된 상태로 유지됩니다.

  • 데이터베이스가 KEEP_CDC 옵션을 사용하여 Standard, Enterprise 또는 SQL Managed Instance 이외의 다른 버전에 연결 또는 복원된 경우 변경 데이터 캡처에 SQL Server Standard, Enterprise 또는 SQL Managed Instance 버전이 필요하기 때문에 작업이 차단됩니다. 오류 메시지 934가 표시됩니다:

    SQL Server cannot load database '%.*ls' because change data capture is enabled. The currently installed edition of SQL Server does not support change data capture. Either restore database without KEEP_CDC option, or upgrade the instance to one that supports change data capture.

sys.sp_cdc_disable_db를 사용하여 복원되거나 연결된 데이터베이스에서 변경 데이터 캡처를 제거할 수 있습니다.

Azure SQL Managed Instance에서 데이터베이스를 복원한 후 CDC는 사용하도록 설정된 상태로 유지되지만, 검색 및 정리 작업이 추가되고 실행되고 있는지 확인해야 합니다. sys.sp_cdc_add_job을 실행하여 작업을 수동으로 추가할 수 있습니다.

포함된 데이터베이스

변경 데이터 캡처는 포함된 데이터베이스에서 지원되지 않습니다.

가용성 그룹

Always ON 가용성 그룹을 사용할 때는 보조 복제본에서 변경 내용 열거를 수행하여 주 복제에서 디스크 부하를 줄여야 합니다.

columnstore 인덱스

클러스터형 columnstore 인덱스가 있는 테이블에서는 변경 데이터 캡처를 사용하도록 설정할 수 없습니다. SQL Server 2016부터 비클러스터형 columnstore 인덱스가 있는 테이블에서 이 기능을 사용하도록 설정할 수 있습니다.

계산 열

계산 열이 지속형으로 정의되어 있더라도 CDC에서는 계산 열 값을 지원하지 않습니다. 캡처 인스턴스에 포함된 계산 열은 항상 NULL의 값을 갖습니다. 이 동작은 버그가 아니라 의도된 것입니다.

Linux

CDC는 CU18부터 Linux의 SQL Server 2017 및 Linux의 SQL Server 2019에서 지원됩니다.

참고 항목