Исключение для Oracle DB: ошибка при определении имени продукта базы данных: неподдерживаемая функция

Я пытаюсь использовать Flyway 2.0.3 для следующей базы данных Oracle:

  • База данных Oracle: Oracle Database 10g Enterprise Edition, выпуск 10.2.0.5.0
  • Драйвер Oracle JDBC: v9.0.2.0.0

При попытке использовать Flyway через maven (mvn flyway:info -e) я получаю следующую ошибку:

Caused by: java.sql.SQLException: Unsupported feature
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
    at oracle.jdbc.dbaccess.DBError.throwUnsupportedFeatureSqlException(DBError.java:689)
    at oracle.jdbc.OracleDatabaseMetaData.getDatabaseMajorVersion(OracleDatabaseMetaData.java:4442)
    at com.googlecode.flyway.core.dbsupport.DbSupportFactory.getDatabaseProductName(DbSupportFactory.java:113)
    ... 27 more

Хотя, если я попробую еще раз, но с более новыми версиями драйвера (v9.2+), flyway работает нормально :)

Глядя на оскорбительный метод OracleDatabaseMetaData.getDatabaseMajorVersion(), я вижу, что он явно выдает исключение «Неподдерживаемая функция» SQLException.

Мне было интересно, есть ли причина, по которой пролетный путь может не учитывать эту возможность?

Может быть, это недосмотр (я могу рассмотреть возможность отправки патча) или Flyway может поддерживать только определенные версии драйвера оракула (по какой-то причине, не критикуя).

Здоровья ребята!!!

ОБНОВЛЕНИЕ: обходной путь

Поскольку я использую maven, я определил более новую версию драйвера оракула в определении плагина flyway. Проект по-прежнему может использовать старую зависимость драйвера, а плагин может использовать более новую версию:

<dependencies>
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc14</artifactId>
        <version>9.0.2.0.0</version>
    </dependency>
    ...
</dependencies>

<plugin>
    <groupId>com.googlecode.flyway</groupId>
    <artifactId>flyway-maven-plugin</artifactId>
    <version>2.0.3</version>
    <dependencies>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc14</artifactId>
            <version>10.2.0.4.0</version>
        </dependency>
                ...
    </dependencies>
        ...
</plugin>

person wonker    schedule 06.02.2013    source источник
comment
Почему бы вам не использовать текущий драйвер для 10.x? В любом случае вам не следует использовать драйвер 9.x для базы данных 10.x.   -  person a_horse_with_no_name    schedule 06.02.2013
comment
Согласно этот Flyway поддерживает только базу данных версии 10g и выше. Я не уверен, что вы получите от них большое сочувствие за использование драйвера из более старой версии, хотя Oracle разрешает. (Я собирался предложить задать вопрос на их форумах поддержки, но я вижу, что вы это сделали!)   -  person Alex Poole    schedule 06.02.2013
comment
Как упоминал Алекс, Oracle 10g поддерживается драйверами v9.X. Я мог бы обновить драйвер, но это потребовало бы большого объема регрессионного тестирования. Он был добавлен в список вещей, которые нам нужно обновить в следующий раз, когда мы будем делать техническое обновление. Исправление для меня состоит в том, чтобы определить более новую версию драйвера оракула как зависимость непосредственно в плагине в моем maven pom. Больше информации в посте ниже, для тех, кому это нужно.   -  person wonker    schedule 07.02.2013
comment
По моему опыту, драйверы 9.x были полны ошибок. Драйверы 10.x были намного лучше (и намного быстрее в некоторых областях). В настоящее время я бы не использовал ничего, кроме драйверов 11.x, если бы кто-нибудь не приставил пистолет к моей голове.   -  person a_horse_with_no_name    schedule 07.02.2013