RDS Custom for SQL Server による変更データキャプチャ (CDC) サポート
概要
RDS Custom for SQL Server は、変更データキャプチャ (CDC) をネイティブにサポートしているため、SQL Server テーブルのデータ変更を追跡およびキャプチャできます。CDC は、後続の取得と分析のために、これらの変更に関する詳細なメタデータを保存します。CDC の動作の詳細については、Microsoft ドキュメントの「変更データキャプチャ
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
を持つ) を新しいホスト名に変更することはできません。この制限は、次の 2 つのシナリオに適用されます。-
リンクされたサーバーが、古いホスト名に関連付けられたリモートログインを使用してローカルサーバーへの接続を確立する場合
-
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