You need to enable JavaScript to run this app.
导航

变更数据捕获(CDC)管理

最近更新时间2023.10.08 16:32:35

首次发布时间2022.01.11 18:44:56

变更数据捕获功能用于记录应用到所启用的表中的插入、更新和删除,能够提供变更的详细信息。本文介绍使用存储过程对指定数据库开启或关闭数据捕获功能和使用示例。

前提条件

已连接 SQL Server 实例且目标库状态为 Online。更多信息,请参见连接实例

注意事项

  • 存在事务的语句不能执行插入操作。

  • 不支持对系统库或 rdsadmin 库执行变更数据捕获语句。

  • 只有主账号支持对数据库执行开启或关闭变更数据捕获语句。

开启或关闭 CDC

执行以下命令,开启或关闭变更数据捕获。

Exec [msdb].[dbo].[rds_cdc_database] '@DBName',@Action;

参数说明如下所示:

  • @DBName:表示数据库名称。

  • @Action:表示是否开启变更数据捕获,取值如下:

    • 1:表示开启变更数据捕获。

    • 0:表示关闭变更数据捕获。

使用示例

下文以 @DBNametestDBName@source_nameTable_1@source_schemadbo@capture_instancedbo_Table_1 为例,介绍如何使用 CDC。

  1. 执行以下命令,开启变更数据捕获 CDC。

    Exec [msdb].[dbo].[rds_cdc_database] 'testDBName',1;
    
  2. 执行以下命令,创建目标数据库的变更数据捕获任务。

    注意

    首次开启变更数据捕获时,必需要执行以下命令。

    EXEC [sys].[sp_cdc_add_job] @job_type = N'capture'; 
    EXEC [sys].[sp_cdc_add_job] @job_type = N'cleanup';
    
  3. 执行以下命令,开启目标表的变更数据捕获功能。

    EXEC sys.sp_cdc_enable_table 
           @source_schema = 'dbo', -- source_schema默认的dbo 
           @source_name = 'Table_1', -- table_name 
           @capture_instance = NULL, -- capture_instance 
           @supports_net_changes = 0, -- supports_net_changes 
           @role_name = NULL -- role_name
    
  4. 关闭目标表的变更数据捕获。

    EXEC sys.sp_cdc_disable_table  
        @source_schema = N'dbo',  
        @source_name   = N'Table_1',  
        @capture_instance = N'dbo_Table_1'
    

    当已经开启变更捕获的表发生了结构上的变化时,例如添加、删除部分列,则需要重新开启变更数据捕获功能。重启的步骤为先关闭再开启变更数据捕获功能。

  5. 查询变更内容。

    针对已经开启变更数据捕获功能的表,您可以执行以下命令查询表的具体变更内容。

    DECLARE @from_lsn binary(10), @to_lsn binary(10);  
    SET   @from_lsn = sys.fn_cdc_get_min_lsn('dbo_Table_1');  
    SET   @to_lsn   = sys.fn_cdc_get_max_lsn();  
    SELECT * FROM [cdc].[fn_cdc_get_all_changes_dbo_Table_1](@from_lsn, @to_lsn, 'all');