変更データキャプチャの使用
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_tablemaxtrans
、maxscans
など) を変更するには、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 キャプチャのジョブの maxtrans
を 1000
に設定します。
--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