我使用SymetricDS,有时对称引发错误:
INFO [slave] [DefaultDatabaseWriter] [slave-data-loader-1] Failed to process update event in batch 298578.
ERROR [slave] [DataLoaderService] [slave-data-loader-1] Failed to load batch 000-298578 StackTraceKey [UniqueKeyException:4114584735]
ERROR [master][AcknowledgeService] [master-push-default-5] The outgoing batch 001-298578 failed: ERREUR: la valeur d'une clé dupliquée rompt la contrainte unique « primary_key_constaint_name » Détail : La clé existe déjà.
我试图通过插入sym_conflict这一行来检测和纠正冲突:
insert into sym_conflict(conflict_id, source_node_group_id, target_node_group_id, detect_type resolve_type, ping_back)
values('master-win', 'master', 'slave', 'USE_CHANGED_DATA', 'INGORE', 'SINGLE_ROW');
但这不起作用。在文档中发现了这个:
USE_CHANGED_DATA :表示主要密钥加上源系统上已更改的任何数据都将用于检测冲突。如果目标系统上存在的行与源系统上的源系统上已更改的列上的旧值相同,则在更新或删除期间未检测到冲突。如果插入期间已存在行,则表示已检测到冲突。
对称如何检测更新中的PK冲突并忽略它?感谢。
答案 0 :(得分:2)
没有冲突检测,在这种情况下不需要解决。默认情况下,如果目标节点上已经有一个具有相同主键的行,则插入时的symmetricDs将返回更新,反之亦然,以便更新回落到插入:http://www.symmetricds.org/doc/3.6/user-guide/html-single/user-guide.html#d4e104