SQL Server 2000/2005 标识列 + 复制

发布于 2024-07-06 19:35:24 字数 374 浏览 5 评论 0原文

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

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

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

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

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

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

I have looked at some resources already and just want to clarify and get an opinion.

First of all to totally avoid any problems we could just not bother using identity columns as primary keys instead have them generated ourselves and just have those values replicated both ways presuming they are always unique at any time of creation.

For the purposes of this question I am talking about 2 or more way replication to solve global access issues and we do have identity columns.

Now we are setting up transactional replication and both databases should replicate to each other.

As I understand it you allocate a range of seed values to each database server and it will use these, you know there unique cause you gave ranges that do not cross. So does this mean during replication these values are inserted into the seed column?

so if you allocate ranges 1-10 and 11-20 to 2 servers once each server has inserted 10 rows you will have seeds 1-20 in both databases?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

是伱的 2024-07-13 19:35:24

有选项“不用于复制”可以应用于标识列(以及触发器和其他约束)。

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

有几种设置种子的方法:

要么:使用 NOT FOR REPLICATION 设置种子/增量,如下所示

  • Seed 1,increment 2
  • Seed 2,increment 2
  • Seed -1,increment -2
  • Seed -2​​,increment -2
  • Seed 1000000001,increment 2
  • 种子 1000000002,增量 2
  • 种子 -1000000002,增量 -2
  • 种子 -1000000001,增量 -2

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

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

这可以扩展到,例如,tinyint 的 256 个服务器,每个服务器 2^32 行

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

There is the option "NOT FOR REPLICATION" that can be applied to identity columns (and triggers and other constraints).

In your example,
server1 would seed 1-10 but simply accept replicated 11-20.

A couple of ways to setting your seeds:

Either: set your seed/increments with NOT FOR REPLICATION like this

  • Seed 1, increment 2
  • Seed 2, increment 2
  • Seed -1, increment -2
  • Seed -2, increment -2
  • Seed 1000000001, increment 2
  • Seed 1000000002, increment 2
  • Seed -1000000002, increment -2
  • Seed -1000000001, increment -2

This gives you 500,000,000 per server for 8 servers

Or:
Add a second column called ServerID to give composite keys, use NOT FOR REPLICATION for the ID column

This scales up to,say, 256 servers for tinyint with 2^32 rows per server

Either way works...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文