

# RDS Custom for SQL Server에서 변경 데이터 캡처(CDC) 지원
<a name="custom-sqlserver-features.cdc"></a>

## 개요
<a name="custom-sqlserver-features.cdc.overview"></a>

RDS Custom for SQL Server는 변경 데이터 캡처(CDC)에 대한 기본 지원을 제공하므로 SQL Server 테이블에서 데이터 수정 사항을 추적하고 캡처할 수 있습니다. CDC는 후속 검색 및 분석을 위해 이러한 변경 사항에 대한 자세한 메타데이터를 저장합니다. CDC 기능에 대한 자세한 내용은 Microsoft 설명서의 [Change data capture](https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/track-data-changes-sql-server#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
```
이 쿼리는 서비스를 다시 시작할 필요 없이 최신 서버 이름 정보를 제공합니다.

## 리전 및 버전 사용 가능 여부
<a name="custom-sqlserver-features.cdc.regionAvail"></a>

CDC 기능은 RDS Custom for SQL Server를 사용할 수 있는 모든 AWS 리전과 RDS Custom에서 지원하는 모든 SQL Server 버전에서 지원됩니다. RDS Custom for SQL Server가 지원되는 버전 및 리전에 대한 자세한 내용은 [RDS Custom for SQL Server를 지원하는 리전 및 DB 엔진](Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.md#Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSCustom.sq) 섹션을 참조하세요.

## 요구 사항 및 제한 사항
<a name="custom-sqlserver-features.cdc.reqsLims"></a>

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 인스턴스가 게시자 또는 배포자 역할을 하고 이전 호스트 이름과 연결된 로그인을 구독자 인스턴스에 연결한 경우

## 문제 해결
<a name="custom-sqlserver-features.cdc.Troubleshooting"></a>

이전 서버 이름과 연결된 원격 로그인 또는 연결된 로그인을 식별하려면 다음 쿼리를 사용하세요. 적절한 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
```