在 Amazon RDS for SQL Server 上使用变更数据捕获
Amazon RDS 支持运行 Microsoft SQL Server 的数据库实例的更改数据捕获 (CDC)。CDC 可捕获对表中的数据进行的更改。它存储有关每个更改的元数据,您稍后可以访问这些元数据。有关 CDC 的工作原理的更多信息,请参阅 Microsoft 文档中的更改数据捕获
在将 CDC 用于您的 Amazon RDS 数据库实例之前,请通过运行 msdb.dbo.rds_cdc_enable_db
在数据库中启用它。您必须具有主用户权限才能在 Amazon RDS 数据库实例中启用 CDC。启用 CDC 后,具备该数据库的 db_owner
身份的任何用户都可以在该数据库中的表上启用或禁用 CDC。
重要
在还原期间,CDC 将被禁用。所有相关元数据都将自动从数据库中删除。这适用于快照还原、时间点还原和从 S3 还原 SQL Server Native。执行这些类型的还原之一后,您可以重新启用 CDC 并重新指定要跟踪的表。
要为数据库实例启用 CDC,请运行 msdb.dbo.rds_cdc_enable_db
存储过程。
exec msdb.dbo.rds_cdc_enable_db '
database_name
'
要为数据库实例禁用 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
多可用区实例的更改数据捕获
如果您在多可用区实例上使用 CDC,请确保镜像的 CDC 作业配置与主体上的配置匹配。CDC 作业映射到 database_id
。如果辅助副本上的数据库 ID 与主体不同,则作业不会与正确的数据库关联。要尝试阻止故障转移后发生错误,RDS 将删除并在新的主体上重新创建作业。重新创建的作业使用故障转移之前主体记录的参数。
尽快此过程快速运行,CDC 作业仍然可能在 RDS 更正它们之前运行。以下是在主副本和辅助副本之间使参数保持一致的三种方式:
对启用了 CDC 的所有数据库使用相同作业参数。
在更改 CDC 作业配置之前,将多可用区实例转换为单可用区。
只要您在主体上更改参数,就手动传输参数。
查看并定义故障转移后用于重新创建 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_job