在 Amazon RDS for SQL Server 上使用变更数据捕获 - Amazon Relational Database Service

在 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_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.dbo.rds_set_configuration 'cdc_capture_maxtrans', 1000;

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