这里写自定义目录标题
- 写在前面
- SQL Server开启CDC
- 1. 将指定库的实例先开启CDC
- 2. 开启需要开启CDC的表
- 3. 关闭CDC功能
- 更详细信息参照官网
写在前面
鉴于老旧数据的结构和项目都在sqlserver上存储,且迁移成本巨大,当下要为sqlserver的存储过程减负。要将一部分流式的动态数据实现实时查询并存储数仓。那在现有的数据环境下, 将sqlserver的数据通过flink 接管实现数据输出和仓库存储。
SQL Server开启CDC
数据同步的开启方式对于sqlserver来说有点特殊,集成在现有的环境中,我们的sqlserver是2012版本的
具体操作如下:
1. 将指定库的实例先开启CDC
命令:
USE database;
GO
EXEC sys.sp_cdc_enable_db
必须指定库名先开启CDC不然会报类似以下的错:
请确保已设置正确的数据库上下文,然后重试该操作。若要报告数据库已启用变更数据
执行成功之后会在sys下创建以下几张表,通过客户端,可以在系统表的目录下看到
cdc.captured_columns
cdc.change_tables
cdc.ddl_history
cdc.index_columns
cdc.lsn_time_mapping
dbo.systranschemas
执行之后查看对应的数据库是否已经开启,可以查看已经开启CDC的库都有那些:
命令:
select *
from sys.databases where is_cdc_enabled = 1
2. 开启需要开启CDC的表
指定的库开启了CDC之后,可以单独指定具体某一个表来开启CDC功能,可以通过命令来实现具体某个表启用CDC
命令:
EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 't1', @role_name = null;
为第一个表启用CDC后,SQLServer生成两个Agent作业
cdc.dbname_capture
cdc.dbname_cleanup
具体的命令可以通过找到官网相关介绍来查看更多的关于sqlserver CDC的东西
查看刚刚开启CDC的表是否启用了CDC
select name, is_tracked_by_cdc
from sys.tables where object_id = OBJECT_ID('dbo.t1')
当然,也可以查看哪些表开启了CDC
select name, is_tracked_by_cdc
from sys.tables where is_tracked_by_cdc = '1'
3. 关闭CDC功能
关闭表(“dbo.t1”)的CDC
EXEC sys.sp_cdc_disable_table @source_schema = 'dbo', @source_name = 't1', @capture_instance = 'all';
禁用数据库所有实例CDC
EXEC sys.sp_cdc_disable_db;
更详细信息参照官网
https://ververica.github.io/flink-cdc-connectors/master/content/connectors/sqlserver-cdc.html