“复制管理的身份范围已满,必须由复制代理进行更新。”
这已经开始发生了。我们最近故意破坏了复制,并且不打算重新建立复制。
我还需要做什么来修复此错误?有人能给我一些建议吗?
答案1
MS SQL Server 复制使用主键列上的数据库约束来防止服务器之间的冲突。
例如,假设您有一个名为“users”的表,其主键名为“user_id”,运行在服务器 A 和服务器 B 上。服务器 A 将对 user_id 列有一个约束,允许其值在 1 到 100 之间。服务器 B 将对 user_id 列有一个约束,允许其值在 101 到 200 之间。这样,如果在服务器 A 上同时插入一个新用户,同时在服务器 B 上插入另一个新用户,则他们的 user_id 号码永远不会相同。
由于您故意中断复制并且不打算重新启动它,因此您有两个选择。(标准免责声明:进行备份。)
如果还没有,您可以尝试从 SQL Server Management Studio 中删除该发布。这应该会从您的数据库中删除所有复制配置内容,并可能为您解决问题。
否则,如果您需要手动执行此操作,您应该可以手动进入并删除这些约束。转到相关表,深入查看约束,并查找名称类似于“repl_identity_range”的约束。右键单击它并选择“修改”。您应该看到一个限制身份范围的表达式。它看起来像这样:
([用户 ID]]>(1)且 [用户 ID]]<=(100))
这是确保新生成的 ID 对于每个服务器都是唯一的实际规则。删除它,您将不会再看到这些错误。
以下是一些可能有帮助/信息的其他资源:
http://www.simple-talk.com/sql/database-administration/the-identity-crisis-in-replication/ http://msdn.microsoft.com/en-us/library/ms176057.aspx