2015-09-02 28 views
0

我一直在嘗試使用SymmetricDS進行條件同步。問題是,無論我做什麼,它都會忽略應該有條件同步的表,並且只是在沒有條件的情況下同步表。使用SymmetricDS進行條件同步

所以我想,我使用這些條件錯了。我無法找到用戶指南當前版本的材料,所以我有以下幾點:

insert into sym_router 
(router_id,source_node_group_id,target_node_group_id,router_type,router_expression,create_time,last_update_time) 
values('corp_2_one_store', 'corp', 'store', 'column','STORE_ID=:EXTERNAL_ID or OLD_STORE_ID=:EXTERNAL_ID',current_timestamp, current_timestamp); 

insert into sym_trigger_router 
(trigger_id,router_id,initial_load_order,initial_load_select,last_update_time,create_time) 
values('item_selling_price','corp_2_one_store',100,'store_id=''$(externalId)''',current_timestamp,current_timestamp); 

從SymmetricDS包裝的樣品,但我改變了「店」到「客戶端」和「總公司」到「服務器「在我自己的配置中,它不再工作。坦率地說,我不知道STORE_ID=:EXTERNAL_ID or OLD_STORE_ID=:EXTERNAL_IDstore_id=''$(externalId)''這裏發生了什麼,以及爲什麼有兩個。

從網站,我從早期版本有這樣的例子:

insert into SYM_TRIGGER 
    (source_table_name, source_node_group_id, target_node_group_id, channel_id, 
    sync_on_insert, sync_on_update, sync_on_delete, 
    node_select, 
    initial_load_order, last_updated_by, last_updated_time, create_time) 
values 
    ('sale_transaction', 'corp', 'store', 'sale_transaction', 
    1, 1, 1, 
    'and external_id = $(curTriggerValue).store', 
    105, 'demo', current_timestamp, current_timestamp); 

但是,這顯然是行不通的,因爲這個信息的一半現在被存放在不同的地方,但即使除去那些不存在了colums (誰知道,也許這些新表只存儲可讀性相同的信息?)我無法讓它工作。

有什麼建議嗎?

更新 當我只運行訓練示例時,一切正常。所以這裏真正的問題是:這些是什麼意思: STORE_ID=:EXTERNAL_ID or OLD_STORE_ID=:EXTERNAL_IDstore_id=''$(externalId)''?我怎麼能改變,如果我的節點被稱爲server而不是corpclient而不是store

更新2this,我的路由器是好的,我有一些問題,我sym_trigger_router配置,即store_id=''$(externalId)''

+0

您使用的symmetricDs的版本是什麼? –

+0

@BorisPavlović最新的3.7.19 – SMSk

+0

路由器看起來不錯,你可以看看在插入/更新db路由這個路由器路由'sym_outgoing_batch'表中有一個新行後的行嗎?該表可以通過'sym_data_event'和'sym_data'連接,以查看哪些數據屬於路由出站批處理。 –

回答

1

於是,我找到了我的問題。我的表名中有一個錯字,所以沒有爲它創建觸發器。

對於那些,誰不知何故偶然發現了這個問題:

1)什麼是STORE_ID=:EXTERNAL_ID or OLD_STORE_ID=:EXTERNAL_ID

它寫清楚here,但兩個詞,STORE_ID是列名,OLD_意味着前面列的值:EXTERNAL_ID是SymmetricDS的一個內部變量,用:NODE_ID等一起。

該字符串用於確定是否獲取當前行,並且它是路由器的參數。 (如果您決定使用另一種類型的路由器,要小心,它有其他參數,要勤奮!)

2)什麼是store_id=''$(externalId)''

這說明一些點here,但同樣,在兩句話:默認情況下,初始加載期間對稱收集表中的所有數據(select * from ...)。該參數是附加到where子句的內容,t可用於引用正在同步的表。$(externalId)是SymmetricDS在啓動過程中初始化的一個變量,在用戶指南的某處有一個這樣的變量列表。