sqlserver开启CDC

news2025/1/19 23:14:06

1、背景

由于需要学习flink cdc,并且数据选择sqlserver,所以这里记录sqlserver的cdc开启操作步骤。

2、基础前提

官方介绍地址:https://learn.microsoft.com/zh-cn/sql/relational-databases/track-changes/enable-and-disable-change-data-capture-sql-server?view=sql-server-ver15

CDC即表示变更数据捕获,变更数据捕获使用 SQL Server 代理记录表中发生的插入、更新及删除。因为sqlserver对于数据库的操作日志,不像mysql那样对外可以轻松访问,所以需要通过一个代理服务端的机制去提供类似bin-log日志的功能。

官方介绍:

变更数据捕获的更改数据源为 SQL Server 事务日志。 在将插入、更新和删除应用于跟踪的源表时,将会在日志中添加说明这些更改的项。 日志用作捕获进程的输入来源。 然后,它会读取日志,并在跟踪的表的关联更改表中添加有关更改的信息。 系统将提供一些函数,以枚举在更改表中指定范围内发生的更改,并以筛选的结果集的形式返回该值。 通常,应用程序进程使用筛选的结果集在某种外部环境中更新源表示形式。

3、Sqlserver2019开启cdc操作

  • 查看账号的权限
EXEC sp_helpsrvrolemember 'sysadmin'
  • 查看库是否开启cdc
select is_cdc_enabled,name from sys.databases where name='your db name';
  • 对数据库启动cdc
// mydb是需要开启的数据库, Go表示执行之后结束本次会话
use mydb 
GO
exec sys.sp_cdc_enable_db
Go
  • 查看数据库是否开启cdc
// 查询数据库的开启状态,结果为1代表已开启
select is_cdc_enabled,name from sys.databases;
or
select is_cdc_enabled,name from sys.databases where name = 'your database name'

此时刷新,会发现schemas下多出了cdc

  • 查看表是否开启cdc
// 查询单个表是否开启CDC(返回状态,状态为1表示成功开启CDC功能)
SELECT is_tracked_by_cdc FROM sys.tables WHERE name='Student';

// 验证表的CDC开启,查询所有开启CDC功能的表(会返回表名和状态:状态为1表示开启CDC功能
SELECT name,is_tracked_by_cdc FROM sys.tables WHERE  is_tracked_by_cdc = '1';
  • 对表开启cdc
// 开启表cdc
EXEC sys.sp_cdc_enable_table
        @source_schema = 'dbo',
        @source_name = 'Student',
        @supports_net_changes = 0,
        @role_name = NULL;

正常情况下,刷新之后会发现多出来了dbo_Student_CT.

