赞
踩
鉴于老旧数据的结构和项目都在sqlserver上存储,且迁移成本巨大,当下要为sqlserver的存储过程减负。要将一部分流式的动态数据实现实时查询并存储数仓。那在现有的数据环境下, 将sqlserver的数据通过flink 接管实现数据输出和仓库存储。
数据同步的开启方式对于sqlserver来说有点特殊,集成在现有的环境中,我们的sqlserver是2012版本的
具体操作如下:
命令:
- 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
指定的库开启了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'
关闭表(“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;
另外如果SqlServer没有开启SqlServer代理请看:
2021-09-06 docker中SqlServer开启代理服务,并配置cdc_docker安装sqlserver2007并启用cdc_KX-UP的博客-CSDN博客
补充一句,如果操作提示没权限:
docker exec -it -u root sql1 /bin/bash
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。