什么是变更数据捕获 (CDC)?

变更数据捕获使用 SQL Server 代理记录表中发生的插入、更新及删除。 因此,它使得可以通过关系格式轻松使用这些数据更改。 将为修改的行捕获将这些更改数据应用到目标环境所需的列数据和基本元数据,并将其存储在镜像所跟踪源表的列结构的更改表中。 此外,表值函数可供使用者系统访问此更改数据。

开启CDC

1.前置条件

sqlsever 2008以上版本

需要开启代理服务(作业)

表必须要有主键或者是唯一索引

2.开启CDC

2.1 开启数据库CDC

-- Enable Database for CDC
EXEC sys.sp_cdc_enable_db

查询CDC状态

---dbname为数据库名称,返回结果1表示开启
select is_cdc_enabled from sys.databases where name='dbname'

2.2开启代理服务

--开启SQL server agent服务(逐条执行)
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Agent XPs', 1;
GO
RECONFIGURE
GO

2.3添加CDC文件组和文件

---添加文件组
ALTER DATABASE dbname ADD FILEGROUP CDCGroup;
---向文件组添加文件
ALTER DATABASE dbname
ADD FILE
(
NAME= 'HospitalInterfaceDb_CDC',
FILENAME = 'E:\SQLSERVER_DATAs\HospitalInterfaceDb_CDC.ndf'
)
TO FILEGROUP CDCGroup;
---查询db的物理文件,不清楚物理存储路径的可以先查询,特别说明,当删除了物理文件,这个查询仍会有记录直到下一次DB进行备份才会更新
SELECT name, physical_name FROM sys.master_files WHERE database_id = DB_ID('dbname');

2.4开启表CDC

IF EXISTS(SELECT 1 FROM sys.tables WHERE name='table_name' AND is_tracked_by_cdc = 0)
BEGIN
EXEC sys.sp_cdc_enable_table
@source_schema = 'dbo',
@source_name = 'table_name', -- table_name
@capture_instance = NULL, -- capture_instance 可以为NULL
@supports_net_changes = 1, -- supports_net_changes
@role_name = NULL, -- role_name
@index_name = NULL, -- index_name
@captured_column_list = NULL, -- captured_column_list
@filegroup_name = 'CDCGroup' -- filegroup_name
END; -- 开启表级别CDC
--查询表CDC状态
select name, is_tracked_by_cdc from sys.tables where object_id = OBJECT_ID('table_name')

2.5 CDC表格说明

开启之后会在作业里面生成对应的_capture和_cleanup作业,表值函数会新增实例计算函数,系统表会添加CDC相关表格

cdc.change_tables:表开启cdc后会插入一条数据到这张表中,记录表一些基本信息

cdc.captured_columns:开启cdc后的表,会记录它们的字段信息到这张表中

[cdc].[dbo_ORTT_CT]: ORTT是table名,这里就是捕获的修改日志

其中:

__$start_lsn列:保存其事务日志的开始序列号(LSN),可以通过函数sys.fn_cdc_map_lsn_to_time(__$start_lsn) 转换为时间;
__$operation列:1 = 删除、2= 插入、3= 更新(旧值)、4= 更新(新值);

2.6 CDC 配置

--查看CDC 作业配置
sys.sp_cdc_help_jobs



maxtrans:捕获作业每次循环时要处理的最大事务数

maxscans:每次循环数

continuous:1:连续运行,0:间隔运行

rerention:变更保留时长,单位是(分钟)

可以通过执行语句调整时长、执行次数等参数:

EXECUTE sys.sp_cdc_change_job @job_type = N'',      -- nvarchar(20)
@maxtrans = 0, -- int
@maxscans = 0, -- int
@continuous = NULL, -- bit
@pollinginterval = 0, -- bigint
@retention = 0, -- bigint
@threshold = 0 -- bigint

关闭CDC

-- 关闭数据库CDC,CDC 关闭后相关表会自行删除
EXEC sys.sp_cdc_disable_db
--删除文件和文件组
ALTER DATABASE dbname REMOVE FILE file_name
ALTER DATABASE dbname REMOVE FILEGROUP group_name

