我正在构建一个带有 Oracle 后端的 Intranet Web 应用程序。出于对本讨论不重要的原因,Oracle DB 将被复制到另一台服务器上。我有理由确定我们将使用 Oracle Basic Replication,而不是 Advanced。
有人可以向我解释为什么围绕主键的大多数讨论都类似于:
- 在 99% 的情况下,对 PK 使用自动递增的整数就可以了
- 除非您正在进行复制。然后为您的 PK 使用 GUID。
似乎没有人解释为什么复制异常,我不明白为什么。
我正在构建一个带有 Oracle 后端的 Intranet Web 应用程序。出于对本讨论不重要的原因,Oracle DB 将被复制到另一台服务器上。我有理由确定我们将使用 Oracle Basic Replication,而不是 Advanced。
有人可以向我解释为什么围绕主键的大多数讨论都类似于:
似乎没有人解释为什么复制异常,我不明白为什么。
我相信仅当两台服务器都将接收新数据时,复制的 GUID 参数才真正适用。然后您不希望新行发生冲突,因此使用 GUID 作为 PK - 复制可以双向进行。
我们一直在复制自增表,但这是一个严格的主/从复制,其中数据只写入主控。
一个字:合并
合并复制可以工作的唯一方法是,如果所有“主”框都可以创建一个新密钥,而不会与其他密钥冲突。
如果您考虑当两台服务器相互复制并在同步之间添加数据时会发生什么,问题就变得很明显:
Time Server NewID
001 A 1
002 A 2
003 <sync of server A and B>
004 A 3
005 B 3
006 <sync of server A and B>
<---两个不同的记录现在有相同的ID,所以有冲突!