一.配置
- 增加Database File
- 添加FileGroup
- 添加File
- 数据库开启和关闭
-- 数据库开启
ALTER AUTHORIZATION ON DATABASE::AdventureWorks TO [sa]
USEAdventureWorks
GO
exec sys.sp_cdc_enable_db
GO
-- 数据库关闭
USEAdventureWorks
GO
exec sys.sp_cdc_disable_db
GO
-- 查看所有开启数据库
SELECTname,is_cdc_enabled FROMsys.databasesWHEREis_cdc_enabled =1;
- 数据表开启和关闭
--开启
IFEXISTS(SELECT1 FROMsys.tablesWHEREname='Person'ANDis_tracked_by_cdc =0)
BEGIN
EXEC sys.sp_cdc_enable_table
@source_schema ='Person',-- source_schema
@source_name ='Person',-- table_name
@capture_instance =NULL,-- capture_instance
@supports_net_changes =1,-- supports_net_changes
@role_name =NULL,-- role_name
@index_name =NULL,-- index_name
@captured_column_list =NULL,-- captured_column_list
@filegroup_name ='CDC'-- filegroup_name
END
--关闭
EXEC sys.sp_cdc_disable_table
@source_schema ='Person',-- source_schema
@source_name =' Person',-- table_name
@capture_instance ='capture_instance'-- capture_instance
二.SSIS使用CDC
1.初始化
如下图,需要先开发初始化的包,指定CDC 增量的开始;
在CDC Control Task Start中配置如下图,需要注意的点:
- CDC Control Opertation:Mark Initial load Start(标记为开始)
- Table to use for storing state:点击(new)新建cdc_State表用于记录同步更新点;
在 CDC Control End 中配置如下图,需要注意的点:
- CDC control operation:Mark Initial load end
2.增量获取
通过运行以上初始化的包,当前表就完成了抓取点的增量标记,接下来就可以开发增量包,完成数据的实时增量抓取,如下图:
1>CDC Control Task Start
如下图:通过配置CDC Control operation:Get Processing range 操作来获取数据的增量数据;
2>Data Flow Task
如下图:设置在Data Flow Task中通过CDC Source组件和CDC Split组件实现数据捕获。
- CDC Source:如下图,通过配置CDC Enable table实现连接上开启CDC的表。通过配置CDC Processing Mode为Net来获取数据。
- CDC Spliter实现将数据进行拆分成增删改数据,然后导入的目标库中;
3>CDC Control End
如下图:通过配置CDC Control poertaion:Mark processed range 操作来标记结束抓取更新点;
3.发布为JOB
1>.指定增量同步的包
2>.设计同步的Schedule:设置为每10S中同步一次;
注意:这里还是通过跑批的方式设置计划任务,主动去轮询获取增量数据,本质上并没有做到实时获取变动,只能做到伪实时。
SQL Server 的CDC如果使用微软的SSIS进行连接,更适合用的场景为:
需要记录某张表的所有变动记录(类似触发器)
Demo地址:SQLServerCDCSSISDemo-SQLServer文档类资源-CSDN下载