Search code examples
springtomcatjdbcspring-jdbcojdbc

Oracle incompatible driver ORA-12650


We try to upgrade our web application database from Oracle 12c (12.1.0.2.0) to Oracle 19c (19.0.0.0.0), but I'm encountering the error ORA-12650 with the following stack trace in catalina.log:

WARNING: Failed to register in JMX: javax.naming.NamingException: Cannot create PoolableConnectionFactory (Io exception: Oracle Error ORA-12650)
Oct 06, 2023 9:10:22 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive marcofeed.war
Oct 06, 2023 9:10:22 AM org.apache.naming.NamingContext lookup
WARNING: Unexpected exception resolving reference
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Io exception: Oracle Error ORA-12650)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getLogWriter(BasicDataSource.java:1098)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory.createDataSource(BasicDataSourceFactory.java:350)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory.getObjectInstance(BasicDataSourceFactory.java:156)
        at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:140)
        at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:793)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:140)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:781)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
        at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1028)
        at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:637)
        at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:238)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4616)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:583)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:943)
        at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:778)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:504)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:822)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
        at org.apache.catalina.core.StandardService.start(StandardService.java:525)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.sql.SQLException: Io exception: Oracle Error ORA-12650
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)
        at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387)
        at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:441)
        at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
        at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
        at org.apache.tomcat.dbcp.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
        at org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
        ... 37 more

Our stack:

  • Spring Framework 4.0.6.RELEASE
  • Tomcat 6.0.39
  • JDK 1.8.0_65-b17
  • ojdbc6 11.2.0.4

I found that it's a problem of compatibility (as per https://www.oracle.com/fr/database/technologies/faq-jdbc.html) so I upgraded the dependencies, but I encounter the same issue:

  • Spring Framework 4.2.0.RELEASE
  • Tomcat 6.0.39
  • JDK 1.8.0_65-b17
  • ojdbc8 12.2.0.1

Taken from the above docs:

enter image description here enter image description here

Moreover, I tried to upgrade the ojdbc8 driver to some other new versions(18.3.0.0, 19.3.0.0), but still have the same problem

In pom.xml, I have the following related dependencies:

    <spring.version>4.2.0.RELEASE</spring.version>

   <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>com.oracle.database.jdbc</groupId>
        <artifactId>ojdbc8</artifactId>
        <version>12.2.0.1</version>
    </dependency>

Have you encountered the same issue? Can it be related to the tomcat server?

EDIT

  1. We cannot change the database version
  2. One application which runs on Spring Boot 2.0.7 with ojdbc8 12.2.0.1 successfully integrated with the oracle database without encountering this problem

Solution

  • Solution:

    It seems that there was a different incompatible odjbc14.jar in $TOMCAT_HOME/lib that was taken into consideration instead of the one from the maven repo path. I removed it manually and copied the good one (ojdbc8.jar 12.2.0.1) there and the issue was solved