如何使SQL Server实时同步数据到工作表?

集成 SQLServer数据同步数据迁移  收藏
0 / 291

SQLServer 提供了 变更数据捕获(CDC) link 的功能,允许应用程序追踪用户表的数据库操作(如插入、更新和删除),这一能力非常适用于实时同步数据到明道云工作表。

以下是以腾讯云 SQLServer2012 为例,开启 SQL Server 变更数据捕获的操作说明。

 
简要目录

  1. 准备数据库
    • 支持的数据库版本:2012, 2014, 2016, 2017, 2019
  2. 开启数据库的 CDC
  3. 开启表的 CDC 者
  4. 腾讯云的 SQLServer 开启 CDC
  5. 阿里云的 SQLServer 开启 CDC
     

SQLServer 账号的权限说明
只有开启数据库 CDC 才需要 sysadmin 权限,其余场景下无需 sysadmin 权限。

sysadmin 数据库拥有者 数据库读写
查询数据库的 CDC 状态 Y Y Y
开启数据库的 CDC Y
查询表的 CDC 状态 Y Y Y
开启表的 CDC Y Y Y
创建同步任务 Y Y Y

1.准备数据库

如果有已经可用测试的 SQLServer 数据可以直接使用,没有测试库的话可以临时购买 腾讯云 阿里云的 SQLServer,按量付费产品。

1.1 查询 SQLServer 数据库版本

支持版本:2012, 2014, 2016, 2017, 2019

SELECT @@VERSION

1.2 查询数据库是否已经启用 CDC

返回 0 代表未启用;1 代表已启用

select is_cdc_enabled, name from sys.databases where name = 'db_name'

1.2.1 启用数据库的 CDC

USE  ${your_db_name}
GO
EXEC sys.sp_cdc_enable_db
GO

如提示需要 sysadmin 权限,可以使用如下 SQL

## 开启当前账号的sysadmin权限
exec sp_helpsrvrolemember 'sysadmin'

返回结果中 如果你的账号在 MemberName 列内即可

1.3 查询表是否已经启用 CDC

返回 0 代表未启用;1 代表已启用

select name,is_tracked_by_cdc from sys.tables where name ='table_name';

1.3.1 启用表的 CDC

EXEC sys.sp_cdc_enable_table
@source_schema='schema_name',
@source_name='table_name',
@role_name=NULL,
@supports_net_changes=0;

source_schema:表所在的 schema 名称,通常是 dbo
source_name:表名
role_name:访问控制角色名称,此处为 null 不设置访问控制
supports_net_changes:是否为捕获实例生成一个净更改函数,0:否;1:是

 

1.4 查看 CDC agent 是否正常启动

EXEC master.dbo.xp_servicecontrol N'QUERYSTATE', N'SQLSERVERAGENT'

1.4.1 启动 agent

EXEC master.dbo.xp_servicecontrol N'START', N'SQLSERVERAGENT'

1.4.2 停止 agent

EXEC master.dbo.xp_servicecontrol N'STOP', N'SQLSERVERAGENT'

在 windows 客户端内的操作开启 CDC agent,点击下图位置代理开启:

重新启动数据库

再次查询 agent 状态,确认状态变更为 running:

参考文档:

https://learn.microsoft.com/zh-cn/sql/relational-databases/track-changes/enable-and-disable-change-data-capture-sql-server?view=sql-server-ver16

4. 腾讯云

这里是关于腾讯云上开启 CDC 的补充,大部分内容都可以参考本地 SQLServer 配置

4.1 创建 账号,如需要开启数据库 CDC,则需要权限为 System Admin

4.2 腾讯云如何开启数据库的 CDC

路径:实例列表-数据库管理-其他-「开启/关闭数据库变更数据库捕获」

⚠️ 这里只能开启 数据库的 CDC,表需要单独开启,参考上方 1.3.1

 

5.阿里云

创建 账号,如需要开启数据库 CDC,则需要权限为 System Admin

根据不同示例和服务资源的不同规格会有无法开启 System Admin 权限的问题,具体参见:https://help.aliyun.com/document_detail/170736.html

 

以上配置好的数据库表就可以去明道云创建同步任务了,操作可以参考 明道云的数据集成能力:实时同步 MySQL 至工作表 (2.创建同步任务)