2017-02-08 8 views
1

複数のDBが1つのマスターDBにレプリケートされていますが、私は他の目的にも使用するテーブルIDを持つテーブルを持っています。私のマスターDBに複製されているすべての行にDB識別情報が含まれています。 可能ですか?私が作ったすべてのテストは何もしなくなった。SymmetricDS - 変換時にノードIDを追加する

+0

したがって、source_id列をマスター表に追加し、それを複合主キーにしてソースdbsから移入するとしますか?そうであれば、変換がそれを行います。 – chenson42

答えて

0

いいえ変換の性質上不可能です。それらはノードのグループにわたって定義されています。すべてのクライアントノードが同じグループに属していると仮定すると、1つの変換定義を共有します。

別の方法を考えてみましょう。各クライアント・ノードは、その外部IDによって一意に識別されます。すべてのクライアント上のIDテーブルが接頭辞として使用され、他のものと重複することを心配することなく自由にマスタに同期させます。

アプリケーションがレガシーであり、プレフィックスを収容するために変更できない場合は、クライアント側からのデータをインターセプトするライターフィルタを使用して、クライアントの外部IDと同じプレフィックスをIDテーブルの各更新に追加します。クライアント側では、接頭辞を削除するライターフィルタを追加します。マスターのプレフィックスを使用して、送信元のクライアントにのみ行をルーティングできます。 「変数」変換を使用可能であるhttps://stackoverflow.com/a/39389635/32090

0

詳細にデータベース・ライター・フィルタを説明する別の答えがあります。次に、 "store"が "corp"にレプリケートし、 "source_node_id"カラムを動的に追加する例を示します。

INSERT INTO SYM_TRANSFORM_TABLE (TRANSFORM_ID, SOURCE_NODE_GROUP_ID, TARGET_NODE_GROUP_ID, TRANSFORM_POINT, SOURCE_TABLE_NAME, TARGET_TABLE_NAME, COLUMN_POLICY, DELETE_ACTION) 
VALUES ('item', 'corp', 'store', 'EXTRACT', 'item', 'item', 'IMPLIED', 'DEL_ROW'); 

INSERT INTO SYM_TRANSFORM_COLUMN (TRANSFORM_ID, INCLUDE_ON, TARGET_COLUMN_NAME, SOURCE_COLUMN_NAME, PK, TRANSFORM_TYPE, TRANSFORM_EXPRESSION, TRANSFORM_ORDER) 
VALUES ('item', '*', 'ITEM_ID', 'ITEM_ID', 1, 'copy', null, 1); 

INSERT INTO SYM_TRANSFORM_COLUMN (TRANSFORM_ID, INCLUDE_ON, TARGET_COLUMN_NAME, SOURCE_COLUMN_NAME, PK, TRANSFORM_TYPE, TRANSFORM_EXPRESSION, TRANSFORM_ORDER) 
VALUES ('item', '*', 'SOURCE_NODE_ID', null, 1, 'variable', 'source_node_id', 2); 
+0

これを試してもうまくいきません。常にテーブル全体を複製し、SOURCE_NODE_IDを追加しません。 私はデータを常に送信することにも限界があります - > corp、データベースはありません - > store – Caifas

関連する問題