USE t;
GO
--开启某个数据库的CDC功能
exec sys.sp_cdc_enable_db
GO --is_cdc_enabled栏位为1代表开启CDC功能了
SELECT is_cdc_enabled,CASE WHEN is_cdc_enabled=0
THEN 'CDC功能禁用' ELSE 'CDC功能启用'END 描述
FROM sys.databases
WHERE NAME = 't' --开启单张表的CDC功能
EXEC sys.sp_cdc_enable_table @source_schema='dbo',
@source_name = 'so',@role_name = NULL --关闭单张表的CDC功能
EXEC sys.sp_cdc_disable_table @source_schema='dbo',
@source_name = 'so',@capture_instance = 'dbo_so' -- __$operation”为“1”代表删除,“2”代表插入,“3”执行更新操作前的值,“4”执行更新操作后的值。
SELECT * FROM [cdc].[dbo_so_CT] --(DDL) 更改历史记录
SELECT * FROM [cdc].[ddl_history]

 

注意事项

1.  SQL Server的版本必须是2008或以上;

2.  不能同时使用内存优化表(SQL Server2014或以上版本才有的功能)。否则会出现以下错误:

3.  @@SERVERNAME、serverproperty('servername')两者(本地服务器名和服务器实例的属性必须一致)必须一致。下面脚本可将两者调整成一致。如果执行后两者仍不一致,需要重启SQL Server服务。

if serverproperty('servername') <> @@servername
begin
declare @server sysname
set @server = @@servername
exec sp_dropserver@server =@server
set @server = cast(serverproperty('servername') as sysname)
exec sp_addserver@server = @server , @local = 'LOCAL'
PRINT 'ok'
end select @@SERVERNAME,serverproperty('servername')
4.      必须开启SQL Sever代理服务。CDC功能必须通过作业来实现。 5.      开启CDC功能的表,无法使用 TRUNCATE TABLE 。可以先禁用,执行完truncate再启用cdc。 6.      如果表结构发生变化,则捕获实例表中:新增列无法捕获到、删除列保持NULL、修改列类型会发生强制转换。为保险起见,应禁用捕获实例,然后再启用。 7.      在查询CDC相关表时,建议加上With(NOLOCK),否则易产生阻塞或死锁。 8.      一个表最多只能有两个捕获实例。 如果更新表时并未实际修改值,则不会有产生捕获(对应的捕获实例表不会增加相应的行)。

  

 

使用SQL Server 的CDC功能实现数据变更捕获的更多相关文章

  1. 使用SQLServer 2008的CDC功能实现数据变更捕获

    原文:使用SQLServer 2008的CDC功能实现数据变更捕获 最近由于工作需要,研究了一下2008 CDC功能,觉得还不错,下面整理了一下研究过程,虽然比较粗略,但是基本上能用了,如果有补充请大 ...

  2. (整理)SQL Server 2008 CDC 功能使用

    最近某项目突然要增加数据的获取,但是不能改程序.也没有同步的只读库,只好使用CDC来进行尝试. CDC的启用和停止全部用SQL实现,在这里给出主要的SQL步骤: /****** Script for ...

  3. SQL Server 2008 CDC增量变更捕获详解

    1 背景: 随着公司业务的成长,数据量也随之的不断增长.随之而来的问题是在做ETL的时候,时间花费也越来越长.为了节省时间开销,我们只想要更新最新的数据,不想要把公司历年所有的数据都进行处理.这种情况 ...

  4. SQL Server ---(CDC)监控表数据(转译)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现过程(Realization) 补充说明(Addon) 参考文献(References) ...

  5. SQL Server 2008中新增的 1.变更数据捕获(CDC) 和 2.更改跟踪

    概述 1.变更数据捕获(CDC)        每一次的数据操作都会记录下来 2.更改跟踪       只会记录最新一条记录   以上两种的区别:         http://blog.csdn.n ...

  6. SQL Server 后续去除功能汇总

    原文:SQL Server 后续去除功能汇总 功能更新去除汇总 字段类型 在 Microsoft SQL Server 的未来版本中将删除 ntext.text 和 image 数据类型. 请避免在新 ...

  7. 使用Sql Server Management Studio 2008将数据导出到Sql文件中

      最近需要将一个Sql Server 2005数据库中的数据导出,为了方便,就希望能导出成Sql文件,里面包含的数据是由Insert 语句组成的. 在Sql Server Management St ...

  8. SQL Server 2014新功能PPT

        本篇文章是我在公司内部分享SQL Server 2014新功能的PPT,在本PPT中我详细描述了SQL Server除了BI方面的新功能,以及提供了大量的测试.希望对大家有帮助.     请点 ...

  9. 清空SQL Server数据库中所有表数据的方法(转)

    清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入 ...

随机推荐

  1. 大杂烩 -- 四种生成和解析XML文档的方法详解

    基础大杂烩 -- 目录 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J DOM:在现在的Java JDK里都自带了,在xml-apis.jar包 ...

  2. Python下载安装

    https://www.python.org/downloads/ https://www.editplus.com/ftp/epp510_1828.exe  EditPlus 5.1

  3. 还有看不懂的java语句?

    Person stuProxy= (Person) Proxy.newProxyInstance(Person.class.getClassLoader(), new Class<?>[] ...

  4. E - Cup

    The WHU ACM Team has a big cup, with which every member drinks water. Now, we know the volume of the ...

  5. easyui tree 更改图标

    easyui tree 更改图标 ,onLoadSuccess: function (node, data) { $('#tt .tree-icon').css("background&qu ...

  6. .NET Core开发日志——Linux版本的SQL Server

    SQL Server 2017版本已经可以在Linux系统上安装,但我在尝试.NET Core跨平台开发的时候使用的是Mac系统,所以这里记录了在Mac上安装SQL Server的过程. 最新的SQL ...

  7. 运行里用\\加IP地址访问远程主机和用mstsc登录远程主机有什么区别??

    \\ip是访问共享:mstsc是直接远端控制主机 "\\加IP",只要是windows,除win9x外,默认系统自带共享服务,除非有防火墙,或者手工关闭lanmanserver & ...

  8. [No0000176]Git常用命令速查表(收藏大全)

    名词 master: 默认开发分支 origin: 默认远程版本库 Index / Stage:暂存区 Workspace:工作区 Repository:仓库区(或本地仓库) Remote:远程仓库 ...

  9. [No0000CB]如何在命令行(cmd)通过TCP/IP端口(port)查询所在的进程号(pid)或进程名称,并终止该进程

      1)首先查找占用某个端口的进程PID netstat -ano | findstr [port] 2)根据该进程pid查询进程名称或标题,确认那个程序在占用该端口 tasklist /v | fi ...

  10. python 过滤掉字符串中的回车符与换行符(\t\n)

    我们在文本数据预处理前,要将数据统一整理成需要的格式,其中有回车(\t)或者(\n)符号,会对我们的数据保存有影响,那么就需要将其过滤掉. 比较简单的方法,用replace()将这些符号替换为空,一定 ...