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

docker安装

bash 复制代码
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语句

sql 复制代码
EXEC sys.sp_cdc_enable_db;

校验

sql 复制代码
SELECT is_cdc_enabled FROM sys.databases WHERE name = YourDatabaseName 

开启表cdc

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

批量开启表cdc

sql 复制代码
-- 确保当前数据库已启用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
BEGIN
    IF NOT EXISTS (SELECT 1 FROM sys.change_tracking_tables WHERE object_id = OBJECT_ID(@CurrentTableName) AND is_track_columns_updated_on = 1)
    BEGIN
        DECLARE @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;
    END

    FETCH NEXT FROM TableCursor INTO @CurrentTableName;
END

CLOSE TableCursor;
DEALLOCATE TableCursor;

docker中启动SQL Server Agent

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

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

检查是否开启成功

sql 复制代码
-- 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;
相关推荐
数据库那些事儿11 小时前
DMS Airflow:企业级数据工作流编排平台的专业实践
数据库
一 乐11 小时前
流浪动物救助|流浪猫狗救助|基于Springboot+vue的流浪猫狗救助平台设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设
好记忆不如烂笔头abc11 小时前
Configuration of TCP/IP with SSL and TLS for Database Connections
数据库·网络协议·ssl
安全系统学习11 小时前
自学网络安全学习的误区和陷阱
数据库·学习·安全·web安全·网络安全·安全架构
黄色茶杯12 小时前
AI编程工具TRAE解决日常问题之SQLite数据复制
数据库·sqlite
老华带你飞12 小时前
订票系统|车票管理系统|基于Java+vue的车票管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·订票系统
weixin_wx520-198312 小时前
骑士人才网全系与phpyun人才网系统数据转移或互转的技术文档和要领,和大家一起共勉
数据库·骑士人才网开源版·骑士人才网数据转移·phpyun人才网源码
聆风吟º12 小时前
国产化数据库选型深度剖析:金仓KES与达梦DM全生命周期成本对比
数据库·kingbasees
码农阿豪12 小时前
金仓KES vs. 达梦DM:全面对比解析迁移、运维与授权成本
运维·数据库·国产
qqxhb13 小时前
系统架构设计师备考第67天——数据库系统的安全&系统架构的脆弱性
数据库·安全·系统架构·访问控制·完整性·脆弱性·身份鉴别