SQL Server 2000/2005标识列+复制

时间:2008-10-20 16:09:32

标签: sql sql-server-2005 sql-server-2000 replication

我已经查看了一些资源,只想澄清并得到意见。

首先,为了完全避免任何问题,我们可以不打扰使用标识列作为主键,而是让它们自己生成,只是让这些值以两种方式复制,假设它们在创建的任何时候都是唯一的。

出于这个问题的目的,我正在讨论解决全局访问问题的2种或更多种方式复制,我们确实有标识列。

现在我们正在设置事务复制,两个数据库应该相互复制。

据我所知,你为每个数据库服务器分配了一系列种子值,它会使用这些,你知道你给出了不交叉范围的唯一原因。那么这意味着在复制过程中这些值是否会插入到种子列中?

所以,如果你在每个服务器插入10行后将范围1-10和11-20分配给2个服务器,那么两个数据库中都会有种子1-20?

1 个答案:

答案 0 :(得分:4)

可以将选项“NOT FOR REPLICATION”应用于标识列(以及触发器和其他约束)。

在你的例子中, server1将播种1-10,但只接受复制11-20。

设置种子的几种方法:

或者:使用NOT FOR REPLICATION设置种子/增量

  • 种子1,增量2
  • 种子2,增量2
  • 种子-1,增量-2
  • 种子-2,增量-2
  • 种子1000000001,增量2
  • 种子1000000002,增量2
  • 种子-1000000002,增量-2
  • 种子-1000000001,增量-2

这为8台服务器提供了每台服务器500,000,000

或者: 添加名为ServerID的第二列以提供复合键,对ID列使用NOT FOR REPLICATION

这可以扩展到256个服务器,用于tinyint,每个服务器有2 ^ 32行

无论哪种方式都有效......