SymmetricDS

时间:2016-01-06 00:11:10

标签: firebird symmetricds

我感觉有点愚蠢,我搜索答案并没有让其他人遇到这个问题。

想象一下,我有NodeHQ,Node1和Node2。我创建了触发器以在3之间同步TableA:

Node1 <---> NodeHQ <---> Node2

Node1和Node2具有彼此不同的数据子集。 NodeHQ具有来自两个节点(两者的子集)的管理信息。 3个节点中的每个节点都在不同的NODE_GROUP中。

目前,通过我设置的触发器和路由器,在NodeHQ上插入/更新/删除记录可在Node1和Node2上运行。但是,如果我在Node1或Node2上进行更改,它只会进入NodeHQ。它永远不会传递给另一个。

到目前为止,我已尝试过:

  • 为所涉及的触发器设置SYNC_ON_INCOMING_BATCH为1,无需更改
  • 为每个NODE_GROUP创建单独的SYM_TRIGGER,无需更改
  • 使用转换无害地更改记录,无需更改
  • 删除然后插入所有规则,不做任何更改
  • 使用Symadmin sync-triggers -f强制触发娱乐,无需更改

我已经在这上面阅读了用户指南,他们对此非常不了解。 http://www.symmetricds.org/doc/3.6/user-guide/html/advanced.html#bi-direction-sync

现在,所有节点都有SYNC_ENABLED = 1。所有SYM_TRIGGER都设置为SYNC_ON_INCOMING_BATCH = 1。我的SYM_ROUTER都设置为SYNC = 1,并使用ROUTER_TYPE =&#39;默认&#39;。说实话,我已经尝试了很多其他的小东西,但似乎没有任何东西可以将数据传递给下一个NODE_GROUP。我的想法已经不多了。

他们自己的文档表明SYNC_ON_INCOMING_BATCH使得触发器将数据传递到它到达的每个地方的其他节点。到目前为止,我对此的改变没有产生任何结果。还有什么可以尝试的?或者您认为我应该怎么做?

我正在使用Firebird 2.52和SQL Dialect 1。

1 个答案:

答案 0 :(得分:1)

因此,在调试中运行SymmetricDS的3.7.19版时,我发现在我更改SYM表的大多数情况下,触发器没有正确重新生成。每当我更改规则时,日志表明它正在重建相关的触发器。

解决方案:在每个引擎上运行symadmin sync-triggers -f。这会强制重新生成每个触发器,并且似乎已经解决了这个问题。我肯定会追踪这一点,以帮助开发人员将其扼杀在萌芽状态。