Использование SymmetricDS для подключения к базе данных Firebird

Я хочу синхронизировать две базы данных, одна из которых является базой данных Firebird. В настоящее время я пытаюсь использовать для этого SymmetricDS. К сожалению, у меня возникли проблемы с подключением к базе данных Firebird:

Во-первых, я использовал инструмент Firebird isql для создания новой «пустой» базы данных с именем test.fbd.

Я указал имя класса для драйвера JDBC в файле свойств следующим образом: db.driver=org.firebirdsql.jdbc.FBDriver

Я указал URL-адрес JDBC, используемый для подключения к базе данных в файле свойств, следующим образом: db.url=jdbc:firebirdsql:localhost:<path to database>\TEST.FDB"?encoding=UTF8

Затем я проверяю, могу ли я подключиться к этой базе данных firebird с именем test.fbd: bin/dbsql --engine omni-000

Однако, независимо от того, что я делаю, он выдает исключение, говоря, что база данных недоступна.

Ниже приведен полный вывод.

Просто примечание: я смог подключиться к базе данных test.fbd с помощью инструмента Firebird isql, и я мог подключиться к ней с помощью DBeaver.

[] - AbstractCommandLauncher - Option: name=engine, value={omni-000}
[] - AbstractSymmetricEngine - Initializing connection to database
[] - BasicDataSourceFactory - Setting required database connection property columnLabelForName=true
An exception occurred. Please see the following for details:
org.firebirdsql.jdbc.FBSQLExceptionInfo: unavailable database
[wrapped] java.sql.SQLException: unavailable database [SQLState:08001, ISC error code:335544375]
at org.firebirdsql.gds.ng.FbExceptionBuilder$Type$1.createSQLException(FbExceptionBuilder.java:532)
at org.firebirdsql.gds.ng.FbExceptionBuilder.toFlatSQLException(FbExceptionBuilder.java:302)
at org.firebirdsql.gds.ng.wire.AbstractWireOperations.readStatusVector(AbstractWireOperations.java:138)
at org.firebirdsql.gds.ng.wire.AbstractWireOperations.processOperation(AbstractWireOperations.java:202)
at org.firebirdsql.gds.ng.wire.AbstractWireOperations.readSingleResponse(AbstractWireOperations.java:169)
at org.firebirdsql.gds.ng.wire.AbstractWireOperations.readResponse(AbstractWireOperations.java:153)
at org.firebirdsql.gds.ng.wire.AbstractWireOperations.readGenericResponse(AbstractWireOperations.java:255)
at org.firebirdsql.gds.ng.wire.version10.V10WireOperations.authReceiveResponse(V10WireOperations.java:60)
at org.firebirdsql.gds.ng.wire.version10.V10Database.authReceiveResponse(V10Database.java:569)
at org.firebirdsql.gds.ng.wire.version10.V10Database.attachOrCreate(V10Database.java:111)
at org.firebirdsql.gds.ng.wire.version10.V10Database.attach(V10Database.java:81)
at org.firebirdsql.jca.FBManagedConnection.<init>(FBManagedConnection.java:144)
at org.firebirdsql.jca.FBManagedConnectionFactory.createManagedConnection(FBManagedConnectionFactory.java:540)
at org.firebirdsql.jca.FBStandAloneConnectionManager.allocateConnection(FBStandAloneConnectionManager.java:65)
at org.firebirdsql.jdbc.FBDataSource.getConnection(FBDataSource.java:124)
at org.firebirdsql.jdbc.FBDriver.connect(FBDriver.java:137)
at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
at org.jumpmind.db.util.ResettableBasicDataSource.createPoolableConnectionFactory(ResettableBasicDataSource.java:72)
[wrapped] java.sql.SQLException: Cannot create PoolableConnectionFactory (unavailable database [SQLState:08001, ISC error code:335544375])
at org.jumpmind.db.util.ResettableBasicDataSource.createPoolableConnectionFactory(ResettableBasicDataSource.java:78)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
at org.jumpmind.db.platform.JdbcDatabasePlatformFactory.determineDatabaseNameVersionSubprotocol(JdbcDatabasePlatformFactory.java:221)
[wrapped] org.jumpmind.db.sql.SqlException: Error while reading the database metadata: Cannot create PoolableConnectionFactory (unavailable database [SQLState:08001, ISC error code:335544375])
at org.jumpmind.db.platform.JdbcDatabasePlatformFactory.determineDatabaseNameVersionSubprotocol(JdbcDatabasePlatformFactory.java:291)
at org.jumpmind.db.platform.JdbcDatabasePlatformFactory.createNewPlatformInstance(JdbcDatabasePlatformFactory.java:176)
at org.jumpmind.symmetric.ClientSymmetricEngine.createDatabasePlatform(ClientSymmetricEngine.java:390)
at org.jumpmind.symmetric.ClientSymmetricEngine.createDatabasePlatform(ClientSymmetricEngine.java:335)
at org.jumpmind.symmetric.AbstractCommandLauncher.getDatabasePlatform(AbstractCommandLauncher.java:408)
at org.jumpmind.symmetric.DbSqlCommand.executeWithOptions(DbSqlCommand.java:75)
at org.jumpmind.symmetric.AbstractCommandLauncher.execute(AbstractCommandLauncher.java:192)
at org.jumpmind.symmetric.DbSqlCommand.main(DbSqlCommand.java:44)</init>

