我正在使用SQL Server 2005标准版。 我有一个主数据库和configuration了事务复制的只读副本。 我的理解是,对于事务复制,'INSERT'语句不会返回
然而,我遇到一个问题,我们做一个插入,它返回(我知道这是因为我使用身份PK列,我有我的ID值)。 然后,我在副本数据库上运行一个SELECT语句,我尝试按ID查找该行,但它尚不存在。 如果再等几秒钟,一切都很好。 我对事务复制的理解是closures的吗? 有没有办法让我的思维方式发挥作用?
你的理解是不正确的。
在发布数据库上提交的事务和应用于订阅数据库的事务之间,事务复制可能具有显着的延迟。
首先,从发布数据库的事务日志(由日志读取器代理作业)收集已提交事务的日志logging,并(基本上)将其放入分发数据库中。 然后,分发代理作业将分发数据库中的更改推送到订阅数据库。
根据这3台计算机上的工作负载(如果它们是分开的)以及它们之间的networking带宽,延迟可能是几秒钟,几分钟或更长时间。
您正在考虑同步数据库镜像 – 在镜像数据库的日志驱动器上所有日志logging已被硬化之前,事务无法在主体上提交。 事务复制是一个asynchronous过程,正如其应有的一样。
希望这可以帮助。
我认为你期望从复制同步(镜像)的行为。
复制行为是asynchronous的,您的用户可能不会立即看到更改。
请参阅: http : //msdn.microsoft.com/en-us/library/ms151706.aspx
编辑:具体来说,这个文件谈到在某些configuration下实现最less的延迟,而不是同步提交。