SymmetricDS无法自动初始化目标表,数据加载同步失败求助
问题:SymmetricDS从PostgreSQL同步到Oracle时自动建表失败
尝试使用SymmetricDS的加载功能,从PostgreSQL源数据库向Oracle目标数据库同步并自动创建表。根据文档说明,该功能应自动在目标库初始化表,但持续报错,仅手动在目标库创建表后同步才能正常工作。
报错日志
[master-engine] - DataService - Queueing up a load to node 002 [master-engine] - DataService - Cancelling load 7 [master-engine] - DataService - Table reload request submitted which does not have a valid trigger/router combination in sym_trigger_router. Request trigger id: 'pablo' router id: 'default' create time: 2024-11-25 03:48:35.72 [master-engine] - PushService - Push data sent to destination:002:002
配置详情
sym_router配置
| router_id | target_catalog_name | target_schema_name | target_table_name | source_node_group_id | target_node_group_id | router_type | router_expression | sync_on_update | sync_on_insert | sync_on_delete | use_source_catalog_schema | create_time | last_update_by | last_update_time | description |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| destination to source | NULL | NULL | NULL | destination | source | default | NULL | 1 | 1 | 1 | 0 | 05:59.6 | NULL | 05:59.6 | NULL |
| source to destination | NULL | NULL | simple_table | source | destination | default | NULL | 1 | 1 | 1 | 0 | 05:59.6 | NULL | 05:59.6 | NULL |
| default | NULL | NULL | NULL | source | destination | default | NULL | 1 | 1 | 1 | 1 | 43:01.3 | NULL | 43:01.3 | NULL |
sym_trigger_router配置
| trigger_id | router_id | enabled | initial_load_order | initial_load_select | initial_load_delete_stmt | ping_back_enabled | create_time | last_update_by | last_update_time | description | data_refresh_type |
|---|---|---|---|---|---|---|---|---|---|---|---|
| pablo | source to destination | 1 | 1 | NULL | NULL | 0 | 47:08.0 | NULL | 47:08.0 | NULL | NULL |
sym_trigger配置
| trigger_id | source_catalog_name | source_schema_name | source_table_name | channel_id | reload_channel_id | sync_on_update | sync_on_insert | sync_on_delete | sync_on_incoming_batch | name_for_update_trigger | name_for_insert_trigger | name_for_delete_trigger | sync_on_update_condition | sync_on_insert_condition | sync_on_delete_condition | custom_before_update_text | custom_before_insert_text | custom_before_delete_text | custom_on_update_text | custom_on_insert_text | custom_on_delete_text | external_select | tx_id_expression | channel_expression | excluded_column_names | included_column_names | sync_key_names | use_stream_lobs | use_capture_lobs | use_capture_old_data | use_handle_key_updates | stream_row | time_based_column_name | create_time | last_update_by | last_update_time | description |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| pablo | NULL | public | sample_table | default | reload | 1 | 1 | 1 | 1 | NULL | NULL | NULL | 1=1 | 1=1 | 1=1 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 0 | 0 | 1 | 1 | 1 | 1 | 0 | NULL | 12:41.0 | NULL | 12:41.0 | NULL |
问题分析
报错核心是请求的trigger_id 'pablo'与router_id 'default'在sym_trigger_router中无有效关联:
- 当前sym_trigger_router仅绑定了pablo与router_id 'source to destination',但加载请求使用的是router_id 'default',导致组合无效,加载被取消。
- 另外,自动建表依赖router配置正确映射目标库的schema和表,当前'source to destination'的target_schema_name为NULL,Oracle环境下需要指定正确的目标schema(通常是用户默认schema),否则无法确定建表位置。
解决方案
修正trigger-router关联
- 若加载请求必须使用router_id 'default',需在sym_trigger_router中添加一条记录:trigger_id='pablo'、router_id='default'、enabled=1。
- 或调整加载触发命令,使用正确的router_id:
symadmin reload --trigger pablo --router "source to destination"。
调整router的目标库配置
- 对于'source to destination'这条router,设置
target_schema_name为Oracle的目标schema(比如你的Oracle用户名),target_table_name改为sample_table(与源表一致),确保SymmetricDS知道要在哪个schema下建表。 - 若希望沿用源库的schema名称,可将
use_source_catalog_schema设为1,但需确保Oracle中已存在该schema。
- 对于'source to destination'这条router,设置
验证Oracle用户权限
- 确保SymmetricDS连接Oracle使用的用户拥有
CREATE TABLE权限,否则自动建表操作会静默失败。
- 确保SymmetricDS连接Oracle使用的用户拥有
检查加载参数
- 确认触发加载时未错误指定router参数,若通过UI操作,需选择与pablo绑定的router(source to destination)而非default。
内容的提问来源于stack exchange,提问作者Mendbayar Alzakhgui
相关产品推荐
相关产品推荐

