我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SQL SERVER CDC开启实操

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SQL SERVER CDC开启实操

SQL SERVER CDC开启实操

游标批量开启CDC;业务实战!

1. 环境检查

1.1 版本检查

SELECT @@VERSION;

Microsoft SQL Server 2016 (SP2-GDR)

1.2 检查CDC服务开启状态

select is_cdc_enabled from sys.databases where name="dbname";
--0为关闭,1为开启。数据库名为dbname

2. 开启CDC

2.1 开启SQL server agent服务

sp_configure "show advanced options", 1;
GO -- 2.1.1
RECONFIGURE;
GO -- 2.1.2
sp_configure "Agent XPs", 1;
GO -- 2.1.3
RECONFIGURE
GO -- 2.1.4

2.2 开启数据库级别的CDC功能

ALTER AUTHORIZATION ON DATABASE::[dbname] TO [sa];
-- 2.2.1 变更为sa的权限,数据库名为dbname
if exists(select 1 from sys.databases where name="dbname" and is_cdc_enabled=0)
begin
    exec sys.sp_cdc_enable_db
end
;
-- 2.2.2 开启语句
select is_cdc_enabled from sys.databases where name="dbname";
-- 2.2.3 检查是否开启成功,为1则开启

2.3 添加CDC专用的文件组和文件

SELECT name, physical_name FROM sys.master_files WHERE database_id = DB_ID("dbname");
-- 2.3.1 查询dbname库的物理文件
ALTER DATABASE dbname ADD FILEGROUP CDC1;
-- 2.3.2 为该库添加名为CDC1的文件组
ALTER DATABASE dbname
ADD FILE
(
  NAME= "dbname_CDC1",
  FILENAME = "D:DATAdbname_CDC1.ndf"
)
TO FILEGROUP CDC1;
-- 2.3.3 将新增文件,并映射到文件组。重复2.3.1查询操作

2.4 开启表级别CDC

SELECT name,is_tracked_by_cdc FROM sys.tables WHERE  is_tracked_by_cdc = 0;
-- 2.4.1 查询未开启的表
IF EXISTS(SELECT 1 FROM sys.tables WHERE name="AccountBase" AND is_tracked_by_cdc = 0)
BEGIN
    EXEC sys.sp_cdc_enable_table
        @source_schema = "dbo", -- source_schema
        @source_name = "AccountBase", -- table_name
        @capture_instance = NULL, -- capture_instance
        @supports_net_changes = 1, -- supports_net_changes
        @role_name = NULL, -- role_name
        @index_name = NULL, -- index_name
        @captured_column_list = NULL, -- captured_column_list
        @filegroup_name = "CDC1" -- filegroup_name
END;
-- 2.4.2 为dbname.dbo.AccountBase开启表级别CDC,文件组为CDC1
DECLARE @tableName nvarchar(36)  -- 声明变量
DECLARE My_Cursor CURSOR --定义游标
    FOR (SELECT "new_srv_workorderBase" name
union select "tablename1"
union select "tablename2"
union select "tablename3"
 ) --查出需要的集合放到游标中
OPEN My_Cursor; --打开游标
FETCH NEXT FROM My_Cursor INTO @tableName;
WHILE @@FETCH_STATUS = 0
BEGIN
    EXEC sys.sp_cdc_enable_table
         @source_schema = "dbo", -- source_schema
         @source_name = @tableName, -- table_name
         @capture_instance = NULL, -- capture_instance
         @supports_net_changes = 1, -- supports_net_changes
         @role_name = NULL, -- role_name
         @index_name = NULL, -- index_name
         @captured_column_list = NULL, -- captured_column_list
         @filegroup_name = "CDC1" -- filegroup_name;
    FETCH NEXT FROM My_Cursor INTO @tableName;
END
CLOSE My_Cursor; --关闭游标
DEALLOCATE My_Cursor; --释放游标
-- 2.4.3 游标批量开启表
SELECT name,is_tracked_by_cdc FROM sys.tables WHERE  is_tracked_by_cdc = 1 ORDER BY NAME;
-- 2.4.4 查询已开启的表

2.5 单表开启测试范例(仅供参考,可略过)

create table test_hht
(id varchar(36) not null primary key,
city_name varchar(20),
userid bigint,
useramount decimal(18,6),
ismaster bit,
createtime datetime default getdate()); -- 测试表test_hht
IF EXISTS(SELECT 1 FROM sys.tables WHERE name="test_hht" AND is_tracked_by_cdc = 0)
BEGIN
    EXEC sys.sp_cdc_enable_table
        @source_schema = "dbo", -- source_schema
        @source_name = "test_hht", -- table_name
        @capture_instance = NULL, -- capture_instance
        @supports_net_changes = 1, -- supports_net_changes
        @role_name = NULL, -- role_name
        @index_name = NULL, -- index_name
        @captured_column_list = NULL, -- captured_column_list
        @filegroup_name = "CDC1" -- filegroup_name
