【发布时间】:2011-04-28 17:30:27
【问题描述】:
现在我有一个数据库,其中 PK 是 int IDENTITY。去年,我最近的任务是将这些添加到复制拓扑中。除了 IDENTITY 字段之外,这已经很好地解决了。
我想探索使用uniqeidentifier(GUID) 更改或替换它们的选项。
插入一个新的PK列是否可行?
将其增加到big int 会更好吗?
还有什么我应该考虑的吗?
详细说明我为什么要这样做:
据我了解,当 Replication 遇到 IDENTITY 列时,它会为每个订阅者预留一个身份范围,例如 1-1000(默认),以确保该列的唯一 INT。您拥有的订阅者越多,它可能会成为更大的问题。这导致了我们不断收到的身份范围检查约束错误。
谢谢
【问题讨论】:
-
您不能只添加一个新的 GUID 列以用于复制吗?只需添加 - 而不是替换 - 可能会更容易(如果可行的话)
-
必须完成它才能使用复制并完成。我要解决的问题是“身份范围检查约束”,这与复制如何处理身份字段直接相关。
-
所以在这种情况下,我会添加一个新的 GUID 字段,并使其成为 PK - 但一个非集群的 PK - 并将 INT IDENTITY 保留在适当的位置作为集群键在桌子上。否则你的表现可能会受到很大影响......
-
@marc_s - 如果您经常更新,GUID 上的集群对热点没有帮助吗?
-
@JNK:自 SQL SErver v7 以来,热点可能不再存在 - 但 GUID 上的集群会给您带来可怕的索引碎片并损害性能......
标签: sql sql-server-2005 primary-key replication identity-column