暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL server变更数据捕获CDC实践笔记

原创 数据库管理员陆美芳 2024-03-28
241

原理

关于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开启后的系统表

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

cdc开启后系统新增的作业

sqlservercdc02.png

表变更捕获开启遇到的问题及解决

问题是:执行开启命令报错,提示执行 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论