首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SymmetricDS文件同步

SymmetricDS文件同步
EN

Stack Overflow用户
提问于 2020-09-03 00:55:19
回答 1查看 64关注 1票数 0

我正在使用SymmetricDS (版本3.12.3)在服务器(让我们称之为omni)和客户端(让我们称之为网站)之间设置文件同步。我已经使用SymmetricDS在上述客户端和服务器之间进行数据库同步有一段时间了。但是,一旦FileSyncTrackerJob运行并检测到在服务器上的源目录中创建/修改/删除了一个文件,SymmetricDS就会抛出错误。它抛出以下错误:

终端日志输出:

代码语言:javascript
运行
复制
[omni-000] - FileTriggerTracker - Tracked 2 files in 0 seconds.  Found 2 files changed.
[] - DataGapRouteReader - org.jumpmind.db.sql.SqlException: The result set is closed
        at org.jumpmind.db.sql.AbstractSqlTemplate.translate(AbstractSqlTemplate.java:306)
        at org.jumpmind.db.platform.firebird.FirebirdJdbcSqlTemplate.translate(FirebirdJdbcSqlTemplate.java:62)
        at org.jumpmind.db.sql.AbstractSqlTemplate.translate(AbstractSqlTemplate.java:295)
        at org.jumpmind.db.sql.JdbcSqlReadCursor.next(JdbcSqlReadCursor.java:146)
        at org.jumpmind.symmetric.route.DataGapRouteReader.fillPeekAheadQueue(DataGapRouteReader.java:478)
        at org.jumpmind.symmetric.route.DataGapRouteReader.executeNonTransactional(DataGapRouteReader.java:250)
        at org.jumpmind.symmetric.route.DataGapRouteReader.execute(DataGapRouteReader.java:155)
        at org.jumpmind.symmetric.route.DataGapRouteReader.run(DataGapRouteReader.java:130)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
        at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.sql.SQLException: The result set is closed
        at org.firebirdsql.jdbc.AbstractResultSet.checkOpen(AbstractResultSet.java:297)
        at org.firebirdsql.jdbc.AbstractResultSet.checkCursorMove(AbstractResultSet.java:285)
        at org.firebirdsql.jdbc.AbstractResultSet.next(AbstractResultSet.java:360)
        at org.apache.commons.dbcp.DelegatingResultSet.next(DelegatingResultSet.java:207)
        at org.apache.commons.dbcp.DelegatingResultSet.next(DelegatingResultSet.java:207)
        at org.jumpmind.db.sql.JdbcSqlReadCursor.next(JdbcSqlReadCursor.java:132)
        ... 7 more

日志文件输出更详细一些:

代码语言:javascript
运行
复制
2020-09-02 18:25:01,427 DEBUG [] [JdbcSqlTemplate] [omni-000-router-reader-2] (20ms.) select d.data_id, d.table_name, d.event_type, cast(d.row_data as varchar(20000)) as row_data, cast(d.pk_data as varchar(1000)) as pk_data, cast(d.old_data as varchar(20000)) as old_data, d.create_time, d.trigger_hist_id, d.channel_id, d.transaction_id, d.source_node_id, d.external_data, d.node_list, d.is_prerouted from sym_data d where d.channel_id='filesync'  and ((d.data_id between 15398 and 50015397))   order by d.data_id asc 
2020-09-02 18:25:01,429 ERROR [] [DataGapRouteReader] [omni-000-router-reader-2]  StackTraceKey.init [SqlException:994639622] org.jumpmind.db.sql.SqlException: The result set is closed
    at org.jumpmind.db.sql.AbstractSqlTemplate.translate(AbstractSqlTemplate.java:306)
    at org.jumpmind.db.platform.firebird.FirebirdJdbcSqlTemplate.translate(FirebirdJdbcSqlTemplate.java:62)
    at org.jumpmind.db.sql.AbstractSqlTemplate.translate(AbstractSqlTemplate.java:295)
    at org.jumpmind.db.sql.JdbcSqlReadCursor.next(JdbcSqlReadCursor.java:146)
    at org.jumpmind.symmetric.route.DataGapRouteReader.fillPeekAheadQueue(DataGapRouteReader.java:478)
    at org.jumpmind.symmetric.route.DataGapRouteReader.executeNonTransactional(DataGapRouteReader.java:250)
    at org.jumpmind.symmetric.route.DataGapRouteReader.execute(DataGapRouteReader.java:155)
    at org.jumpmind.symmetric.route.DataGapRouteReader.run(DataGapRouteReader.java:130)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
    at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.sql.SQLException: The result set is closed
    at org.firebirdsql.jdbc.AbstractResultSet.checkOpen(AbstractResultSet.java:297)
    at org.firebirdsql.jdbc.AbstractResultSet.checkCursorMove(AbstractResultSet.java:285)
    at org.firebirdsql.jdbc.AbstractResultSet.next(AbstractResultSet.java:360)
    at org.apache.commons.dbcp.DelegatingResultSet.next(DelegatingResultSet.java:207)
    at org.apache.commons.dbcp.DelegatingResultSet.next(DelegatingResultSet.java:207)
    at org.jumpmind.db.sql.JdbcSqlReadCursor.next(JdbcSqlReadCursor.java:132)
    ... 7 more

