什么是变更数据捕获 (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. SpringMVC springmvc.xml配置路径前缀和后缀

    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=" ...

  2. react-devtools安装以及使用中的问题

    使用react框架开发的小伙伴肯定都想使用想vue-devtools开发工具一样,可以看见组件的状态,和当前组件里的props,data等等. 当然react也有一个开发者工具,现在废话少说,开始安装 ...

  3. DASCTF 2023六月挑战赛|二进制专项 PWN (下)

    DASCTF 2023六月挑战赛|二进制专项 PWN (下) 1.can_you_find_me 检查保护 意料之中 64位ida逆向 只有add,和del功能不能show 先看add吧 最多申请10 ...

  4. 写几个有用的lambda

    List<String> list = Arrays.asList("app", "ban", "ora"); //循环输出 f ...

  5. scratch打乒乓球源码免费下载

    点击下载

  6. Jmeter函数助手-自带函数汇总

    Jmeter函数助手自带函数汇总(Jmeter官网-函数助手详解:https://jmeter.apache.org/usermanual/functions.html) BeanShell:用于简单 ...

  7. 11、SpringMVC之文件下载和上传

    创建名为spring_mvc_file的新module,过程参考9.1节和9.5节 11.1.文件下载 11.1.1.创建图片目录并放置图片 11.1.2.页面请求示例 <a th:href=& ...

  8. 【SpringBoot】09 日志集成

    原来日志还分抽象层和实现层... 抽象层被称为是日志门面,实现层被称为是日志实现 门面的有: - JCL[Jakarta Commons Logging]    远古门面 - SLF4J[Simple ...

  9. 【IDEA】回退操作记录

    参考自: https://www.cnblogs.com/zeussbook/p/9207970.html 找不到代码错误,又有很多已经写好的东西,不好全部删除 只要能记得确切的操作时间就行了 可以翻 ...

  10. 数字人 —— 虚拟人 —— Inworld AI用生成式AI——生成式游戏NPC

    相关: https://www.ithome.com/0/756/603.htm https://baijiahao.baidu.com/s?id=1774732295233220838 https: ...