如果 ETL 进程尝试通过将列定义的行包含rowversion
在rowversion
“增量窗口”内来检测 SQL Server 中系统版本表上的数据更改,例如:
where row_version >= @previous_etl_cycle_rowversion
and row_version < @current_etl_cycle_rowversion
@previous_etl_cycle_rowversion
..和的值@current_etl_cycle_rowversion
是从一个日志表中选择的,该表的最新值rowversion
在每个 ETL 周期开始时通过以下方式附加到所述日志表中:
insert into etl_cycle_logged_rowversion_marker (cycle_start_row_version)
select @@DBTS
...是否有可能由于的行为相对于事务一致性而错过/跳过
rowversion
落入给定“增量窗口”(由 2 个@@DBTS
值限制)内的记录?rowversion
- 即,是否有可能rowversion
反映在“最终”一致性的基础上?
我正在考虑这样一种情况,即在单个事务中更新了 1000 条记录,并且以某种方式@@DBTS
“提前”了记录的提交rowversion
,但该记录的特定版本尚不可读......
(为了确定问题的范围,请排除在如此大的批量事务中删除记录或立即连续更新给定记录的任何情况。)