RDS Custom for SQL Server에서 변경 데이터 캡처(CDC) 지원
개요
RDS Custom for SQL Server는 변경 데이터 캡처(CDC)에 대한 기본 지원을 제공하므로 SQL Server 테이블에서 데이터 수정 사항을 추적하고 캡처할 수 있습니다. CDC는 후속 검색 및 분석을 위해 이러한 변경 사항에 대한 자세한 메타데이터를 저장합니다. CDC 기능에 대한 자세한 내용은 Microsoft 설명서의 Change data capture
SQL Server에서 CDC 작업을 수행하려면 sys.servers
의 로컬 서버(server_id
= 0인 로컬 서버)와 SERVERPROPERTY('ServerName')
식별자 간에 일치하는 값이 필요합니다. RDS Custom for SQL Server는 인스턴스의 수명 주기 동안 이 동기화를 자동으로 유지하여 유지 관리 또는 복구 작업 중에 호스트가 교체되더라도 지속적인 CDC 작동을 보장합니다.
중요
다중 AZ 인스턴스 장애 조치 후 SERVERPROPERTY('Servername')
함수는 네트워크/컴퓨터 이름의 변경 사항을 자동으로 반영합니다. 그러나 @@SERVERNAME
함수는 MSSQLSERVER
서비스가 다시 시작될 때까지 이전 서버 이름을 유지합니다. @@SERVERNAME 쿼리는 장애 조치 후 이전 서버 이름을 반환합니다. 장애 조치 후 정확한 서버 이름을 얻으려면 다음 SQL 쿼리를 사용하세요.
SELECT name FROM sys.servers WHERE server_id=0
이 쿼리는 서비스를 다시 시작할 필요 없이 최신 서버 이름 정보를 제공합니다.
리전 및 버전 사용 가능 여부
CDC 기능은 RDS Custom for SQL Server를 사용할 수 있는 모든 AWS 리전과 RDS Custom에서 지원하는 모든 SQL Server 버전에서 지원됩니다. RDS Custom for SQL Server가 지원되는 버전 및 리전에 대한 자세한 내용은 RDS Custom for SQL Server를 지원하는 리전 및 DB 엔진 섹션을 참조하세요.
요구 사항 및 제한 사항
RDS Custom for SQL Server에서 CDC를 구현할 때는 다음 주요 고려 사항에 유의하세요.
-
MS Replication과 같은 기능을 사용하도록
sys.servers
에서@@SERVERNAME
및/또는 로컬 서버를 수동으로 설정한 경우sys.servers
의 로컬 서버(server_id = 0
이 있는 로컬 서버) 값이*.rds.amazonaws.com
또는*.awsrds.*.com
과 일치하는 형식으로 설정했다면 RDS Custom for SQL Server는SERVERPROPERTY('ServerName')
와 일치하도록 수정을 시도하지 않습니다. -
원격 로그인 또는 연결된 서버가 이전 호스트 이름을 적극적으로 사용하는 동안에는 RDS가
sys.servers
의 로컬 서버(server_id = 0
가 있는 로컬 서버)를 새 호스트 이름으로 수정할 수 없습니다. 이 제한은 두 가지 시나리오에 적용됩니다.-
연결된 서버가 이전 호스트 이름과 연결된 원격 로그인을 사용하여 로컬 서버에 대한 연결을 설정하는 경우
-
RDS Custom for SQL Server 인스턴스가 게시자 또는 배포자 역할을 하고 이전 호스트 이름과 연결된 로그인을 구독자 인스턴스에 연결한 경우
-
문제 해결
이전 서버 이름과 연결된 원격 로그인 또는 연결된 로그인을 식별하려면 다음 쿼리를 사용하세요. 적절한 CDC 기능을 보장하려면 결과를 검증하고 이러한 로그인을 제거하세요.
SELECT * FROM sys.remote_logins WHERE server_id=0
or
select sss.srvname,ssp.name,srl.remote_name from sys.server_principals ssp inner join sys.remote_logins srl on srl.local_principal_id=ssp.principal_id inner join sys.sysservers sss on srl.server_id = sss.srvid where sss.srvname = @@SERVERNAME