sqlServer数据库CDC无法开启的解决办法

因为公司的产品跟ERP对接,采用的是基于数据库CDC监控增量的方案,最近一个客户重装的ERP的数据库,导致重装完,无法开启CDC,数据库开启CDC的方法,执行以下sql:

-- 为指定的数据库库开启CDC
USE myDb
GO
EXEC sys.sp_cdc_enable_db;

查询是否开启成功的方法:

--检查指定的库是否开启CDC,结果为1表示开启了CDC,为0表示没有开启。'myDb'表示要查询的库名,如果要查别的库只需更改库名
SELECT is_cdc_enabled,
       CASE
           WHEN is_cdc_enabled = 0 THEN 0
           ELSE 1
           END status
FROM sys.databases
WHERE NAME = 'myDb';

执行了开启sql时,出现“因为当前数据库中已存在名为 'cdc' 的数据库用户或名为 'cdc' 的架构,因此无法启用数据库" XXX " 。更改数据捕获需要这些对象”的错误提示,于是就到数据库根目录-安全性下面的用户和架构两个目录下看了下,确实存在“cdc”用户和“cdc”架构两个文件,

于是我重命名了cdc用户,cdc架构无法重命名,深度删除,结果又报错:

 意思是cdc架构被其它对象引用,无法删除,于是在网上搜索查询引用cdc架构的方法如下:

use myDb
go
select obj.type, obj.name
from sys.objects obj join sys.schemas s on(s.schema_id = obj.schema_id)
where s.name = 'cdc'
order by obj.name
go

 

type为“IF”是function,为“P”是procedure,删除方法如下:

drop function cdc.[fn_cdc_get_all_changes_...];
drop function cdc.[fn_cdc_get_net_changes_ ... ];
drop procedure cdc.sp_upd_855595478;

把相关引用cdc架构的函数和存储过程删除后,再启用数据库的cdc功能就正常了!

 

下面再附上数据库表的CDC开启和禁用,以及查询表的CDC是否开启的方法:


-- 开启表的CDC
use myDb;
go
EXEC sys.sp_cdc_enable_table
     @source_schema = N'dbo',
     @source_name = N'Btype',
     @role_name = NULL
GO
-- 禁用表的CDC
USE myDb
GO
EXEC sys.sp_cdc_disable_table
     @source_schema = N'dbo',
     @source_name = N'ptype',
     @capture_instance = N'dbo_ptype_CT'
GO

-- 查询表是否开启CDC
SELECT name,
       is_tracked_by_cdc,
       CASE
           WHEN is_tracked_by_cdc = 0 THEN 'CDC功能禁用'
           ELSE 'CDC功能启用'
           END 描述
FROM sys.tables
where object_id = OBJECT_ID('dbo.ptype');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值