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

적용 대상:SQL ServerAzure SQL Managed Instance

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

Change tracking

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

데이터베이스 미러링

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

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

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

클린up 또는 캡처 작업의 현재 구성을 보려면 새 주 서버 인스턴스에서 sys.sp_cdc_help_jobs 저장 프로시저를 사용합니다. 지정된 데이터베이스의 경우 캡처 작업의 이름은 cdc입니다.database_name_capture 클린업 작업의 이름은 cdc입니다.database_name_클린up입니다. 여기서 database_name 데이터베이스의 이름입니다.

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

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

트랜잭션 복제

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

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

참고 항목

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

변경 데이터 캡처를 사용하는 경우 트랜잭션 복제본(replica)tion의 절차 실행 옵션을 사용할 수 없습니다.

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

SQL Server는 다음 논리를 사용하여 데이터베이스를 복원하거나 연결한 후 변경 데이터 캡처를 다시 사용할 수 있는지 기본 확인합니다.

  • 데이터베이스가 동일한 데이터베이스 이름으로 동일한 서버로 복원되는 경우 데이터 캡처를 다시 사용하도록 기본 변경합니다.

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

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

  • 데이터베이스가 분리되어 동일한 서버 또는 다른 서버에 연결된 경우 데이터 캡처를 다시 사용하도록 기본 변경합니다.

  • 표준, 엔터프라이즈 또는 SQL Managed Instance 이외의 버전에 KEEP_CDC 옵션을 사용하여 데이터베이스를 연결하거나 복원하는 경우 변경 데이터 캡처에 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 가용성 그룹을 사용하는 경우 주 복제본(replica) 디스크 부하를 줄이기 위해 보조 복제본(replica) 변경 열거형을 수행해야 합니다.

columnstore 인덱스

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

계산 열

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

Linux

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

참고 항목