SQLServer 提供了 变更数据捕获(CDC) link 的功能,允许应用程序追踪用户表的数据库操作(如插入、更新和删除),这一能力非常适用于实时同步数据到明道云工作表。
以下是以腾讯云 SQLServer2012 为例,开启 SQL Server 变更数据捕获的操作说明。
简要目录
- 准备数据库
- 支持的数据库版本:2012, 2014, 2016, 2017, 2019
- 开启数据库的 CDC
- 开启表的 CDC 者
- 腾讯云的 SQLServer 开启 CDC
- 阿里云的 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:
参考文档:
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.创建同步任务)