

# 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 ドキュメントの「[変更データキャプチャ](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` を持つ) を新しいホスト名に変更することはできません。この制限は、次の 2 つのシナリオに適用されます。
  + リンクされたサーバーが、古いホスト名に関連付けられたリモートログインを使用してローカルサーバーへの接続を確立する場合
  + 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
```