我正在测试快照复制过程(SQLServer 2008(是的,不幸的是......))。
一切都很好,但我无法在MS 文档中找到表是如何更新的。我看到发布过程删除表,然后重新创建它们,然后用数据填充它。
好的,很好。但是是否有一种安全措施(锁、事务……)可以防止在此同步期间进行查询(特别是在删除表和创建之间)?
让我们想象一个数据库A
( publisher ) 有一个在另一个数据库( subscriberT
)上复制的表。当分发代理正在运行并且表在服务器 B 上更新时(删除表 T + 创建表 T + bcp-in 数据?),在几毫秒内表将不存在。如果一个应用程序试图读取表,它会得到一个错误。B
T
T
当我尝试B
在分发代理运行时在服务器上启动跟踪时,我看不到为此步骤进行的任何事务。事实上,我可以T
在服务器上的复制表上进行选择B
(并出现错误)。
它真的应该如何工作吗?
有什么地方可以避免这种行为吗?
它真的应该如何工作吗?
是的,这应该是如何工作的。您仅在设置事务复制开始时运行快照。除非由于任何错误导致不同步,否则您不需要再次运行快照。如果您只运行快照复制,您可以控制何时要重新同步所有文章,并且在应用快照时不应连接到订阅者。
来自在线书籍:
什么时候可以订阅;什么时候可以使用订阅数据库?
有什么地方可以避免这种行为吗?
如果您确定您的模式和数据已经同步或者您只想复制未来的更改,您可以使用以下选项来避免快照。我在升级期间使用了很多次停机时间。
@sync_type=replication support only