原理
关于SQL server的CDC的详细知识请查阅官网资料:
SQL server官网
启用数据库变更捕获命令
USE AdventureWorks;
GO
EXECUTE sys.sp_cdc_enable_db;
GO
启用表变更捕获命令
USE AdventureWorks;
GO
EXECUTE sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'test',
@role_name = N'cdc_Admin';
GO
查询开启了变更捕获功能的数据库
select * from sys.databases where is_cdc_enabled=1
查询开启了变更捕获功能的数据表
select * from sys.tables where is_tracked_by_cdc=1
cdc开启后的系统表

数据库开启CDC功能后,会再数据库下面的系统表新增cdc.tablename_CT等表,cdc.tablename_CT就存储了表tablename的所有新增、修改、删除的变化数据,[__$operation]=的值有1,2,3,4,其中1表示删除的记录,2表示新增的记录,3或4表示更新的记录,3是旧值,4是新值。
cdc开启后系统新增的作业

表变更捕获开启遇到的问题及解决
问题是:执行开启命令报错,提示执行 sp_helpserver 以获得报错的原因。执行结果让我想起了,这个数据库安装之后,我才更改计算机名称,因为要配置故障转移群集。所以安装的时候记录了旧的计算机名称,后来手动改过登录名,但是数据实际没改,因为要执行存储过程进行更改才有效,具体需要执行以下SQL脚本:
USE master
go
declare @serverproperty_servername varchar(100), @servername varchar(100)
--取得Windows NT 服务器和与指定的SQL server 实例关联的实例信息
--具体可以看联机丛书 serverproperty
SELECT @serverproperty_servername = CONVERT(varchar(100),SERVERPROPERTY('ServerName'))
-- 返回运行 Microsoft SQL server的本地服务器名称
--具体可以看联机从书@@SERVERNAME
SELECT @servername = CONVERT(varchar(100),@@SERVERNAME)
--如果@serverproperty_servername和@servername 不同(因为你改过计算机名称),再运行下面的
select @serverproperty_servername
select @servername
--删除错误的服务器名
EXEC sp_dropserver @server=@servername
--添加正确的服务器名
EXEC sp_addserver @server=@serverproperty_servername,@local='local'
执行如上脚本后,再执行:
sp_helpserver
确认数据已经更改,已经是新的计算机名称。
再重新执行 启用表变更捕获命令,执行成功!
最后修改时间:2024-03-28 18:08:52
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




