使用更改数据捕获 - Amazon Relational Database Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用更改数据捕获

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_tablesp_cdc_start_job。要更改 CDC 作业参数(例如 maxtransmaxscans),您可以使用 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_configurationrds_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..rds_set_configuration 'cdc_capture_maxtrans' , 1000

要在委托人上设置 CDC 作业参数,请改用 sys.sp_cdc_change_job