SQL Server中的变更捕获技术--简单部署

时间:2022-02-11 20:30:30

------准备------

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 Server中的变更捕获技术--简单部署

--启用表变更捕获

启用变更捕获以后,就可以针对表开启捕获,执行如下SQL

EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo', --表架构名字
@source_name = N't1', --表名字
@role_name = N'cdec_role' --可以查询该表的角色,如果有则不创建,如果没有则创建

成功启用了该表以后,SQL Server会创建该表的数据捕获表:

SQL Server中的变更捕获技术--简单部署

当第一次启用表的时候,会创建两个代理作业,所以如果使用变更捕获,则需要启用代理,以下是第一次启用表变更产生的代理:

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');

这个表则会记录一条数据

SQL Server中的变更捕获技术--简单部署

其中$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

执行禁用表变更以后,其相应的表会被删除掉 如下:

SQL Server中的变更捕获技术--简单部署

--禁用数据库变更

USE db_test_cdc
GO EXEC sys.sp_cdc_disable_db

禁用数据库表变更以后,所有有关变更捕获的讯息,均被清空;

SQL Server中的变更捕获技术--简单部署

-------结束---------

以上是有关变更捕获的简单部署,后续会继续更新有关变更捕获更详细的资料