# 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

小人物手记




