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 查看
兼容性配置(必须配置在 90 兼容性及以上)
不然会出现此告警:Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: ‘(’ 附近有语法错误。
获取所有库表名
SELECT NAME FROM SYSOBJECTS WHERE XTYPE='U' ORDER BY NAME
- 验证用户是否可以访问CDC表
EXEC sys.sp_cdc_help_change_data_capture
debezium告警
-
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: ‘(’ 附近有语法错误
配置sqlserver 的兼容级别 为 90及以上即可
-
Caused by: java.lang.NullPointerException: key must not be null
在迁移数据库表的时候表必须有主键(配置对应的主键即可)
-
https://jingyan.baidu.com/article/574c52193784e06c8c9dc157.html (查看SQLserver 文件组)
https://jingyan.baidu.com/article/ca41422f0d1f701eaf99ed6f.html (查看账号 角色)