sql server2008 cdc 数据实时同步到kafka

sql server 2008 开启 cdc

开启数据库 cdc (只能对有主键或者有唯一索引的表开启cdc)

查看sql server的代理状态

关闭

开启

EXECUTE sys.sp_cdc_enable_db

开启后如图会自动创建一个 数据库实例为 cdc 并包括以下表

####  CDC  表说明

cdc.change_tables:表开启cdc后会插入一条数据到这张表中,记录表一些基本信息

cdc.captured_columns:开启cdc后的表,会记录它们的字段信息到这张表中

cdc.dbo_VW_GHZDK_CT:记录VW_GHZDK表中所有变更的数据,字段“__$operation”为“1”代表删除,“2”代表插入,“3”执行更新操作前的值,“4”执行更新操作后的值。字段“__$start_lsn”由于更改是来源于数据库的事务日志,所以这里会保存其事务日志的开始序列号(LSN)
函数:

cdc.fn_cdc_get_all_changes_dbo_VW_GHZDK:针对在指定日志序列号 (LSN) 范围内应用到源表的每项更改均返回一行。如果源行在该间隔内有多项更改,则每项更改都会表示在返回的结果集中

cdc.fn_cdc_get_net_changes_dbo_VW_GHZDK:针对指定 LSN 范围内每个已更改的源行返回一个净更改行。也就是说,如果在 LSN 范围内源行具有多项更改,则该函数将返回反映该行最终内容的单一行

sys.fn_cdc_map_time_to_lsn:为指定的时间返回 cdc.lsn_time_mapping 系统表中 start_lsn 列中的日志序列号 (LSN) 值。可以使用此函数系统地将日期时间范围映射到基于 LSN 的范围,以供变更数据捕获枚举函数 cdc.fn_cdc_get_all_changes_<capture_instance> 和 cdc.fn_cdc_get_net_changes_<capture_instance> 返回此范围内的数据更改。

查看cdc状态

select is_cdc_enabled from sys.databases where name='u8ab'

禁用cdc

EXEC sys.sp_cdc_disable_db #必须清除所有表的 cdc

获取库所有表

select * from sysobjects where xtype='U' AND uid=1 ORDER BY name

查看有主键的表

SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS  WHERE CONSTRAINT_TYPE = 'PRIMARY KEY' and TABLE_SCHEMA='dbo'  ORDER BY TABLE_NAME

开启某个表的 cdc 功能

配置数据捕获实例
EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo'
  , @source_name = N'LookupCurrency2'
  , @role_name = N'cdc_admin'    --增加的角色
  , @supports_net_changes = 1
  , @index_name = N'AverageRate' --主键名可以不加
  , @filegroup_name = N'PRIMARY';
# source_schema    数据库模式
# source_name      开启cdc表名
# role_name        角色名 (默认可以使用 cdc_admin)
# filegroup_name   文件组名(默认可以使用 PRIMARY )
#注  数据库表必须有 主键 表里面必须有数据  要不然在创建kafka topic的时候会失败  kafka的topic只能有一个分区 这样才能保证数据的有序

查看变更数据捕获

EXEC sys.sp_cdc_help_change_data_capture

禁用表 AdminUser 变更捕获#

EXEC sys.sp_cdc_disable_table @source_schema = N'dbo', @source_name = N'AdminUser', @capture_instance = N'dbo_AdminUser';
  • role_name filegroup_name 可以通过 server manamgement stedio 查看
  • 1564455305616
  • 1564455305616

兼容性配置(必须配置在 90 兼容性及以上)

不然会出现此告警:Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: ‘(’ 附近有语法错误。

1565577550647

获取所有库表名

SELECT NAME FROM SYSOBJECTS WHERE XTYPE='U' ORDER BY NAME
  1. 验证用户是否可以访问CDC
EXEC sys.sp_cdc_help_change_data_capture
debezium告警
  1. Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: ‘(’ 附近有语法错误

    配置sqlserver 的兼容级别 为 90及以上即可

  2. Caused by: java.lang.NullPointerException: key must not be null

    在迁移数据库表的时候表必须有主键(配置对应的主键即可)

  3. https://jingyan.baidu.com/article/574c52193784e06c8c9dc157.html (查看SQLserver 文件组)
    https://jingyan.baidu.com/article/ca41422f0d1f701eaf99ed6f.html (查看账号 角色)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值