sqlserver开启CDC

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.mzph.cn/pingmian/38888.shtml

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

相关文章

隐式转换的魔法:Scala中隐式转换的深度解析

隐式转换的魔法:Scala中隐式转换的深度解析 在Scala编程语言的丰富特性中,隐式转换是一个强大而微妙的工具。它允许开发者在不改变现有代码的情况下,扩展或修改类的行为。本文将深入探讨Scala中隐式转换的工作原理,并通过详细的代…

如何优化前端性能:提高网页加载速度的实用技巧

我们在前端开发中,性能优化是提高用户体验的关键因素。网页加载速度直接影响用户的满意度和留存率。本文将介绍几种优化前端性能的实用方法,帮助你提高网页加载速度。 问题描述 : 首先前端性能优化涉及多个方面,包括减少HTTP请…

Java命名规范:

Java命名规范: 大驼峰命名法/帕斯卡命名法: ​ 作用:类名、接口名 ​ 规则:每个单词首字母大写 ​ ps: ​ public class HelloWorld{} ​ 小驼峰命名法: ​ 作用:方法名、变量名 ​ 规则&am…

专为运维工程师设计!阿里藏经阁出品的Python实战手册被我搞来了

Python 可能是极少数既简单又强大的编程语言中的一种。更重要的是,用它来编程是非常快乐的事。 今天给小伙伴们分享的是阿里“藏经阁”出品的专门给运维工程师设计的Python实战手册 废话不多说,下面把内容展示给大家 01 Python快速回顾 02 Python脚本…

【大模型】基于ChatGLM进行微调及应用 [更新中......]

文章目录 一、前言二、说明2.1 代码结构2.2 依赖包版本 三、启动对话演示3.1 命令行交互 cli_demo.py3.2 网页交互 web_demo.py 四、微调模型4.1 基于 P-Tuning v2 微调模型4.1.1 软件依赖4.1.2 下载数据集4.1.3 下载模型文件4.1.4 操作步骤 4.2 基于 Full Parameter 微调模型4…

洛谷P10677题解

题目描述 给一个 n m n\times m nm 的字符矩阵,有些位置有障碍(记为字符 #),需要在矩阵上找出一条起始点任意的路径(可以重复经过某个格子),使得字典序最大。 可以证明答案一定是有限的或者…

从进程到协程,浅谈Java提高CPU利用率的发展

综合CPU利用率来讲,计算机远古时期,为提高CPU利用率,有以下概念 串行进程->并行进程->线程->线程池>->虚拟线程(协程) 一,串行进程, 早期的操作系统对任务调度,往往从最简单的实现开端,串型进程意思是对分配的一个任务,其任务能百分百占用CPU,哪怕…

前程无忧滑块

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 前言(lianxi …

OpenCV学习之cv2.addWeighted函数

OpenCV学习之cv2.addWeighted函数 一、简介 在图像处理和计算机视觉中,图像融合是一种常见的操作。cv2.addWeighted 函数是 OpenCV 提供的用于对两幅图像进行加权融合的函数,通过对图像像素值进行线性加权和偏移,可以实现图像的混合和过渡效…

日期时间显示网页

SweetOrange_Clock 🕘 一、简介 1、这个项目包括一个HTML文件,其中包含页面的样式和脚本。 2、页面以优雅的黑白配色为主题,突出了实用性和视觉冲击力,使得显示内容在视觉上更为突出和易于阅读。 3、这是一个日期时间显示器。通…

高通源代码版本ADK工具版本源代码release版本MDE版本介绍

0 Preface/Foreword 1 版本介绍 高通代码存放在chipcode中,网址URL:Chipcode 1.1 高通源代码版本 Bluetooth Audo芯片的高通源代码版本号(类似于分类的类名):ADK.SRC.1.0 (最新qcc307x系列及之后的芯片如…

SQL中Order by详解

在 MySQL 中,ORDER BY 语句用于对查询结果进行排序。 语法: SELECT column1, column2,... FROM table_name ORDER BY column_name [ASC | DESC];以下是对其主要部分的详细解释: column_name :指定要依据其进行排序的列名。 ASC…

Pycharm安装依赖

1. IDE集成的错误解决 鼠标悬停,点击 install 2. 配置环境 ctrlalts 3. 终端运行pip (要求有先有一个pip) 最好用最简单

NSE and KGE

NSE(Nash-Sutcliffe Efficiency): 解释:NSE 是衡量水文模型模拟结果与观测值之间拟合程度的指标。它计算模拟值与观测值之间的均方误差,并将其与观测值的方差进行比较。NSE 的取值范围为-∞至 1,值越接近 1…

切片的基础知识

文章目录 ● Slice 的底层实现原理?● array 和 Slice 的区别?● 拷贝大切片一定比小切片代价大吗?● Slice 深拷贝和浅拷贝?● 零切片、空切片、nil切片?● Slice 的扩容机制?● Slice 为什么不是线程安全…

Python进阶教程--科学计算基础软件包NumPy

NumPy(Numerical Python)是一个开源的Python库,用于科学计算。它提供了一个高性能的多维数组对象和用于处理这些数组的工具。NumPy是Python科学计算的基础库,被广泛用于数据分析、机器学习、科学计算等领域。 1.1 NumPy 概述 Nu…

C++把一个类封装成动态链接库

一、步骤 1. 创建类头文件 首先,定义你要封装的类。例如,创建一个名为MyClass的类: // MyClass.h #pragma once#ifdef MYCLASS_EXPORTS #define MYCLASS_API __declspec(dllexport) #else #define MYCLASS_API __declspec(dllimport) #end…

智能扫地机器人程序中出现的问题可以参考的解决方案

在解决智能扫地机器人程序中可能遇到的问题时,可以参考以下分点表示和归纳的解决方案: 环境感知与地图构建 ① 使用先进的传感器技术:如激光雷达、超声波和红外传感器,以提高环境感知的准确性和可靠性。 ② 优化地图构建算法&a…

AI辅助设计:如何通过机器学习革新创意工作流程

🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云专家博主 📌 擅长领域:全栈工程师、爬虫、ACM算法,大数据,深度学习 💒 公众号…

WCCI 2024开幕,横滨圣地巡礼,畅游动漫与美食的世界

惊喜!WCCI 2024开幕,横滨圣地巡礼!畅游动漫与美食的世界 会议之眼 快讯 会议介绍 IEEE WCCI(World Congress on Computational Intelligence)2024,即2024年IEEE世界计算智能大会,于6月30日至…