热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【SQLServer学习笔记】更改跟踪(ChangTracking)

更改跟踪(ChangTracking)是一个同步过程,是DML操作本身(insert、update、delete)事务的一部分,使用它可以以最小的磁盘存

更改跟踪(Chang Tracking)是一个同步过程,是DML操作本身(insert、update、delete)事务的一部分,使用它可以以最小的磁盘存储开销来侦测净行变化。


 

更改跟踪的同步行为允许修改的数据以事务一致性的形式表现,也具有监测数据冲突的能力。应用程序可以最小的性能开销使用此功能,不需要自定义的检测更改的触发器或表的时间戳。


 

--1.建库
if DB_ID('ck') is not nulldrop database ck
gocreate database ck
go--2.1启动数据库的更改跟踪
alter database ck
set change_tracking = on
(change_retention = 36 hours, --保留期限影响数据库维护多少更改跟踪auto_cleanup = on --是否启用自动清除
)
go--2.2使用更改跟踪的最佳实践是为数据库启用快照隔离,
--对于有DML操作的数据库、表,可以一致的方式捕获更改跟踪的信息,
--抓取最新版本并使用该版本号来获取适当的数据
alter database ck
set allow_snapshot_isolation on
go--2.3查看数据库是否启用更改跟踪
select DB_NAME(database_id),is_auto_cleanup_on,retention_period,retention_period_units,retention_period_units_desc
from sys.change_tracking_databases--3.1建表
create table dbo.tt(vid int not null identity(1,1) primary key,v varchar(100) not null,vv bit not null)
go--3.2启用表的更改跟踪
alter table dbo.tt
enable change_tracking
with (track_columns_updated = on ) --跟踪哪些列被更改过 --3.3查看表是否启用了更改跟踪
select OBJECT_NAME(object_id),is_track_columns_updated_on
from sys.change_tracking_tables--4.1添加数据
insert into dbo.tt(v,vv)
values('McGill',1),('Smith',0),('University',1) --一次添加了3条数据,共享一个版本号--4.2返回表中最后提交的事务中的版本号,在更改跟踪表上的DML操作使版本号变大
select CHANGE_TRACKING_CURRENT_VERSION() --显示1--下面另个更新操作会使版本号增加2====================================
update dbo.tt
set v = 'wc11'
where vid = 1update dbo.tt
set v = 'wc22'
where vid = 2select CHANGE_TRACKING_CURRENT_VERSION() --显示3--在beging tran事务中的多个操作会共享一个版本号
begin tranupdate dbo.ttset v = 'wc111'where vid = 1update dbo.ttset v = 'wc22'where vid = 2
commit transelect CHANGE_TRACKING_CURRENT_VERSION() --显示4
--======================================================================--4.3返回更改跟踪表的最小可用版本
select CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID('dbo.tt')) --显示0/*============================================================================
4.4changetable函数中的changs关键字查看从指定的版本号以来的更改,不包含指定版本号本身的变化注意:第二参数是版本号,与变更捕获中的LSN作用是类似的,指定不同的版本号,会返回不同的记录比如添加一条记录,此时版本号从0变为1,再更新刚才添加的记录,版本号由1变为2:1.如果指定版本号为0,那么不会返回版本号从0到1的变更(一条insert操作)以及版本号从1到2的变更(一条update操作),而只返回一条insert操作,因为返回的其实是从指定版本号开始的所有净更改2.如果指定的版本号是1,那么会返回从1到2之间的变化,也就是那个更新操作,同时sys_change_columns会显示哪一列被更新了
==============================================================================*/
select vid,sys_change_operation, --I是Insert,U是Update,D是Deletesys_change_version, --版本号sys_change_columns --哪一列被更改了
from changetable(changes dbo.tt, --表名2) as x --版本号--4.5列是否被修改过
select vid,CHANGE_TRACKING_IS_COLUMN_IN_MASK( --列的idcolumnproperty(object_id('dbo.tt'), --表名'v', --列名'ColumnId'), --返回列idsys_change_columns), --改变掩码CHANGE_TRACKING_IS_COLUMN_IN_MASK(columnproperty(object_id('dbo.tt'),'vv','ColumnId'),sys_change_columns)
from changetable(changes dbo.tt,8) as x--4.6changetable函数中的version关键字查看:每行的最新更改跟踪版本
select tt.vid,tt.v,tt.vv,x.sys_change_version
from dbo.tt
cross apply changetable(version dbo.tt, --表名(vid), --按任意顺序指定一个或多个主键列名(tt.vid) --按主键列名的顺序指定主键对应的值) as x --必须指定别名--5查看更改跟踪应用程序上下文的信息
--可以跟踪哪一个应用程序对哪些行进行了修改,可用于对多个数据源中的数据进行同步
declare @app_context varbinary(128) = cast('wc1_data_source' as varbinary(128));;with change_tracking_context(@app_context) --表示调用的应用程序
insert into dbo.tt(v,vv)
values('wc1_data_source',1)select Vid,sys_change_creation_version,sys_change_operation,sys_change_version,sys_change_context, --应用程序上下文信息CAST(sys_change_context as varchar) --显示修改这条记录的应用程序
from changetable(changes dbo.tt,9) as x


 

