我有一个系统,SQL Server 2008 R2数据库被镜像到第二台服务器。第一台服务器上的数据库已打开更改跟踪,而在第二台服务器上,我们创建镜像数据库的数据库快照,以便为具有更改跟踪功能的ETL系统提取数据。两个数据库的隔离级别为Read Committed
有时当我们从数据库快照中提取更改跟踪信息时,使用changetable函数,有一行是插入或更新(i,u),但该行不在基表中,它被删除。当我去检查第一台服务器时,可更改功能只显示一个' d'同一主键的行。看起来快照是在删除发生在基表上但在更改跟踪跟踪信息之前拍摄的。
我的问题是:
所以这让我有了这些问题。
为什么我会看到上面概述的行为?如果更改跟踪是同步的,为什么我会从更改跟踪中获得不会在表格中显示相应行的插入/更新?
将隔离级别更改为快照隔离是否有助于缓解上述情况? 编辑: 在阅读了有关快照隔离建议的更多信息之后,建议您在事务中包含对change_tracking_current_version的调用以及对changetable(更改...)的调用以使所有内容保持一致。数据库快照应该为我做,因为它是一个时间点。我将change_tracking_current_version中的值传递给changetable(changes ...)函数。
如果您需要更多信息,请与我们联系!
由于
克里斯