暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL Server 更改跟踪

小人物手记 2021-05-24
1298


# Data tracking #

用了这么多年的SQL Server才知道,数据库自带更改跟踪机制,对表所做的DML操作,会实时记录,类似日志功能;


# Data tracking #

分类

SQL Server跟踪功能分两种:变更数据捕获(CDC)和更改跟踪;

2

# Data tracking #

区别

基本区别就是:

变更数据捕获记录了变更的历史,如修改操作,CDC会存两条记录,修改前(旧)和修改后(新);更改跟踪只保存行,不会捕获更改的数据。

如果需要有关所做更改数据的中间值,则可能适合使用变更数据捕获,而不适合使用更改跟踪。

3

# Data tracking #

两种数据跟踪用法

下面的文章里都有详细的介绍及用法,这里仅简单记录一下SQL使用步骤:


# 更改跟踪(CDC) #

---1、查看数据库是否启用CDC

SELECT name,is_cdc_enabled FROM sys.databases WHERE name = '数据库名'


---2、启用数据库CDC

USE 数据库名

GO

EXECUTE sys.sp_cdc_enable_db;

GO

--禁用变更数据捕获

--EXECUTE sys.sp_cdc_disable_db  

--GO  


---3、检查启用是否成功(如执行成功:系统表多出来6个表)

SELECT is_cdc_enabled,CASE WHEN is_cdc_enabled=0 THEN 'CDC功能禁用' ELSE 'CDC功能启用' END 描述

FROM sys.databases

WHERE NAME = '数据库名'


---4、对表启用捕获

EXEC sys.sp_cdc_enable_table 

    @source_schema= 'dbo',

       @source_name = '表名',

       @role_name = N'cdc_Admin',

       @capture_instance = DEFAULT,

       @supports_net_changes = 1,

    @index_name = NULL,

    @captured_column_list = NULL,

    @filegroup_name = DEFAULT


---5、检查是否成功

SELECT name, is_tracked_by_cdc ,

    CASE WHEN is_tracked_by_cdc = 0 THEN 'CDC功能禁用' ELSE 'CDC功能启用' END 描述

FROM sys.tables

WHERE OBJECT_ID= OBJECT_ID('表名')


---6、返回表的变更捕获配置信息

EXEC sys.sp_cdc_help_change_data_capture 'dbo', '表名'


---7、测试DML(数据操纵语言)变更捕获【写对表增删改的语句进行测试】


---8、查询捕获数据(__$operation列:1 = 删除、2= 插入、3= 更新(旧值)、4= 更新(新值))


# 更改跟踪(Chang Tracking) #

---1、开启数据库更改跟踪Chang Tracking

--启用更改跟踪(Chang Tracking),(7)天清理一次(HOURS)

ALTER DATABASE 数据库名

SET CHANGE_TRACKING = ON

(CHANGE_RETENTION = 7 DAYS,

AUTO_CLEANUP = ON)

--数据库中没有用于跟踪更改的表时,可禁用数据库更改跟踪

--ALTER DATABASE 数据库名  

--SET CHANGE_TRACKING = OFF  


--2、查看数据库是否启用更改跟踪

SELECT DB_NAME(database_id) DataBaseName,is_auto_cleanup_on,

retention_period,retention_period_units_desc

FROM sys.change_tracking_databases


--3、对表启用更改跟踪

ALTER TABLE  [dbo].表名

ENABLE CHANGE_TRACKING

WITH (TRACK_COLUMNS_UPDATED = ON)

--对表禁用更改跟踪

--ALTER TABLE [dbo].[表名] 

--DISABLE CHANGE_TRACKING; 


--4、查看表是否启用更改跟踪

SELECT OBJECT_NAME(object_id) TableName,is_track_columns_updated_on

FROM sys.change_tracking_tables


--5、当前版本

SELECT CHANGE_TRACKING_CURRENT_VERSION ()

AS CURRENT_VERSION


--6、最小版本

SELECT CHANGE_TRACKING_MIN_VALID_VERSION

(OBJECT_ID('表名')) AS MIN_VERSION


--7、使用Changes关键字查看更改信息

SELECT ID,SYS_CHANGE_OPERATION,SYS_CHANGE_VERSION

FROM CHANGETABLE(CHANGES 表名, 变更版本号) AS CT


分享文章

Microsoft Doc 关于更改跟踪:https://docs.microsoft.com/zh-cn/sql/relational-databases/track-changes/about-change-tracking-sql-server?view=sql-server-ver15


SQL Server 变更数据捕获(CDC)监控表数据:https://www.cnblogs.com/gaizai/p/3479731.html


SQL Server 更改跟踪(Chang Tracking)监控表数据:https://www.cnblogs.com/gaizai/p/3482579.html


SQL Server 变更数据捕获(CDC):https://www.cnblogs.com/chenmh/p/4408825.html


使用更改跟踪实现数据同步:https://blog.csdn.net/zjcxc/article/details/3924959


小人物手记


文章转载自小人物手记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论