Ste*_*wie 5 replication sql-server
我在两个相同的数据库之间设置了一个对等事务复制集,每个数据库都被两个不同服务器上的不同程序使用。由于我们实现了复制,我一直在表上遇到 PK 冲突,尽管插入语句没有输入主键并让 SQL Server 处理它,但两个程序都会更新。在这种情况下,表名是 Statistics: Violation of PRIMARY KEY 约束 'PK_Statistics'。无法在对象“dbo.Statistic”中插入重复键。
我的插入语句:
INSERT INTO [StackExchange].[dbo].[Statistic]
([UserId]
,[CreateDate]
,[IsError]
,[CustomData]
,[ModuleId]
,[StatisticTypeId])
VALUES
(19,GETDATE(),'true','test replication',1,1)
Run Code Online (Sandbox Code Playgroud)
此外,服务器中的事件查看器充满了冲突数据:
这是我在服务器 2 上经常遇到的错误:
在对等 1(传入)、事务 id 0x000000000031dea3 和对等(空)(在磁盘上)、事务 id(空)之间的对等 2 上检测到“更新-删除”类型的冲突
这是我在服务器 1 上遇到的相同事务错误:
在对等 2(传入)、事务 ID 0x0000000000245950 和对等 1(在磁盘上)、事务 ID 0x000000000031dea3 之间的对等 1 上检测到“删除更新”类型的冲突
在这种情况下,你会建议我做什么?
谢谢!
对于PK违规:
您需要确保对等拓扑中的每个节点都有一个身份范围岛,如果插入源自该节点,则该身份范围岛不会发生冲突。为此,您需要运行 DBCC checkident(talbename, reseed, start of range),即。节点 1 为 DBCC checkident(tablename, reseed, 100000),节点 2 为 DBCC checkident(tablename, reseed, 200000),依此类推。
对于更新-删除冲突:
您需要将位置特定标识符列添加到表中,并将此列扩展到您的 PK。这将减少发生冲突的机会。如果这不是一个选项,您将丢失数据,因为具有最高发起者 ID 的节点上发生的更改将赢得冲突。这可能适合你,也可能不适合你。
归档时间: |
|
查看次数: |
713 次 |
最近记录: |