至此,库、表已开启了CDC。

  • 确认CDC agent是否已正常启动(重要
// 查看代理服务是否启动,如果结果是stop,需要到sqlserver服务器开启代理
EXEC master.dbo.xp_servicecontrol N'QUERYSTATE',N'SQLSERVERAGENT';

如果是stop,说明未开启的,需要去sqlserver的服务器端进行开启。

--- sqlserver cdc agent服务代理开启,步骤

// 1、找到sqlserver的容器信息
docker ps 

// 2、进入容器,需要加-uroot
docker exec -it -uroot 1710518237bb 

// 3、执行
/opt/mssql/bin/mssql-conf set sqlagent.enabled true 

// 4、完成上述操作,重启sqlserver容器
docker restart 1710518237bb 

--- 经过上述操作,再查看代理服务状态应该是开启了

4、测试验证

  • 在Student表中新增记录

在对应的cdc的dbo_Student_CT中可以看到新增操作记录信息。

至此,说明整个过程是成功!

5、草稿记录

以下是学习时的操作记录

--- 开启cdc, 在需要开启cdc的数据库下执行该指令
exec sys.sp_cdc_enable_db;

--- 查询数据库的开启状态,结果为1代表已开启
select is_cdc_enabled,name from sys.databases;

--开启SQL server agent服务(逐条执行)
sp_configure 'show advanced options', 1;
GO 
RECONFIGURE;
GO 
sp_configure 'Agent XPs', 1;
GO 
RECONFIGURE
GO 

--- 添加CDC功能需要的文件组和文件(必要)
--- 注意:这是必要的,创建单独的文件组和文件后会防止其在运行过程中与数据库的主资源争夺
       
--- 查询现有的文件的位置,直接在此目录下创建即可
SELECT name, physical_name FROM sys.master_files WHERE database_id = DB_ID('test_db');

--添加文件组
ALTER DATABASE test_db ADD FILEGROUP CDC2;
 
--添加文件,FILENAME 填写docker 容器内部的地址路径
ALTER DATABASE test_db 
ADD FILE
(
  NAME= 'CDC', 
  FILENAME = '/opt/cdc/CDC.ndf',
  SIZE = 200MB,
  FILEGROWTH = 100MB -- 设定文件的自动增长量为100MB
)
TO FILEGROUP CDC2;

-- 修改文件组的文件
ALTER DATABASE test_db
MODIFY FILE
(  
	NAME = 'CDC', 
	FILEGROWTH = 100MB
);


--- 开启表cdc
EXEC sys.sp_cdc_enable_table
        @source_schema = 'dbo',
        @source_name = 'Student',
        @capture_instance = NULL,
        @supports_net_changes = 1,
        @role_name = NULL, 
        @index_name = NULL, 
        @captured_column_list = NULL, 
        @filegroup_name = 'CDC2';
       
EXEC sys.sp_cdc_enable_table
        @source_schema = 'dbo',
        @source_name = 'Test',
        @capture_instance = NULL,
        --@supports_net_changes = 1,
        @role_name = NULL, 
        @index_name = NULL, 
        @captured_column_list = NULL, 
        @filegroup_name = 'CDC2';
       
EXEC sys.sp_cdc_enable_table
        @source_schema = 'dbo',
        @source_name = 'TestTable',
        @capture_instance = NULL,
        @supports_net_changes = 1,
        @role_name = NULL, 
        @index_name = NULL, 
        @captured_column_list = NULL, 
        @filegroup_name = 'CDC2';
       
--- 验证表的CDC开启,查询所有开启CDC功能的表(会返回表名和状态:状态为1表示开启CDC功能
SELECT name,is_tracked_by_cdc FROM sys.tables WHERE  is_tracked_by_cdc = '1';

--- 查询单个表是否开启CDC(返回状态,状态为1表示成功开启CDC功能)
SELECT is_tracked_by_cdc FROM sys.tables WHERE name='Student';


--- 关闭表CDC和数据库CDC

--- 关闭表CDC
EXEC sys.sp_cdc_disable_table @source_schema = 'dbo', @source_name = 'Student', @capture_instance = 'all';
 
--关闭数据库CDC
EXEC sys.sp_cdc_disable_db;

-- 查看CDC 作业配置
sys.sp_cdc_help_jobs

--- 查看账号的权限
EXEC sp_helpsrvrolemember 'sysadmin';

--- 查看代理服务是否启动,如果结果是stop,需要到sqlserver服务器开启代理
EXEC master.dbo.xp_servicecontrol N'QUERYSTATE',N'SQLSERVERAGENT';

--- sqlserver服务器开启代理,步骤
--- docker 安装的sqlserver
--- docker ps 找到sqlserver的容器信息
--- docker exec -it -uroot 1710518237bb  进入容器,需要加-uroot
--- /opt/mssql/bin/mssql-conf set sqlagent.enabled true 执行该脚本
--- docker restart 1710518237bb  重启sqlserver容器
--- 经过上述操作,再查看代理服务状态应该是开启了





















       

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1880893.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快递物流仓库管理系统java项目springboot和vue的前后端分离系统java课程设计java毕业设计

文章目录 快递物流仓库管理系统一、项目演示二、项目介绍三、部分功能截图四、部分代码展示五、底部获取项目源码(9.9¥带走) 快递物流仓库管理系统 一、项目演示 快递物流仓库管理系统 二、项目介绍 语言: Java 数据库:MySQL 前…

论文阅读《U-KAN Makes Strong Backbone for MedicalImage Segmentation and Generation》

Abstract U-Net 已成为图像分割和扩散概率模型等各种视觉应用的基石。虽然通过结合transformer或 MLP,U-Net 已经引入了许多创新设计和改进,但仍然局限于线性建模模式,而且可解释性不足。为了应对这些挑战,我们的直觉受到了 Kolm…

PotPlayer安装及高分辨率设置

第1步: 下载安装PotPlayer软件 PotPlayer链接:https://pan.baidu.com/s/1hW168dJrLBonUnpLI6F3qQ 提取码:z8xd 第2步: 下载插件,选择系统对应的位数进行运行,该文件不能删除,删除后将失效。 …

云计算HCIE+RHCE学员的学习分享

大一下学期,我从学长嘴里了解到誉天教育,当时准备考RHCE,我也了解了很多培训机构,然后学长强烈给我推荐誉天,我就在誉天报名了RHCE的课程。 通过杨峰老师的教学,我学到了许多Linux知识,也了解了…

【87 backtrader期权策略】基于50ETF期权的covered-call-strategy

前段时间有读者希望能够实现一个期权策略的模板,这段时间通过akshare下载了期权的数据,并进行了清洗,写了一个最简单的期权策略,供大家参考。 策略逻辑: 这是151 trading strategies中的一个期权策略。 买入50ETF基金,手续费按照万分之二计算,一直持有卖出一个最远期的…

Analyze an ORA-12801分析并行 parallel 12801 实际原因

"ORA-06512: at "PKG_P_DATA", line 19639 ORA-06512: at "PKG_P_DATA", line 19595 ORA-06512: at "PKG_P_DATA", line 14471-JOB 调用 -ORA-12801: error signaled in parallel query server P009, instance rac2:dwh2 (2) Error: ORA-12…

基于YOLOv9的PCB板缺陷检测

数据集 PCB缺陷检测,我们直接采用北京大学智能机器人开放实验室数据提供的数据集, 共六类缺陷 漏孔、鼠咬、开路、短路、杂散、杂铜 已经对数据进行了数据增强处理,同时按照YOLO格式配置好,数据内容如下 模型训练 ​ 采用YOLO…

❤ Gitee平台的使用

Gitee平台的使用 文章目录 Gitee平台的使用一、Gitee的注册1、注册2、添加邮箱 二、仓库的创建 和 团队成员的添加1、单击右上角的 **+** 号 、创建仓库2、如下填写即可 三、仓库克隆到本地1、安装好git 和 小乌龟(TortoiseGit)2、打开仓库 复…

Objective-C使用块枚举的细节

对元素类型的要求 在 Objective-C 中,NSArray 只能存储对象类型,而不能直接存储基本类型(例如 int)。但是,可以将基本类型封装在 NSNumber 等对象中,然后将这些对象存储在 NSArray 中。这样,en…

IIS在Windows上的搭建

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 目录 一 概念: 二网络…

五、Pentium 微处理器保护模式存储管理,《微机系统》第一版,赵宏伟

一、分段存储管理 Pentium支持分段存储管理、分页存储管理和段页式存储管理。 1.1 分段存储管理的基本思想 一个程序由多个模块组成。 每一个模块都是一个特定功能的独立的程序段。 段式管理:把主存按段分配的存储管理方式。 程序模块→段→段描述符→段描述符…

基于Java校园短期闲置资源置换平台设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…

1.搭建篇——帝可得后台管理系统

目录 前言项目搭建一、搭建后端项目1.初始化项目Maven构建 2.MySQL相关导入sql配置信息 3. Redis相关启动配置信息 4.项目运行 二、 搭建前端项目1.初始化项目2.安装依赖3.项目运行 三、问题 前言 提示:本篇讲解 帝可得后台管理系统 项目搭建 项目搭建 一、搭建后…

【多媒体】Java实现MP4视频播放器【JavaFX】【音视频播放】

在Java中播放视频可以使用多种方案,最常见的是通过Swing组件JFrame和JLabel来嵌入JMF(Java Media Framework)或Xuggler。不过,JMF已经不再被推荐使用,而Xuggler是基于DirectX的,不适用于跨平台。而且上述方案都需要使用第三方库。…

CleanShot X - 超好用苹果电脑截图录屏工具

Mac 自带的截图工具十分鸡肋,不仅功能少,无法长截图外,也不支持 GIF 制作,很难满足日常做图需求。 CleanShot X 是一款 Mac 平台近乎无可挑剔的专业截图录屏工具 ,能完美代替 Mac 自带截图。它提供超过 50 项功能&…

SpringBoot使用redis 笔记(视频摘抄 哔哩哔哩博主(感谢!):遇见狂神)

springboot集成redis步骤 1.创建springboot项目 2.配置连接 3.测试 创建springboot项目 创建以一个Maven项目 创建之后查看pom.xml配置文件,可以看到 pom文件里面导入了 data-redis 的依赖,那我们就可以在知道,springboot集成redis操作…

VBA代码解决方案第十五讲:如何对单元格区域进行高亮显示

《VBA代码解决方案》(版权10028096)这套教程是我最早推出的教程,目前已经是第三版修订了。这套教程定位于入门后的提高,在学习这套教程过程中,侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一样把自己喜欢的代码…

实验4 图像空间滤波

1. 实验目的 ①掌握图像空间滤波的主要原理与方法; ②掌握图像边缘提取的主要原理和方法; ③了解空间滤波在图像处理和机器学习中的应用。 2. 实验内容 ①调用 Matlab / Python OpenCV中的函数,实现均值滤波、高斯滤波、中值滤波等。 ②调…

Redis基础教程(二):redis数据类型

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

揭秘品牌推广的制胜之道:步骤、流程、方法与技巧全攻略!

品牌推广是现代营销战略中的核心环节,对于提升品牌知名度、塑造品牌形象以及扩大市场份额具有举足轻重的作用。 作为一名手工酸奶品牌的创始人,目前全国复制了100多家门店,我来为大家分享品牌推广的制胜之道,包括具体步骤、流程、…