--CDC通过对事务日志的异步读取,记录DML操作的发生时间、
--类型和实际影响的数据变化,然后将这些数据记录到启用
--CDC时自动创建的表中。通过cdc相关的存储过程,可以获
--取详细的数据变化情况。由于数据变化是异步读取的,因
--此对整体性能的影响不大,远小于通过Trigger实现的数据
--变化记录。

--对应未引发数据变化的更新操作,不会被记录到变更表中。

--CDC和复制代理使用同样的日志读取器,在捕获数据变更时有一定延迟,即使在简单回复模式下,未被读取的日志仍无法截断

--CDC捕获所得数据默认保存三天,以避免频繁变更操作导致捕获表变得臃肿,CDC使用JOB来清理过期数据。
--===================================================
--创建测试数据库
CREATE DATABASE DemoDB
--===================================================
--检查当前数据库是否启用CDC
--is_cdc_enabled=1:未启用,is_cdc_enabled=1:已启用
USE DemoDB
GO
SELECT D.is_cdc_enabled FROM sys.databases D
WHERE D.database_id=DB_ID()
---===================================================
--启用当前数据库CDC功能
EXEC sp_cdc_enable_db

--====================================================
--创建测试表TB1

CREATE TABLE TB1
(
ID INT IDENTITY(1,1) PRIMARY KEY,
C1 NVARCHAR(200)
)
--====================================================
--检查测试表是否启用CDC
--is_tracked_by_cdc=1:未启用,is_tracked_by_cdc=1:已启用
SELECT T.is_tracked_by_cdc FROM sys.tables T
WHERE T.name=N'TB1'

--=====================================================
--启用CDC,要求表有主键或指定唯一索引
--在第一次启动表后会创建两个作业
--作业 'cdc.DemoDB_capture' 已成功启动。
--作业 'cdc.DemoDB_cleanup' 已成功启动。
EXEC sys.sp_cdc_enable_table
@source_schema = 'dbo',
@source_name = 'TB1',
@role_name = NULL,
@capture_instance = NULL,
@supports_net_changes = 1,
@index_name = NULL,
@captured_column_list = NULL,
@filegroup_name = default

--=====================================================
--修改表中数据测试
INSERT INTO TB1(C1)VALUES(N'123')
UPDATE TB1 SET C1=N'456' WHERE C1=N'123'
DELETE FROM TB1 WHERE C1=N'456'

-------------------------------------------------------
--查看捕获的记录,变更记录表名:cdc.[TableName]_CT
--__$operation列对应操作类型:
--1=delete,
--2=insert,
--3=update(旧值),    
--4=update(新值)。

SELECT * FROM cdc.dbo_TB1_CT

--========================================================
--禁用数据捕获
EXEC sys.sp_cdc_disable_table
@source_schema = N'dbo',
@source_name   = N'TB1'
@capture_instance='ALL'

--========================================================
--禁用数据捕获
EXEC sys.sp_cdc_disable_db

--=========================================================

1.当开启CDC的表中某列被删除后,该列仍会在对应的CDC表中保存,后续插入的行中此列值为NULL

2.当开启CDC的表中增加新列时,该新列不会被CDC跟踪捕获

3.开启CDC后,在BULK_LOGGED恢复模式下,除索引重整和索引重建外,其他所有操作都全日志记录(与完整恢复模式下一样)

4.开启CDC后,应尽量避免对CDC的表做大批量数据操作

5.应考虑将CDC 清理作业设置在业务低峰期运行

6.应考虑将CDC 的系统表与数据表分开存放到不同文件组

7.慎用'alloc net change'

8.可以使用EXEC sys.sp_cdc_get_ddl_history 'TABLE NAME'来查看CDC跟踪捕获的表的DDL操作历史记录

9.可以使用对应的函数cdc.fn_cdc_get_all_changes_schema_tablename(minlsn,maxlsn,'type')来查看所有数据变更,而使用cdc.fn_cdc_get_net_changes_tablename来查看净更改行(如果改行被更新多次,只返回最终内容的一行;如果一条数据被新增后又被删除,不会显示该行)。

10.可以使用cdc.lsn_time_mapping来查看时间和lsn的对应关系

11.可以使用sys.dm_cdc_errors来查看为变更数据捕获日志扫描会话中遇到的每个错误返回一行

12.可以使用sys.dm_cdc_log_scan_sessions 来查看当前数据库中每个日志扫描回话的信息

--================================================
参考:http://technet.microsoft.com/zh-CN/library/bb522475(v=sql.105)