下面是我的sql,用于设置适当的sym表以进行文件同步:

SYM_FILE_TRIGGER table

代码语言:javascript
运行
复制
INSERT INTO SYM_FILE_TRIGGER 
(   TRIGGER_ID,
    CHANNEL_ID,
    RELOAD_CHANNEL_ID,
    BASE_DIR,
    RECURSE,
    INCLUDES_FILES,
    EXCLUDES_FILES,
    SYNC_ON_CREATE,
    SYNC_ON_MODIFIED,
    SYNC_ON_DELETE,
    SYNC_ON_CTL_FILE,
    DELETE_AFTER_SYNC,
    BEFORE_COPY_SCRIPT,
    AFTER_COPY_SCRIPT,
    CREATE_TIME,
    LAST_UPDATE_BY,
    LAST_UPDATE_TIME,
    DESCRIPTION
)
VALUES 
(   'file_trigger',
    'filesync',
    'filesync_reload',
    'c:\website_images\',
    1,
    '*.jpg',
    NULL,
    1,
    1,
    1,
    0,
    0,
    NULL,
    NULL,
    current_timestamp,
    'Admin',
    current_timestamp,
    'file trigger'
);

sym_router table

代码语言:javascript
运行
复制
insert into sym_router 
(   router_id,
    source_node_group_id,
    target_node_group_id,
    router_type,
    sync_on_update,
    sync_on_insert,
    sync_on_delete,
    create_time,
    last_update_by,
    last_update_time,
    description
)
VALUES
(   'filerouter_omniserver_2_website',
    'omni',
    'website',
    'default',
    1,
    1,
    1,
    current_timestamp,
    'Admin',
    current_timestamp,
    'file router'
);

SYM_FILE_TRIGGER_ROUTER table

代码语言:javascript
运行
复制
INSERT INTO SYM_FILE_TRIGGER_ROUTER 
(   TRIGGER_ID,
    ROUTER_ID,
    ENABLED,
    INITIAL_LOAD_ENABLED,
    TARGET_BASE_DIR,
    CONFLICT_STRATEGY,
    CREATE_TIME,
    LAST_UPDATE_BY,
    LAST_UPDATE_TIME,
    DESCRIPTION
)
VALUES
(   'file_trigger',
    'filerouter_omniserver_2_website',
    1,
    1,
    '\home\filesync',
    'source_wins',
    current_timestamp,
    'Admin',
    current_timestamp,
    'file trigger router'
);

我有两个sym节点组,node_group_id的节点组分别是omniwebsite

omni服务器是Windows机器,而客户端是Linux (Ubuntu)机器。仅供参考,数据库同步在服务器上的firebird数据库和客户端上的mysql数据库之间进行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-03 23:12:35

当使用“非事务性”批处理算法时,这看起来可能是Firebird上的SymmetricDS的错误。对于filesync通道,批处理算法被设置为“非事务性”,而对于变更数据捕获通道,它被设置为“默认值”。尝试切换filesync以使用“默认”批处理算法,如下所示:

代码语言:javascript
运行
复制
update sym_channel set batch_algorithm = 'default' where channel_id = 'filesync' 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63710179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档