关于开启CDC实例的二三事(二)

本文详细介绍了SQL Server中CDC(Change Data Capture)的使用,包括开启库和表级别CDC时遇到的问题及解决方法,如何查询和管理变更数据,以及在数据库还原或附加时CDC的处理策略。内容涵盖错误号15517的解决、SQL代理作业的作用、DDL变更捕获、新增列的影响以及监控捕获作业的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实公司从很久之前就开始用CDC做数据同步,之前的博客也记录过使用CDC过程中遇到的问题。
无法更改列 ‘xxx’,因为它是 ‘REPLICATED’。
CDC的ct表出现违反唯一约束错误
今天打算把CDC相关知识点具体总结一下:
一.开启库级别CDC

--查询数据库是否启用CDC:1  成功; 0   失败

    select name,is_cdc_enabled  from sys.databases  where name=db_name;

--开启库级别CDC:

    EXEC sys.sp_cdc_enable_db

错误号 15517 :某个/些存储过程使用了具有WITHEXECUTE AS 的选项。使其在当前库具有了某个架构,但是当在别的地方执行时,由于没有这个架构,所以就报错

解决方法:

ALTER AUTHORIZATION ON DATABASE::[AdventureWorks] TO [sa]

 --禁用数据库
    
        EXEC sys.sp_cdc_disable_db

二.开启表级别CDC

 exec   sys.sp_cdc_enable_table
        [ @source_schema = ] 'source_schema',--是源表所属的架构的名称
        [ @source_name = ] 'source_name' ,--是对其启用变更数据捕获的源表的名称。source_name 必须存在于当前数据库中。不能对 cdc 架构中的表启用变更数据捕获。
        [ @role_name = ] 'role_name'--是用于控制更改数据访问的数据库角色的名称。如果显式设置为 NULL,则没有控制角色用于限制对更改数据的访问。
        [,[ @capture_instance = ] 'capture_instance' ]--是用于命名特定于实例的变更数据捕获对象的捕获实例的名称,源表最多可以有两个捕获实例
        [,[ @supports_net_changes = ] 1 --将为捕获实例生成一个净更改函数。对于在调用中指定的时间间隔内发生更改的每个非重复行,此函数仅返回一项更改。若要支持净更改函数,原表必须具有主键或唯一索引。如果使用了唯一索引,则必须使用@index_name参数指定索引名称。在逐渐或唯一索引中定义的列必须包含在要捕获的源列列表中。
        [,[ @index_name = ] 'index_name' ] --由于指定@supports_net_changes ,则需要指定唯一索引名称
        [,[ @captured_column_list = ] 'captured_column_list' ]--标识将包括在更改表中的源
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值