我正在使用SymmetricDS (版本3.12.3)在服务器(让我们称之为omni)和客户端(让我们称之为网站)之间设置文件同步。我已经使用SymmetricDS在上述客户端和服务器之间进行数据库同步有一段时间了。但是,一旦FileSyncTrackerJob运行并检测到在服务器上的源目录中创建/修改/删除了一个文件,SymmetricDS就会抛出错误。它抛出以下错误:
终端日志输出:
[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
日志文件输出更详细一些:
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
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
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
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
的节点组分别是omni
和website
。
omni服务器是Windows机器,而客户端是Linux (Ubuntu)机器。仅供参考,数据库同步在服务器上的firebird数据库和客户端上的mysql数据库之间进行。
发布于 2020-09-03 23:12:35
当使用“非事务性”批处理算法时,这看起来可能是Firebird上的SymmetricDS的错误。对于filesync通道,批处理算法被设置为“非事务性”,而对于变更数据捕获通道,它被设置为“默认值”。尝试切换filesync以使用“默认”批处理算法,如下所示:
update sym_channel set batch_algorithm = 'default' where channel_id = 'filesync'
https://stackoverflow.com/questions/63710179
复制相似问题