Sqlserver利用CDC功能实时同步两张表数据
一 适用环境
仅在SQLServer2008(含)以后的企业版、开发版和评估版中可用。
在开启CDC功能前,记得要把sqlserver的代理服务器打开。、
二 CDC功能大概介绍
CDC(change data capture)功能主要捕获SQLServer指定表的增删改操作,由于任何操作都会写日志(哪怕truncate),所以CDC的捕获来源于日志文件。日志文件会把更改应用到数据文件中,同时也会标记符合要求的数据标记为需要添加跟踪的项。然后通过一些配套函数,最后写入到数据仓库中。大概流程如图:
三 具体同步步骤以及截图
1准备工作
现在假设有2个数据库和2张表,db1是我们的目标数据库,里面有一张目标表t_cdc_ta,对目标表的所有增删改查操作,我们想要同步到结果库monitor里的结果表t_cdc_ta里。
首先创建这样2张表
create database db1;
create databasemonitor;
然后创建表结构,如下
CREATETABLE [t_cdc_ta]
(
[id] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[name] [varchar](20) NULL,
[addr] [varchar](20) NULL,
[ttime] [datetime] NULL
)
2对数据库开启CDC功能
开启cdc功能
USEdb1
GO
EXEC sys.sp_cdc_enable_db
-验证
--检查是否开启成功
SELECT is_cdc_enabled ,
CASE WHEN is_cdc_enabled = 0 THEN 'CDC功能禁用'
ELSE 'CDC功能启用'
END 描述
FROM sys.databases
WHERE NAME = 'db1'
--0 :未开启cdc 1:开启cdc
然后可以发现数据库db1里的一些变化
db1的安全性里的用户添加了cdc,架构也添加了cdc
在sqlserver代理里,我们也会发现,增加了目标库的capture和cleanup,一个负责捕获变化,一个负责清除变化。
3对某张表具体开启cdc功能
USE db1;