------准备------
CREATE DATABASE db_test_cdc CREATE TABLE t1(id INT IDENTITY(1,1) ,name VARCHAR(50)); INSERT INTO t1(name)VALUES('test')
------开始------
--启用数据库变更捕获
使用变更捕获首先需要启用数据库变更捕获,执行如下存储过程,启用变更捕获
USE db_test_cdc EXEC sys.sp_cdc_enable_db GO
启用完以后SQL SERVER会自动创建一系列有关变更捕获的讯息,如下:
--启用表变更捕获
启用变更捕获以后,就可以针对表开启捕获,执行如下SQL
EXEC sys.sp_cdc_enable_table @source_schema = N'dbo', --表架构名字 @source_name = N't1', --表名字 @role_name = N'cdec_role' --可以查询该表的角色,如果有则不创建,如果没有则创建
成功启用了该表以后,SQL Server会创建该表的数据捕获表:
当第一次启用表的时候,会创建两个代理作业,所以如果使用变更捕获,则需要启用代理,以下是第一次启用表变更产生的代理:
cdc.db_test_cdc_capture:是用于将变更的数据同步到我们启用的变更表中,即:cdc.dbo_t1_CT这个表
cdc.db_test_cdc_cleanup:适用于定时清理cdc.dbo_t1_CT这个表这个表中的数据
我们在t1表插入一条数据,进行测试。
INSERT INTO t1(name)VALUES('test1');
这个表则会记录一条数据
其中$operation这个字段表示新增的这行是怎么来的,值分别有下面这几种:
1:删除
2:增加
3:修改前数据
4:修改后数据
--禁用表变更捕获
USE db_test_cdc GO EXEC sys.sp_cdc_disable_table @source_schema = N'dbo', @source_name = N't1', @capture_instance = N'dbo_t1' GO
执行禁用表变更以后,其相应的表会被删除掉 如下:
--禁用数据库变更
USE db_test_cdc GO EXEC sys.sp_cdc_disable_db
禁用数据库表变更以后,所有有关变更捕获的讯息,均被清空;
-------结束---------
以上是有关变更捕获的简单部署,后续会继续更新有关变更捕获更详细的资料