转:https://www.cnblogs.com/momogua/archive/2012/03/07/8304636.html



推荐阅读
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
  • 本文深入探讨了CGLIB BeanCopier在Bean对象复制中的应用及其优化技巧。相较于Spring的BeanUtils和Apache的BeanUtils,CGLIB BeanCopier在性能上具有显著优势。通过详细分析其内部机制和使用场景,本文提供了多种优化方法,帮助开发者在实际项目中更高效地利用这一工具。此外,文章还讨论了CGLIB BeanCopier在复杂对象结构和大规模数据处理中的表现,为读者提供了实用的参考和建议。 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • Go 项目中数据库配置文件的优化与应用 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • 在 Angular Google Maps 中实现图片嵌入信息窗口的功能,可以通过使用 `@agm/core` 库来实现。该库提供了丰富的 API 和组件,使得开发者可以轻松地在地图上的信息窗口中嵌入图片。本文将详细介绍如何配置和使用这些组件,以实现动态加载和显示图片的功能。此外,还将探讨一些常见的问题和解决方案,帮助开发者更好地集成这一功能。 ... [详细]
  • MySQL索引详解及其优化策略
    本文详细解析了MySQL索引的概念、数据结构及管理方法,并探讨了如何正确使用索引以提升查询性能。文章还深入讲解了联合索引与覆盖索引的应用场景,以及它们在优化数据库性能中的重要作用。此外,通过实例分析,进一步阐述了索引在高读写比系统中的必要性和优势。 ... [详细]
  • 《Intel IA-32 架构软件开发人员手册详尽指南》提供了详尽的 IA-32 架构技术文档,涵盖指令集、系统编程和硬件接口等内容,为软件开发人员提供全面的技术支持和参考。该手册不仅包括详细的架构说明,还提供了丰富的编程示例和最佳实践,帮助开发人员更好地理解和应用 IA-32 架构。 ... [详细]
  • PyCharm 作为 JetBrains 出品的知名集成开发环境(IDE),提供了丰富的功能和强大的工具支持,包括项目视图、代码结构视图、代码导航、语法高亮、自动补全和错误检测等。本文详细介绍了 PyCharm 的高级使用技巧和程序调试方法,旨在帮助开发者提高编码效率和调试能力。此外,还探讨了如何利用 PyCharm 的插件系统扩展其功能,以满足不同开发场景的需求。 ... [详细]
  • 投融资周报 | Circle 达成 4 亿美元融资协议,唯一艺术平台 A 轮融资超千万美元 ... [详细]
  • 在近期的项目开发过程中,ORM层采用了MyBatis,并且需要连接多个数据库,这带来了多数据源配置的挑战。为了解决这一问题,我们可以通过巧妙运用注解来实现优雅的数据源切换,确保系统的灵活性和可维护性。这种方法不仅简化了配置,还提高了代码的可读性和扩展性。 ... [详细]
  • 在本文中,我们探讨了如何使用 NSArrays 来实现集合的交集与并集操作。通过两个示例数组 A 和 B,其中包含一些共同元素(例如 A: 1, 2, 3 和 B: 2, 3, 4),我们将详细介绍如何高效地进行这些集合操作。此外,我们还将讨论这些方法在实际应用中的性能优势和适用场景。 ... [详细]
  • 在使用Keil C51创建51单片机项目时,启动代码中包含多个关键元素,这些元素确保了系统的正确初始化和运行。主要包括复位向量、中断向量表、系统时钟配置、寄存器初始化以及主函数入口等。这些组件共同协作,为后续的应用程序执行提供稳定的基础。 ... [详细]
  • 开发笔记:深入解析Android自定义控件——Button的72种变形技巧
    开发笔记:深入解析Android自定义控件——Button的72种变形技巧 ... [详细]
author-avatar
mobiledu2502932447
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有