SQL Server数据库开启变更数据捕获CDC(Change Data Capture)功能后,DataWorks的数据集成可以基于该功能监控并获取SQL Server数据表的插入、更新和删除等操作的日志,将其转化为实时消息进入同步流程,实现对SQL Server数据的实时同步。本文为您介绍如何配置SQL Server CDC输入。

前提条件

  • 准备数据库。
    • 使用阿里云RDS SQL Server数据库同步数据。
      • 创建数据库。

        您需要创建一个支持CDC功能的数据库。阿里云RDS SQL Server数据库对于CDC功能的支持情况,详情请参见RDS SQL Server CDC支持列表。创建数据库,详情请参见创建数据库

      • 开启CDC功能。
        您需要通过如下语句开启阿里云RDS SQL Server数据库的CDC功能。
        USE db
        GO
        sp_rds_cdc_enable_db
    • 使用自建SQL Server数据库同步数据。
      1. 创建数据库。

        CDC是SQL Server 2008版本新增的功能,因此,您需要创建一个SQL Server 2008版本或高于该版本的数据库,才能使用该功能。

      2. 开启CDC功能。
        您需要根据实际业务,从数据库粒度或表粒度开启CDC功能。具体如下:
        • 基于数据库粒度开启CDC,语句如下。
          -- ====  
          -- Enable Database for CDC template   
          -- ====  
          USE MyDB  
          GO  
          EXEC sys.sp_cdc_enable_db  
          GO 
        • 基于表粒度开启CDC,语句如下。
          -- =============  
          -- Enable a Table for All and Net Changes Queries template   
          -- =============  
          USE MyDB  
          GO  
          EXEC sys.sp_cdc_enable_table  
          @source_schema = N'dbo',  
          @source_name   = N'MyTable',  
          @role_name     = N'MyRole',  
          @supports_net_changes = 1  
          GO  
        更多信息,详情请参见开启CDC
      3. 检查是否成功开启CDC。
        您可以使用如下语句检查是否成功开启CDC功能。
        SELECT  is_cdc_enabled, 
                CASE 
                WHEN is_cdc_enabled = 0 
                    THEN 'CDC OFF'
                ELSE 'CDC ON'
                END 描述
        FROM    sys.databases
        WHERE   NAME = 'MyTable'
  • 已创建数据源,详情请参见配置SQLServer数据源

背景信息

变更数据捕获CDC(Change Data Capture)用于捕获SQL Server表中的INSERT、UPDATE和DELETE操作,并将该类操作产生的详细变更信息以简单易用的关系格式提供给您,方便您查看具体的变更内容。您可以基于CDC功能捕获变更数据,并实时同步至DataWorks的数据集成进行后续的数据开发。CDC捕获数据流程如下图所示。 CDC捕获数据流程
  1. 对SQL Server数据库中的数据源表执行INSERT、UPDATE或DELETE操作,表中变更的数据会被写入Log日志表。
  2. Capture Process捕获进程捕获Log日志表中的变更数据。
  3. Capture Process捕获进程将变更数据存储至变化表。
  4. 通过CDC提供的变更数据捕获函数查询变化表,捕获变更数据。
  5. 系统对变化数据执行ETL,即抽取(Extraction)、转换(Transformation)及加载(Loading)操作。
  6. 系统同步变化数据至目的端数据仓库,即DataWorks的数据集成,完成对SQL Server数据源数据的实时同步。
SQL Server CDC功能的介绍,详情请参见 CDC功能介绍

RDS SQL Server CDC支持列表

阿里云RDS SQL Server各版本对CDC功能的支持情况如下表所示。
系列 版本 支持性(是/否)
集群系列 2019企业版
2017企业版
高可用系列 2019标准版
2017标准版
2016标准版
2016企业版
2014标准版
2012标准版
2012企业版
2008 R2
基础系列 2016企业版
2012企业版(单机)
标准系列 SQL Server 2016
SQL Server 2012
Web系列 所有版本

使用限制

  • 自建数据库仅SQL Server 2008及以上版本支持使用CDC功能。
  • DataWorks仅支持对CDC捕获的INSERT、UPDATE、DELETE等DML操作进行变更信息的同步,不支持对DDL操作进行同步。如果源表因为DDL操作导致数据变化,则您需要重新配置数据同步链路同步数据。

注意事项

SQL Server通常使用主备库的方式实现高可用,同步数据时建议您只读取备库数据进行同步,保障数据安全。在后续的同步配置中,您可以通过配置 database.applicationIntent高级参数来实现只读取备库数据。配置语句如下。
"debeziumConfig": {
    "database.applicationIntent": "ReadOnly"    //只读取备用数据库的数据。
}
debeziumConfig的其他高级扩展参数,详情请参见 debeziumConfig扩展参数

配置SQLServer CDC输入

  1. 进入数据开发页面。
    1. 登录DataWorks控制台
    2. 在左侧导航栏,单击工作空间列表
    3. 选择工作空间所在地域后,单击相应工作空间后的进入数据开发
  2. 创建业务流程
    如果您已有 业务流程,则可以忽略该步骤。
    1. 鼠标悬停至新建图标,选择业务流程
    2. 新建业务流程对话框,输入业务名称
    3. 单击新建
  3. 新建实时单表同步节点。
    1. 新建节点。
      鼠标悬停至 新建图标,单击 数据集成 > 实时同步
      您也可以展开目标业务流程,右键单击 数据集成,选择 新建 > 实时同步
    2. 配置节点信息。
      新建节点对话框中,选择 同步方式单表(Topic)到单表(Topic)ETL,输入 节点名称并选择 目标文件夹
    1. 单击提交
  4. 配置SQL Server输入。
    1. 在实时同步节点的编辑页面,拖拽输入 > SQL Server至编辑面板。
    2. 单击SQL Server节点,在节点配置对话框中,配置各项参数。
      SQLServer
      参数 描述
      数据源 选择已经配置好的SQL Server数据源。

      如果您没有可用的数据源,请单击右侧的新建数据源,进入数据源管理页面新建。

      选择当前数据源下需要同步的表名称。您可以单击右侧的数据预览进行确认。
      您也可以单击 添加分库分表数据源实现分库分表同步。配置的数据库及数据表会在该任务中同时进行实时同步。
      注意 分库分表中数据表的Schema请保持一致,以避免执行报错。
      变更数据捕获高级配置 捕获变更数据的高级配置。例如,您可以配置变更数据捕获高级配置{"database.applicationIntent":"ReadOnly"},在实时同步任务中仅读取备用库的数据。
      输出字段 选择需要同步的字段,包括管理字段数据字段
      • 管理字段:为方便进行数据管理、排序和去重等操作,会在同步的目标端自动添加附加字段。
      • 数据字段:显示需要同步的原始表中对应的字段。

      详情请参见实时同步字段格式

  5. 单击工具栏中的图标图标,保存SQL Server输入配置。

后续步骤

SQL Server输入配置完成后,您可以通过单表同步任务进行数据的实时同步,详情请参见 配置并管理实时同步任务