什么是变动数据捕获 (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
复制代码 相干阅读:
1、https://blog.wanwuguiyi.com/db-sql-batch-save/
2、https://blog.wanwuguiyi.com/sql-batch-insert/
3、https://blog.wanwuguiyi.com/sql-server-quoted-identifier/
4、https://blog.wanwuguiyi.com/union-unionall-study02/
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |