SQL SERVER如何开启CDC
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容介绍了"SQL SERVER如何开启CDC"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录
千家信息网最后更新 2026年11月02日SQL SERVER如何开启CDC2.4 开启表级别CDC
2.5 单表开启测试范例(仅供参考,可略过)
本篇内容介绍了"SQL SERVER如何开启CDC"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
目录
1. 环境检查
1.1 版本检查
1.2 检查CDC服务开启状态
2. 开启CDC
2.1 开启SQL server agent服务
2.2 开启数据库级别的CDC功能
2.3 添加CDC专用的文件组和文件
2.4 开启表级别CDC
2.5 单表开启测试范例(仅供参考,可略过)
2.6 开启成功说明
2.7 DDL操作:DDL操作需要重新收集表的信息(以测试表test_hht为例)
3. 关闭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.1RECONFIGURE;GO -- 2.1.2sp_configure 'Agent XPs', 1;GO -- 2.1.3RECONFIGUREGO -- 2.1.4
2.2 开启数据库级别的CDC功能
ALTER AUTHORIZATION ON DATABASE::[dbname] TO [sa];-- 2.2.1 变更为sa的权限,数据库名为dbnameif exists(select 1 from sys.databases where name='dbname' and is_cdc_enabled=0)begin exec sys.sp_cdc_enable_dbend;-- 2.2.2 开启语句select is_cdc_enabled from sys.databases where name='dbname';-- 2.2.3 检查是否开启成功,为1则开启/* -- 本段注释可不看或者USE ERPGO -- 开启:EXEC sys.sp_cdc_enable_db -- 关闭:EXEC sys.sp_cdc_disable_dbGO 注释: 如果在禁用变更数据捕获时为数据库定义了很多捕获实例,则长时间运行事务可能导致 sys.sp_cdc_disable_db 的执行失败。通过在运行 sys.sp_cdc_disable_db 之前使用 sys.sp_cdc_disable_table 禁用单个捕获实例,可以避免此问题。 示例: USE AdventureWorks2012; GO EXECUTE sys.sp_cdc_disable_table @source_schema = N'HumanResources', @source_name = N'Employee', @capture_instance = N'HumanResources_Employee';*/
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 dbnameADD FILE( NAME= 'dbname_CDC1', FILENAME = 'D:\DATA\dbname_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_nameEND;-- 2.4.2 为dbname.dbo.AccountBase开启表级别CDC,文件组为CDC1DECLARE @tableName nvarchar(36) -- 声明变量DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT 'new_srv_workorderBase' nameunion select 'tablename1'union select 'tablename2'union select 'tablename3' ) --查出需要的集合放到游标中OPEN My_Cursor; --打开游标FETCH NEXT FROM My_Cursor INTO @tableName;WHILE @@FETCH_STATUS = 0BEGIN 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;ENDCLOSE 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_hhtIF 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_nameEND; -- 开启表级别CDCinsert 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系列表。
/*cdc._CT 可以看到,这样命名的表,是用于记录源表更改的表。对于insert/delete操作,会有对应的一行记录,而对于update,会有两行记录。对于__$operation列:1 = 删除、2= 插入、3= 更新(旧值)、4= 更新(新值)对于__$start_lsn列:由于更改是来源与数据库的事务日志,所以这里会保存其事务日志的开始序列号(LSN)*/
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最多允许两个捕获表,所以多次改变时需要先禁用之前的表3. 关闭CDC
EXEC sys.sp_cdc_enable_table@source_schema = 'dbo',@source_name = 'test_hht',@capture_instance ='dbo_test_hht_v2'-- 3.1 单表禁用USE dbnameGOEXEC sys.sp_cdc_disable_dbGO-- 3.2 全库禁用(禁用后cdc的模式消失)
"SQL SERVER如何开启CDC"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
数据
文件
测试
检查
数据库
游标
级别
服务
查询
成功
事务
日志
仅供参考
信息
内容
功能
实例
更多
模式
注释
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网金融科技
华服互联网科技怎么样
国智互联网科技
互联网电商科技
互联网科技会
盈实互联网科技
深圳互联网科技公司
互联网科技金融公司
安徽鑫晟辉互联网科技
互联网金融科技创新
广西拼得多互联网科技有限公司
移动互联网科技股
受益于互联网科技的高速发展
互联网科技与管理
苏州铭阳互联网科技有限公司
新氧科技和美国互联网有关系吗
江苏互联网智能科技产品出厂价
互联网科技收购价值
承德科技产业互联网平台
科技美学互联网 艺术
百单网互联网科技有限公司怎么样
科技互联网龙头
金诺互联网科技
互联网金融 金融科技
互联网未来科技
南博望互联网科技有限公司
山东子淼互联网科技有限公司
互联网领先科技宣传片
工业互联网科技成果转化
卡尔迅互联网科技有限公司