Matt Dawdy Asked: 2010-03-27 09:44:31 +0800 CST2010-03-27 09:44:31 +0800 CST 2010-03-27 09:44:31 +0800 CST SQL Server 复制错误 772 “复制管理的身份范围已满,必须由复制代理更新。” 这已经开始发生了。我们最近故意中断了复制,并且不打算重新建立复制。 我还需要做什么来修复此错误?有人对我有什么建议吗? sql-server replication 1 个回答 Voted Best Answer Deutsch 2010-03-27T12:06:56+08:002010-03-27T12:06:56+08:00 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”的名称。右键单击它并选择“修改”。您应该看到一个限制身份范围的表达式。它看起来像这样: ([user_id]]>(1) AND [user_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
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”的名称。右键单击它并选择“修改”。您应该看到一个限制身份范围的表达式。它看起来像这样:
([user_id]]>(1) AND [user_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