1

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

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

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

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

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

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

4

1 回答 1

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

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

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

对于 tinyint,这可以扩展到 256 台服务器,每台服务器 2^32 行

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

于 2008-10-21T18:43:25.200 回答