2008-10-20 109 views
1

我已经查看过一些资源,只是想澄清并获得意见。SQL Server 2000/2005标识列+复制

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

为了解决这个问题,我正在讨论2种或更多种方式的复制来解决全局访问问题,我们有标识列。

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

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

因此,如果您将范围1-10和11-20分配给2个服务器,一旦每个服务器插入了10行,您将在两个数据库中都有1-20种子?

回答

4

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

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

A到设置你的种子几种方法:

或者:用NOT FOR这样

  • 种子1复制设置你的种子/增量,增量2
  • 种子2,增加2
  • 种子-1,-2增量
  • 种子-2,-2增量
  • 种子1000000001,增量2
  • 种子1000000002,增量2
  • 种子-1000000002,增量-2
  • 种子-1000000001,增量-2

这给你5亿每台服务器8个服务器

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

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

无论哪种方式工作...