1、开启cdc命令:
use AdventureWorks
go
Execute sys.sp_cdc_enable_db;
如果报错,先执行以下语句:
ALTER AUTHORIZATION ON DATABASE::[AdventureWorks] TO [sa]
2、对表启动cdc
Exec sys.sp_cdc_enable_table @source_schema='HumanResources',
@source_name='Employee',@role_name = NULL
注:@source_schema是目标表的schema,@source_name是目标表的名称,@role_name是执行cdc的角色名称。
3、查看所有标记cdc的表
use databasename;
然后通过sys.tables中的is_tracked_by_cdc来查询是否开启cdc功能。
开启cdc之后,数据库下的系统表会多出对应的cdc.xxxxxx_CT表。sql server代理中也会对应多出两个Job,如图:
4、cdc.xxxxx_CT表中的字段
$start_len 序号
—$operator 操作类型,1表示delete,2表示insert,3表示update的旧值,4表示update的新值。
此外原始表中的字段都会在cdc.xxxxx_CT表中出现。
5、具体使用帮助文档如下:
https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008/cc645858(v%3dsql.100)
6、CDC开启可能带来的问题(事务日志暴涨,日志无法收缩)
cdc开启之后,对原始表的修改,事务日志状态会被标记为ACTIVE_TRANSACTION,当capture这个job修改完之后会将状态修改为NOTHING,查看数据库的事务日志状态的sql语句是:
SELECT log_reuse_wait, log_reuse_wait_desc FROM SYS.databases;
查看数据库的事务日志的语句是:
select * from sys.fn_dblog(null, null);
注:事务日志的相关信息查看msdn: