我正在使用 SQL Server 2005 标准版。我有一个主数据库和一个配置了事务复制的只读副本。我的理解是,对于事务复制,“INSERT”语句直到
- 该行被插入到主行中,并且
- 该行已完全复制到副本数据库
但是,我遇到了一个问题,我们进行插入,它返回(我知道这一点,因为我正在使用身份 PK 列,并且我有我的 ID 值)。然后,我在副本数据库上运行 SELECT 语句,尝试按 ID 查找行,但它尚不存在。如果我再等几秒钟,一切都很好。我对事务复制的理解是否关闭?有没有办法让它按照我的想法工作?
我正在使用 SQL Server 2005 标准版。我有一个主数据库和一个配置了事务复制的只读副本。我的理解是,对于事务复制,“INSERT”语句直到
但是,我遇到了一个问题,我们进行插入,它返回(我知道这一点,因为我正在使用身份 PK 列,并且我有我的 ID 值)。然后,我在副本数据库上运行 SELECT 语句,尝试按 ID 查找行,但它尚不存在。如果我再等几秒钟,一切都很好。我对事务复制的理解是否关闭?有没有办法让它按照我的想法工作?
你的理解是不正确的。
事务复制在发布数据库上提交的事务和应用于订阅数据库的事务之间可能会有很大的延迟。
首先,已提交事务的日志记录从发布数据库的事务日志中(由日志读取器代理作业)收集,并(基本上)放入分发数据库。然后分发代理作业将更改从分发数据库推送或拉取到订阅数据库。
根据这 3 台机器上的工作负载(如果它们是独立的)和它们之间的网络带宽,延迟可能是几秒、几分钟或更长。
您正在考虑同步数据库镜像 - 在主体上的事务无法提交,直到它的所有日志记录都已在镜像数据库的日志驱动器上得到强化。事务复制是一个异步过程,并且完全按照应有的方式工作。
希望这可以帮助。
我认为您期望复制的同步(镜像)行为。
复制行为是异步的,您的订阅者可能不会立即看到更改。
请参阅:http: //msdn.microsoft.com/en-us/library/ms151706.aspx
编辑:具体来说,本文档谈到在某些配置下最多实现最小延迟,而不是同步提交。