cdc.fn_cdc_get_net_changes_dbo_VW_GHZDK:针对指定 LSN 范围内每个已更改的源行返回一个净更改行。也就是说,如果在 LSN 范围内源行具有多项更改,则该函数将返回反映该行最终内容的单一行
cdc的捕获进程逻辑写在过程sp_replcmds(为sqlserver.exe的一部分;同样也用于读取事务日志)中。
注:如果开启了CDC,若有变化未获取,则即使将恢复模式设置为simple,事务日志也不会截断。即使使用checkpoint也不可以。
有关cdc,有两个代理任务:
capture job每个循环最多扫描1000个事务,循环间的间隔为5秒;
清理作业在每天的2点运行。保留change table中的数据3天,每个delete语句最多删除5000条数据。
cdc agent job可以使用以下过程添加和删除:
更改cdc agent job的默认值的存储过程(需要重启job):
如果数据库与表列的排序规则不同,则cdc可能会使用,可以通过为列使用nvarchar或nchar来解决这个问题。
如果数据库中已经存在了cdc用户或模式,则无法启用cdc。
禁用数据库级别的cdc之前无需禁用表级别cdc。库级别禁用cdc会删除cdc相关的元数据、包含cdc用户和架构及cdc job。
如果删掉了启用cdc的数据库,则相应的cdc job也会自动删除。
--创建成功后,将自动添加CDC用户和CDC架构。 --查看库级别CDC是否启用:如果不使用指定角色,则可以使用@role_name参数将其指定为NULL。
注:如果在启用cdc之前,表中已有主键,则接下来,无法修改该表的主键(改变主键列,删除主键等),除非禁用cdc。
删除了一张表之后,相应的cdc元数据也会被删除。
--返回所有表的变更捕获配置信息对原表有查询权限的用户才可以看该表的cdc信息。
对日志的一次扫描中的最大事务数;
控制sp_cdc_scan在读完日志或达到最大扫描次数之后停止(一次触发模式)。或者控制sp_cdc_scan持续运行直到显式的停止(持续模式)。
--查看空扫描的会话:
--检查延迟:即表上事务提交的时间与change table中捕捉到提交事务时间之间的差值。
--延迟仅对活动会话有效,也就是在empty_scan_count列大于零的会话,延迟为0.
如果在同一数据库中启用了cdc和事务复制,事务日志中的变化会首先发送到分发数据库中,然后再写到cdc表中。如果分发有延迟,那么相应的,写到cdc也会有延迟。
取决于cdc的配置,会有一到两个TVF创建:
cdc与ct可在同一数据库中并存。
启用cdc的数据库也可以进行镜像。
当log reader agent同时用于事务复制和cdc时,捕捉到的变化会先写入到分发数据库,然后写到change table中,并一起提交。
SQL Server使用如下逻辑,决定一个数据库在恢复或附加之后是否仍保持启用cdc:
当使用always on时,为减少主节点的磁盘负载,变更计算列举应在次节点进行。
在使用change tracking之前,必须现在库级别启用它。
可以使用CHANGE_TRACKING_MIN_VALID_VERSION函数来检查两次同步之间的间隔是否太长(即是否有间隔之外的数据已经被清理掉)。
DML更改的每个行,都会记录到change tracking内部表中。对DML操作相关的影响有多方面,例如:
如果配置了快照隔离,对DML也会有影响。
使用change tracking,需要可以获取数据的变化,然后将变化应用的另一个数据库中,然后更新源端数据库。
每个更改行都有其对应的版本号。
--确认所有表的可用版本号
列级跟踪允许仅跟踪某一列发生的变化。
--快照隔离事务的使用change tracking相关信息存储在内存中。每个检查点时,会将相关信息刷新到相关的磁盘的内部表上。同时清空内存。
每个启用change tracking的表都会有一个对应的磁盘上的内部表。也会有清理任务,清理磁盘上的内部表中的数据。
版权声明:本文为博主原创文章,遵循 版权协议,转载请附上原文出处链接和本声明。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。