今天开启数据库cdc 功能的时候提示:一个dbrole 的存储过程,rolemember cdc db_ower,
,有事务正在进行,执行失败。
执行多次仍然如此,开启cdc的存储过程是sys.sp_cdc_enable_db;查询了一下网络,给出的方法1.是手动增加cdc用户到db_ower,但是查看官方文档,在开启cdc之前,cdc用户是不允许存在的,
然后使用sql语句
SELECT request_session_id AS SessionID,resource_type,request_mode AS LockType, request_status, count(1) cn
FROM sys.dm_tran_locks
group by request_session_id ,resource_type,request_mode , request_status
order by cn desc SELECT request_session_id AS SessionID,resource_type,request_mode AS LockType,resource_description,request_status
FROM sys.dm_tran_locks
网上给出的方法2是.是优化sql语句,减少锁。
查询有很多锁,但是一些ix,s ,object一些数据锁应该不会影响开启啊,怀疑是MEATADATA的锁导致的不能开启cdc,是有很多meata锁的,查询对应的session_id正在执行什么。
当meate锁很少的时候,再次执行开启sys.sp_cdc_enable_db,执行成功。