CDC--Demo的更多相关文章

  1. 设备管理 USB ID

    发现个USB ID站点,对于做设备管理识别的小伙伴特别实用 http://www.linux-usb.org/usb.ids 附录: # # List of USB ID's # # Maintain ...

  2. 如何在WTL和MFC中使用duilib及如何静态使用duilib库!(初级讲解 附带一个Demo)

    关于duilib的历史,我也就不多说了,能看到这篇文章的人都是有一定了解才能找到这个的. 我直接说下对这个库的基本使用吧. 我个人对一些好技术都是比较感兴趣的. 因为个人原因 喜欢接触一个好技术. 所 ...

  3. 0901~0907面试总结(腾讯CDC、金蝶)

    纯脑记,但应该不会差太多 20150901腾讯CDC面试(初级外包岗) 0826的上午先用QQ进行了初步沟通,要求做一个不考虑AI的井字棋游戏,0830上午E-mail上交了做好的DEMO,然后等了几 ...

  4. ELT工具Kettle之CDC(Change Data Capture)实现实例

    ETL过程的第一步就是从不同的数据源抽取数据并把数据存储在数据的缓存区.这个过程的主要挑战就是初始加载数据量大和比较慢的网络延迟.在初始加载完成之后,不能再把所有数据重新加载一遍,我们需要的只是变化的 ...

  5. PIC24 通过USB在线升级 -- USB CDC bootloader

    了解bootloader的实现,请加QQ: 1273623966 (验证填bootloader):欢迎咨询或定制bootloader:我的博客主页www.cnblogs.com/geekygeek 今 ...

  6. sqlserver ,镜像数据库,CDC,实时监控数据变化

    1.数据库镜像配置 1)主机环境:计算机名称修改SQL1.xiaoping.com 添加用户sqluser 密码永不变,率属于administrators sqlserver安装时,将所有sqlser ...

  7. demo演示如何写一个无配置格式统一的日志

    一.背景 大量项目在使用logback记日志,有部分项目使用日志混乱,格式不统一,多数人搞不懂配置文件,导致配置错误,现在需要开发一套统一的.少配置的日志组件,方便使用. 二.设计思路 尽量采用0配置 ...

  8. yugabyte cdc 试用

    目前yugabyte 的cdc 功能处于beta 阶段,应该也快实际可用了,以下是一个简单的试用 环境准备 使用docker-compose docker-compose 文件 version: '2 ...

  9. debezium关于cdc的使用(下)

    博文原址:debezium关于cdc的使用(下) 简介 debezium在debezium关于cdc的使用(上)中有做介绍.具体可以跳到上文查看.本篇主要讲述使用kafka connector方式来同 ...

  10. debezium关于cdc的使用(上)

    博文原址:debezium关于cdc的使用(上) 简介 debezium是一个为了捕获数据变更(cdc)的开源的分布式平台.启动并指向数据库,当其他应用对此数据库执行inserts.updates.d ...

随机推荐

  1. Python实践练习:电话号码和 E-mail 地址提取程序

    题目: 假设你有一个无聊的任务,要在一篇长的网页或文章中,找出所有电话号码和邮件地址.如果手动翻页,可能需要查找很长时间.如果有一个程序,可以在剪贴板的文本中查找电话号码和 E-mail 地址,那你就 ...

  2. Remote error: Provider not exported: DataSetProvider1

    Remote error: Provider not exported: DataSetProvider1 是服务端的问题,ServerMethodsUnit1.cpp窗体上添加DataSetProv ...

  3. Javascript中prototype属性详解 (存)

    Javascript中prototype属性详解   在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不 ...

  4. @JsonIgnore

    @JsonIgnore 避免取JSON对象时无限递归的问题,过滤掉一些不需要的属性,说明createdDate这个属性不需要转成json,放到getter方法前生效

  5. 网络编程基础之C/S架构和TCP/IP协议

    一.何谓C/S架构 C指的是client(客户端软件),S指的是Server(服务端软件),既然我们的的标题是网络编程基础, 那我们就一起来学习怎样写一个C/S架构的软件,实现服务端与客户端软件基于网 ...

  6. Python实现七牛云视频播放

    这篇文章是使用Python的Web框架Django Rest Framework来提供视频相关的api接口,主要功能包括视频上传.视频转码.视频访问授权.删除视频文件.视频截图功能. 七牛云上的基本概 ...

  7. apktool.bat

    @echo off if "%PATH_BASE%" == "" set PATH_BASE=%PATH% set PATH=%CD%;%PATH_BASE%; ...

  8. java算法 第七届 蓝桥杯B组(题+答案) 6.方格填数

    6.方格填数  (结果填空) 如下的10个格子 (如果显示有问题,也可以参看[图1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案 ...

  9. 启动react项目报如下错误

    输入:npm run build:dll

  10. 通过maven自动修改idea的compiler

    Idea在使用过程中,经常会自动修改compiler水平,有时会变成jdk1.5,不支持@override,也不能忽略实例化的泛型参数,更不支持try-with-resource. 版本太低,很多特性 ...