変更データキャプチャの使用 - Amazon Relational Database Service

変更データキャプチャの使用

Amazon RDS は、Microsoft SQL Server で実行されている DB インスタンスの変更データキャプチャをサポートします。CDC は、テーブル内のデータに行われる変更をキャプチャします。また、各変更に関するメタデータを保存します。これにより、後にアクセスできるようになります。CDC の動作の詳細については、Microsoft ドキュメントの「変更データキャプチャ」を参照してください。

Amazon RDS DB インスタンスで CDC を使用するには、msdb.dbo.rds_cdc_enable_db を実行して、データベース上で有効にします。Amazon RDS DB インスタンスの CDC を有効にするには、マスターユーザー権限が必要です。CDC が有効になると、該当データベースの db_owner であるユーザーは誰でも、そのデータベースのテーブルの CDC を有効または無効にすることができます。

重要

復元中、CDC は無効になります。関連するメタデータはすべて、データベースより自動的に削除されます。これは、S3 からのスナップショット復元、ポイントインタイムの復元、SQL Server によるネイティブ復元に適用されます。これらの復元のいずれかを実行すると、CDC を再度有効にして、追跡するテーブルを再度指定できます。

DB インスタンスの CDC を有効にするには、msdb.dbo.rds_cdc_enable_db ストアドプロシージャを実行します。

exec msdb.dbo.rds_cdc_enable_db 'database_name'

DB インスタンスの CDC を無効にするには、msdb.dbo.rds_cdc_disable_db ストアドプロシージャを実行します。

exec msdb.dbo.rds_cdc_disable_db 'database_name'

変更データキャプチャを使用したテーブルの追跡

CDC がデータベースで有効になったら、特定のテーブルの追跡を開始できます。追跡するテーブルを選択するには、sys.sp_cdc_enable_table を実行します。

--Begin tracking a table exec sys.sp_cdc_enable_table @source_schema = N'source_schema' , @source_name = N'source_name' , @role_name = N'role_name' --The following parameters are optional: --, @capture_instance = 'capture_instance' --, @supports_net_changes = supports_net_changes --, @index_name = 'index_name' --, @captured_column_list = 'captured_column_list' --, @filegroup_name = 'filegroup_name' --, @allow_partition_switch = 'allow_partition_switch' ;

テーブルの CDC 設定を表示するには、sys.sp_cdc_help_change_data_capture を実行します。

--View CDC configuration exec sys.sp_cdc_help_change_data_capture --The following parameters are optional and must be used together. -- 'schema_name', 'table_name' ;

CDC テーブル、関数、ストアドプロシージャの詳細については、SQL Server のドキュメントの以下を参照してください。

変更データキャプチャのジョブ

CDC が有効になったら、SQL Server により CDC ジョブが作成されます。データベースの所有者 (db_owner) は CDC ジョブを表示、作成、変更、および削除することができます。ただし、所有者は RDS システムアカウントです。そのため、これらのジョブをネイティブのビュー、プロシージャ、または SQL Server Management Studio で表示することはできません。

データベースの CDC の動作をコントロールするには、SQL Server のネイティブプロシージャ (sp_cdc_enable_tablesp_cdc_start_job など) を使用します。CDC ジョブパラメータ (maxtransmaxscans など) を変更するには、sp_cdc_change_jobs を使用できます。

CDC ジョブに関する詳細情報を取得するには、次の動的管理ビューに対してクエリを実行します。

  • sys.dm_cdc_errors

  • sys.dm_cdc_log_scan_sessions

  • sysjobs

  • sysjobhistory

マルチ AZ インスタンスの変更データキャプチャ

マルチ AZ インスタンスで CDC を使用する場合は、ミラーの CDC ジョブ設定がプリンシパルのいずれかと一致していることを確認します。CDC ジョブは、database_id にマッピングされています。セカンダリのデータベース ID がプリンシパルと異なる場合、そのジョブは正しいデータベースと関連付けられません。フェイルオーバー後のエラーを防ぐために、RDS によってジョブは削除され、新しいプリンシパルに再作成されます。再作成されたジョブでは、フェイルオーバー前に記録されたパラメータがプリンシパルによって使用されます。

このプロセスはすぐに実行されますが、RDS によって変更される前に CDC ジョブを実行できる場合があります。プリンシパルとセカンダリレプリカの間で一貫したパラメータを維持するには、次の 3 つの方法があります。

  • CDC を有効にしたすべてのデータベースに対して、同じジョブパラメータを使用する。

  • CDC ジョブ設定を変更する前に、マルチ AZ インスタンスを単一 AZ に変換する。

  • プリンシパルでパラメータを変更する場合は、必ず手動で転送する。

フェイルオーバー後に CDC ジョブを再作成するために使用される CDC パラメータを表示し、定義するには、rds_show_configuration および rds_set_configuration を使用します。

次の例では、cdc_capture_maxtrans のために設定された値を返します。RDS_DEFAULT に設定されているパラメータの場合は、RDS によって自動的に値が設定されます。

-- Show configuration for each parameter on either primary and secondary replicas. exec rdsadmin.dbo.rds_show_configuration 'cdc_capture_maxtrans';

セカンダリの構成を設定するには、rdsadmin.dbo.rds_set_configuration を実行します。この手順では、セカンダリサーバーのすべてのデータベース向けにパラメータ値を設定します。これらの設定は、フェイルオーバー後にのみ使用されます。次の例では、CDC キャプチャのジョブの maxtrans1000 に設定します。

--To set values on secondary. These are used after failover. exec rdsadmin.dbo.rds_set_configuration 'cdc_capture_maxtrans', 1000;

プリンシパルの CDC ジョブパラメータを設定するには、代わりに sys.sp_cdc_change_jobs を使用します。