END; -- 开启表级别CDC
insert into test_hht(id,city_name,userid,useramount,ismaster)values("1","wuhan",     10,1000.25,1);
insert into test_hht(id,city_name,userid,useramount,ismaster)values("1A","xiangyang",11,11000.35,0);
insert into test_hht(id,city_name,userid,useramount,ismaster)values("1B","yichang",  12,12000.45,0); -- 插入数据测试
select *  from dbname.dbo.test_hht; -- 数据表
SELECT * FROM [cdc].[dbo_test_hht_CT]; -- CDC日志表

2.6 开启成功说明

dbname库出现cdc模式,并有CT系列表。


2.7 DDL操作:DDL操作需要重新收集表的信息(以测试表test_hht为例)

alter  table test_hht add   product_count decimal(18,2);
-- 2.7.1 增加新的一列测试
insert into test_hht(id,city_name,userid,useramount,ismaster,product_count)values("2","wuhan",     20,2000.25,1,2.5);
-- 2.7.2 插入数据测试
SELECT * FROM [cdc].[dbo_test_hht_CT];
-- 2.7.3 CT表无新的一列,CDC正常捕获到之前的列变化
EXEC sys.sp_cdc_enable_table
@source_schema = "dbo"
,@source_name = "test_hht"
,@capture_instance ="dbo_test_hht_v2" -- 给一个新的名字
,@supports_net_changes = 1
,@role_name = NULL
,@index_name = NULL
,@captured_column_list = NULL
,@filegroup_name = "CDC1";
-- 2.7.4 为表dbo.test_hht开启一个新的CDC捕获
insert into test_hht(id,city_name,userid,useramount,ismaster,product_count)values("2A","xiangyang",21,121000.35,0,12.5);
-- 2.7.5 插入数据测试
EXEC sys.sp_cdc_disable_table @source_schema = "dbo",@source_name = "test_hht", @capture_instance = "dbo_test_hht";
-- 2.7.6 SQL SERVER最多允许两个捕获表,所以多次改变时需要先禁用之前的表

2.8 参考资料

https://blog.csdn.net/vkingnew/article/details/89508885
https://blog.csdn.net/chiwei9644/article/details/100649089

3. 关闭CDC

EXEC sys.sp_cdc_enable_table
@source_schema = "dbo"
,@source_name = "test_hht"
,@capture_instance ="dbo_test_hht_v2"
-- 3.1 单表禁用
USE dbname
GO
EXEC sys.sp_cdc_disable_db
GO
-- 3.2 全库禁用(禁用后cdc的模式消失)

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SQL SERVER CDC开启实操

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SQL SERVER CDC开启实操

游标批量开启CDC;业务实战! 1. 环境检查1.1 版本检查SELECT @@VERSION;Microsoft SQL Server 2016 (SP2-GDR)1.2 检查CDC服务开启状态select is_cdc_enabled from sy
SQL SERVER CDC开启实操
2016-07-24

SQL Server 2005的cmd_shell组件的开启方法

这篇文章介绍了SQL Server 2005的cmd_shell组件的开启方法,有需要的朋友可以参考一下
2022-11-15

开启SQL Server网络访问的详细教程(图文)

前言目前工作中很少用到SQL Server了,最近需要测试几个js表,需要搭建一个SQL Server数据库服务,这里做个总结吧。安装这里就不做详细介绍了,本文只介绍如何开启SQL Server网络访问。1、云服务器安全组设置如果是
开启SQL Server网络访问的详细教程(图文)
2024-09-12

VS连接SQL server数据库及实现基本CRUD操作

这篇文章主要给大家介绍了关于VS连接SQL server数据库及实现基本CRUD操作的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
2023-01-13

VS连接SQL server数据库及实现基本CRUD操作

目录连接数据库使用dataGridView控件显示表中的数据。实现基本CRUD操作总结连接数据库打开vs,点击 视图,打开sql资源管理器,添加SQL Server输入服务器名称,用户名,密码,进行连接。如图,就可以看编程客栈到vs已经连
2023-01-13

PHP怎么操作SQL Server数据库实现表的改查与统计

今天小编给大家分享一下PHP怎么操作SQL Server数据库实现表的改查与统计的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧
2023-06-29

ubuntu开启SSH服务远程登录操作的实现

ssh–secure shell,提供安全的远程登录。从事嵌入式开发搭建linux开发环境中,ssh的服务的安装是其中必不可少的一步。ssh方便一个开发小组中人员登录一台服务器,从事代码的编写、编译、运行。方便代码的共享及管理。ssh是一种
2022-06-04

编程热搜

目录