SQL SEVER CDC 启动和关闭 操作说明的更多相关文章

  1. 用SQL*Plus命令启动和关闭数据库

    用SQL*Plus命令启动和关闭数据库 1.启动方式 starup或startup open startup nomount startup mount startup read only [x] s ...

  2. Linux CentOS中使用SQL*Plus启动和关闭数据库

    启动和关闭数据库的常用工具有三个 一.SQL*Plus 在SQL*Plus环境中,用户以SYSDBA身份连接到Oracle后,可以通过命令行方式启动或关闭数据库. 二.OEM(企业管理器) 利用OEM ...

  3. 1-02 启动和停止Sql Sever的服务

    启动Sql  Sever服务的三种方式 1:后台启动服务. 2:Sql Sever配置管理员启动服务. 3:在运行窗口中使用命令启动和停止服务: 启动:net start mssqlsever. 停止 ...

  4. 你所不知道的SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧

    目前SQL Server数据库作为微软一款优秀的RDBMS,其本身启动的时候是很少出问题的,我们在平时用的时候,很少关注起启动过程,或者很少了解其底层运行过程,大部分的过程只关注其内部的表.存储过程. ...

  5. 你所不知道的SQL Server数据库启动过程(用户数据库加载过程的疑难杂症)

    前言 本篇主要是上一篇文章的补充篇,上一篇我们介绍了SQL Server服务启动过程所遇到的一些问题和解决方法,可点击查看,我们此篇主要介绍的是SQL Server启动过程中关于用户数据库加载的流程, ...

  6. 关于Java连接SQL Sever数据库

    1.前提条件 需要: 1>本机上装有SQL Sever数据库(2005.2008或者更高版本) 2>eclipse或者myeclipse开发环境 3>jar文件(名为sql_jdbc ...

  7. (4.21)SQL Server数据库启动过程(用户数据库加载过程的疑难杂症)

    转自:指尖流淌 http://www.cnblogs.com/zhijianliutang/p/4100103.html SQL Server数据库启动过程(用户数据库加载过程的疑难杂症) 前言 本篇 ...

  8. (4.20)SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧

    转自:指尖流淌 https://www.cnblogs.com/zhijianliutang/p/4085546.html SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧 ...

  9. SQL Server 数据库启动过程(用户数据库加载过程的疑难杂症)

    前言 本篇主要是上一篇文章的补充篇,上一篇我们介绍了SQL Server服务启动过程所遇到的一些问题和解决方法,可点击查看,我们此篇主要介绍的是SQL Server启动过程中关于用户数据库加载的流程, ...

  10. SQL Server 数据库启动过程(用户数据库加载过程的疑难杂症)

    前言 本篇主要是上一篇文章的补充篇,上一篇我们介绍了SQL Server服务启动过程所遇到的一些问题和解决方法,可点击查看,我们此篇主要介绍的是SQL Server启动过程中关于用户数据库加载的流程, ...

随机推荐

  1. Mac 版本10.15.4 安装 telnel工具

    下载脚本 mac新版本安装telnel发生的变化,进入下面的链接,右键另存为,保存到桌面 https://raw.githubusercontent.com/Homebrew/install/mast ...

  2. iOS开发基础102-后台保活方案

    iOS系统在后台执行程序时,有严格的限制,为了更好地管理资源和电池寿命,iOS会限制应用程序在后台的运行时间.然而,iOS提供了一些特定的策略和技术,使得应用程序可以在特定场景下保持后台运行(即&qu ...

  3. mysql Using join buffer (Block Nested Loop) join连接查询优化

    最近在优化链表查询的时候发现就算链接的表里面不到1w的数据链接查询也需要10多秒,这个速度简直不能忍受 通过EXPLAIN发现,extra中有数据是Using join buffer (Block N ...

  4. [oeasy]python0132_[专业选修]utf-8_unicode_transformation_format_8_编码方式

    utf-8 回忆上次内容 上次再次输出了大红心<span style="color:red"></span> 找到了红心对应的编码 黑红梅方都对应有编码   ...

  5. [oeasy]python0053_ 续行符_line_continuation_python行尾续行

    续行符与三引号 回忆上次内容 上次还是转义序列 类型 英文 符号 \a bell 响铃 \b backspace 退格 \t tab 水平制表符 \v vertical tab 垂直制表符换行不回车 ...

  6. TIER 2: Archetype

    TIER 2: Archetype 扫描 nmap 使用 nmap 进行扫描目标 IP,发现目标是 Windows 服务器,开放 SMB 和 SQL Server 服务. SMB SMB 之前已经接触 ...

  7. CF1883B Chemistry 题解

    原题传送门 思路: 如"aba","abba"这样的回文字符串, 每个字符的出现次数有以下两种情况: 1:全部是偶数(abba) 2:只有一个为奇数(aba) ...

  8. 2个月搞定计算机二级C语言——真题(1)解析

    1. 前言 大家好,我是梁国庆. 这段时间将持续发布计算机二级 C 语言真题的解析,想要同步练习,需要资源包的朋友可以跳转免费获取--<3个月搞定计算机二级C语言--准备工作>. 现在恐怕 ...

  9. mybatisplus实现一次多表联查+分页查询

    众所周知,mybatisplus非常好用,但是他不好用就不好用在不可以多表联查.在mybatisplusjoin中提供了联查的方法,那个参数我没看懂Orz 不过,历经千辛万苦,我通过xml终于写出来了 ...

  10. 【Java】Input,Output,Stream I/O流 01 概述 & 4个基础流

    Input,Output,Stream IO流 I/O Input/Output缩写.I/O技术用于处理设备之间的数据传输,读写文件,网络通讯 Java程序对于数据的操作以Stream流的形式进行 i ...