У меня есть пакет служб SSIS, использующий CHANGE TRACKING, который запускается каждые 5 минут для выполнения односторонней синхронизации таблицы.
Это задействованные базы данных:
DestDB содержит таблицу TableSyncVersions, которая используется для отслеживания самой последней версии Sync, используемой для извлечения информации из таблицы в SourceDB. Эта версия синхронизации используется для следующего выполнения пакета для получения следующего пакета данных.
В SourceDB включена изоляция моментальных снимков, и запрос CT выполняется "источником OLE DB" в SSIS. Запрос выглядит следующим образом:
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;
Вот снимок экрана потока управления для этого пакета:
AtПо крайней мере, один раз в день пакет пропускает 5-20 записей, хотя он запускается без ошибок, записи пропускаются каждый раз в разное время. Кто-нибудь испытывал что-то подобное с отслеживанием изменений раньше?
Любая помощь очень ценится.
Спасибо, Тори Хилл