当前位置: 首页 > news >正文

使用flink-cdc-sqlserver出现错误,需要批量开启sqlserver表cdc模式,监听表变化

docker安装

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=Zcyc123456" -p 1433:1433 --name sqlserver -d mcr.microsoft.com/mssql/server:2017-latest

开启库cdc模式

选择你自己的数据库,执行以下sql语句

EXEC sys.sp_cdc_enable_db;

校验

SELECT is_cdc_enabled FROM sys.databases WHERE name = YourDatabaseName 

开启表cdc

原因:即使您在数据库级别启用了CDC(Change Data Capture)功能,对于要捕获变更的特定表,仍然需要在表级别单独启用CDC。启动数据库级别的CDC功能为该数据库开启了使用CDC技术的基础环境,但不会自动对任何用户表进行变更数据捕获。

批量开启表cdc

-- 确保当前数据库已启用CDC
USE test;
GO-- 获取dbo架构下所有用户表名(可以根据需要修改查询以选择不同架构或添加其他过滤条件)
DECLARE @TableNames TABLE (TableName SYSNAME);INSERT INTO @TableNames (TableName)
SELECT t.name
FROM sys.tables t
WHERE t.is_ms_shipped = 0 -- 排除系统表和临时表
AND t.schema_id = SCHEMA_ID('dbo') -- 只考虑dbo架构下的表
-- AND t.some_column IS NOT NULL -- 添加任何其他你想要应用的筛选条件-- 遍历表格并启用CDC
DECLARE @CurrentTableName SYSNAME;DECLARE TableCursor CURSOR FOR
SELECT TableName FROM @TableNames;OPEN TableCursor;FETCH NEXT FROM TableCursor INTO @CurrentTableName;WHILE @@FETCH_STATUS = 0
BEGINIF NOT EXISTS (SELECT 1 FROM sys.change_tracking_tables WHERE object_id = OBJECT_ID(@CurrentTableName) AND is_track_columns_updated_on = 1)BEGINDECLARE @Sql NVARCHAR(MAX) = N'EXEC sys.sp_cdc_enable_table@source_schema = N''dbo'', @source_name = N''' + @CurrentTableName + ''', @role_name = NULL, @capture_instance = N''dbo_' + @CurrentTableName + '''';EXEC sp_executesql @Sql;ENDFETCH NEXT FROM TableCursor INTO @CurrentTableName;
ENDCLOSE TableCursor;
DEALLOCATE TableCursor;

docker中启动SQL Server Agent

还需要开启SQL Server Agent才能够使用cdc功能

docker exec -it sql1 "bash"root@b9a09ce17c02:/# /opt/mssql/bin/mssql-conf set sqlagent.enabled trueSQL Server needs to be restarted in order to apply this setting. Please run'systemctl restart mssql-server.service'.root@b9a09ce17c02:/# exitexit[root@localhost ~]#[root@localhost ~]# docker stop sql1sql1[root@localhost ~]# docker start sql1sql1

检查是否开启成功

-- Check if CDC is enabled on the database
SELECT name, is_cdc_enabled FROM sys.databases WHERE name = 'your_database_name';-- Check if CDC is enabled on the tables
SELECT s.name AS schema_name, t.name AS table_name, t.is_tracked_by_cdc
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE t.is_tracked_by_cdc = 1;
http://www.lryc.cn/news/294486.html

相关文章:

  • ffmpeg的使用,安装,抽帧,加水印,截图,生成gif,格式转换,抓屏等
  • 游戏视频录制软件推荐,打造专业电竞视频(3款)
  • 两种方式实现文本超出指定行数显示展开收起...
  • Docker进阶篇-Docker网络
  • 用两个队列实现栈
  • 【数据分享】1929-2023年全球站点的逐年降雪深度数据(Shp\Excel\免费获取)
  • Windows11安装运行Linux(Ubuntu)
  • 钉钉群机器人-发送群消息
  • OceanBase 4.2.2 GA 发布,全新特性快速预览!
  • IP代理類型詳解 | 基於網路協議、匿名性、IP來源
  • uniapp中使用EelementPlus
  • Swift Vapor 教程(查询数据、插入数据)
  • QT自用,勿点
  • 计组学习笔记2024/2/5
  • Redis(三)(实战篇)
  • MacOS系统电脑远程桌面控制windows系统电脑【内网穿透】
  • Verilog实现2进制码与BCD码的互相转换
  • Codeforces Round 901 (Div. 2) C. Jellyfish and Green Apple (思维)
  • K8s 集群可观测性-数据分流最佳实践
  • muduo库的模拟实现——工具部分
  • SpringBoot接入微信公众号【服务号】
  • 2023 英特尔On技术创新大会直播 |探索视觉AI的无限可能
  • 安卓视图基础
  • 电路设计(10)——超温报警电路的proteus仿真
  • gerrit(1) | gerrit 简介
  • 计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)
  • redis(5)
  • Postgresql体系结构
  • 【Rust】——rust前言与安装rust
  • 基于SpringBoot的家电销售展示网页的设计与实现