我已经查看了一些资源,只想澄清并得到意见。
首先,为了完全避免任何问题,我们可以不打扰使用标识列作为主键,而是让它们自己生成,只是让这些值以两种方式复制,假设它们在创建的任何时候都是唯一的。
出于这个问题的目的,我正在讨论解决全局访问问题的2种或更多种方式复制,我们确实有标识列。
现在我们正在设置事务复制,两个数据库应该相互复制。
据我所知,你为每个数据库服务器分配了一系列种子值,它会使用这些,你知道你给出了不交叉范围的唯一原因。那么这意味着在复制过程中这些值是否会插入到种子列中?
所以,如果你在每个服务器插入10行后将范围1-10和11-20分配给2个服务器,那么两个数据库中都会有种子1-20?
答案 0 :(得分:4)
可以将选项“NOT FOR REPLICATION”应用于标识列(以及触发器和其他约束)。
在你的例子中, server1将播种1-10,但只接受复制11-20。
设置种子的几种方法:
或者:使用NOT FOR REPLICATION设置种子/增量
这为8台服务器提供了每台服务器500,000,000
或者: 添加名为ServerID的第二列以提供复合键,对ID列使用NOT FOR REPLICATION
这可以扩展到256个服务器,用于tinyint,每个服务器有2 ^ 32行
无论哪种方式都有效......