person Bandile BongiNkosi    schedule 18.04.2020    source источник
comment
В вашем URL-адресе после имени базы данных есть ", удалите его (хотя, насколько мне известно, Firebird проигнорирует его). Я также предполагаю, что <path to database> заменен фактическим путем к базе данных в вашем реальном коде. Также рассмотрите возможность использования стандартного формата URL (jdbc:firebirdsql://localhost/<path-to-database>\TEST.FDB) вместо этого устаревшего формата URL. Недоступная база данных может возникнуть, если вы используете неверный путь к файловой системе (например, в Windows несуществующая буква диска.   -  person Mark Rotteveel    schedule 19.04.2020
comment
Файл базы данных находится в локальной файловой системе или в сетевой папке? Каков фактический путь к базе данных?   -  person Mark Rotteveel    schedule 19.04.2020
comment
@MarkRotteveel Я пробовал устаревший и новый формат URL. Оба они выдают одно и то же исключение. В приведенном выше URL-адресе я должен был убрать в своем вопросе - я поместил его туда, так как мой путь содержал пробелы. Но я пробовал путь и без пробелов. Другой формат, который я пробовал, выглядит следующим образом: jdbc:firebirdsql://localhost:3050/<path to database>\test.fbd. Да, я просто заменил фактический путь на «путь к базе данных» в этом вопросе. И да, база данных находится в моей локальной файловой системе. Новый путь я также использую в DBeaver, и он успешно подключается к базе данных.   -  person Bandile BongiNkosi    schedule 19.04.2020
comment
Я думаю, что знаю, в чем проблема, если db.url находится в файле свойств, то использование \ должно быть экранировано до \\, иначе оно будет удалено (для недопустимых экранирований) или, например, \t интерпретируется как вкладка. Итак, если ваш путь равен C:\data\db\test.fdb, Java читает из файла свойств C:datadb<tab>est.fdb. Замените его в файле свойств на C:\\data\\db\\test.fdb или используйте косую черту C:/data/db/test.fdb.   -  person Mark Rotteveel    schedule 19.04.2020
comment
@MarkRotteveel Хорошо. Таким образом, использование прямой косой черты изначально не работало: db.url=jdbc:firebirdsql://localhost:3050/C:/Program Files/Firebird/Firebirddb.url=jdbc:firebirdsql://localhost/C:/Program Files/Firebird/Firebird_2_5/examples/empbuild/EMPLOYEE.FDB?encoding=UTF85/examples/empbuild/EMPLOYEE.FDB?encoding=UTF8 Но это должно было работать, поэтому я попытался удалить предопределенный порт 3050: db.url=jdbc:firebirdsql://localhost/C:/Program Files/Firebird/Firebird_2_5/examples/empbuild/EMPLOYEE.FDB?encoding=UTF8, и затем он успешно подключился. Я попробовал другой порт (3051) (который не должен работать?), и это не так. (отказался подключаться) Возможно порт 3050 уже занят, а драйвер по умолчанию другой?   -  person Bandile BongiNkosi    schedule 19.04.2020
comment
@MarkRotteveel Спасибо за помощь. Если вы хотите отправить ответ, я отмечу его как ответ.   -  person Bandile BongiNkosi    schedule 19.04.2020
comment
Я закрыл вопрос как дубликат общего вопроса о обратной косой черте в файлах свойств, поэтому больше невозможно опубликовать ответ. Что касается проблемы с портом, я не знаю. По умолчанию Jaybird использует порт 3050, и он должен работать как с портом, так и без него.   -  person Mark Rotteveel    schedule 19.04.2020