Amazon Relational Database Service
用户指南 (API 版本 2014-10-31)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用更改数据捕获

Amazon RDS 支持运行 Microsoft SQL Server 的数据库实例的更改数据捕获 (CDC)。CDC 可捕获对表中的数据进行的更改。它存储有关每个更改的元数据,您稍后可以访问这些元数据。有关 CDC 的工作原理的更多信息,请参阅 Microsoft 文档中的更改数据捕获

在将 CDC 用于您的 Amazon RDS 数据库实例之前,请通过运行 msdb.dbo.rds_cdc_enable_db 在数据库中启用它。启用 CDC 后,具备该数据库的 db_owner 身份的任何用户都可以在该数据库中的表上启用或禁用 CDC。

重要

在还原期间,CDC 将被禁用。所有相关元数据都将自动从数据库中删除。这适用于快照还原、时间点还原和从 S3 还原 SQL Server Native。执行这些类型的还原之一后,您可以重新启用 CDC 并重新指定要跟踪的表。

--Enable CDC for RDS DB Instance exec msdb.dbo.rds_cdc_enable_db '<database name>'

要禁用 CDC,请运行 msdb.dbo.rds_cdc_disable_db

--Disable CDC for RDS DB Instance 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_jobs

本页内容: