【问题标题】:SQL Server 2000/2005 identity column + replicationSQL Server 2000/2005 标识列 + 复制
【发布时间】:2010-09-18 03:40:36
【问题描述】:

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

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

出于这个问题的目的,我说的是 2 种或多种方式复制来解决全局访问问题,我们确实有身份列。

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

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

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

【问题讨论】:

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


    【解决方案1】:

    有一个选项“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 行

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

    【讨论】:

      猜你喜欢
      • 2010-12-17
      • 2013-01-25
      • 2023-03-28
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多