首页 > 解决方案 > 带有 CHANGE TRACKING 的 SSIS 包保留丢失的记录

问题描述

我有一个使用 CHANGE TRACKING 的 SSIS 包,它每 5 分钟运行一次,以在表上执行单向同步。

这些是涉及的数据库:

DestDB 包含一个名为 TableSyncVersions 的表,用于跟踪用于从 SourceDB 中的表中提取信息的最新同步版本。这个 Sync Version 用于包的下一次执行以获取下一批数据。

SourceDB 启用了快照隔离,并且 CT 查询正在由 SSIS 中的“OLE DB 源”执行。查询如下:

SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
BEGIN TRAN;

--Using OLE DB parameters to capture the current version within the transaction
SELECT ? = CAST(CHANGE_TRACKING_CURRENT_VERSION() AS NVARCHAR)

SELECT ct.KeyColumn1
     , ct.KeyColumn2
     , ct.KeyColumn3
     , st.Column1
     , st.Column2
     , st.Column3
     , st.Column4    
     , ct.SYS_CHANGE_OPERATION
FROM TABLE1 AS st 
--Using OLE DB Parameters to reference the version # saved in TableSyncVersions 
RIGHT OUTER JOIN CHANGETABLE(CHANGES TABLE1, ?) AS ct
    ON avq.KeyColumn1 = ct.KeyColumn1
       AND avq.KeyColumn2 = ct.KeyColumn2
       AND avq.KeyColumn3 = ct.KeyColumn3

COMMIT TRAN; 

这是此包的控制流的屏幕截图:

更改跟踪 SSIS 控制流

每天至少一次,即使运行没有错误,该包也会丢失 5-20 条记录,每天在不同的时间丢失记录。以前有人在更改跟踪方面经历过类似的事情吗?

任何帮助是极大的赞赏。

谢谢你,托利山

标签: sql-serverssischange-tracking

解决方案


推荐阅读