java - 我应该如何为具有 LDAP 和两个 LDAP 服务器的 Oracle 编写 JDBC url?

标签 java oracle url jdbc failover

我有一个带有 LDAP 的 Oracle 数据库,可以通过编写以下内容进行连接:

jdbc:oracle:thin:@ldap://oid0.wow.com:666/chost,cn=OracleContext,dc=wow,dc=com

但这不是故障转移(我们还有另一台带有 Oracle LDAP 的服务器 - oid1.wow.com:666)

如何使用两台服务器实现故障转移? 我找到了这个solution ,但它不起作用:

java.sql.SQLException: Io exception: Invalid LDAP URL specified
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:113)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:147)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:257)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:389)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:454)
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:802)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)

最佳答案

这是一名司机!

抛出调试我发现了 String.concat() NPE 的另一个问题 我们的驱动程序(com.oracle ojdbc14 10.2.0.4.0 - 在 MVN 存储库中找到)不支持两个以上的 URL。

当我从 Oracle 站点 (10.1.0.5 'ojdbc14_g') 下载驱动程序时,一切都开始正常工作。

所有这一切看起来都很奇怪,因为 10.1.0.5 似乎是官方网站上 Oracle JDBC 驱动程序的最后一个版本(当然是 Oracle 10)。

这里是!故障转移数据源 bean:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <!--common dataSource props -->
    <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="jdbcUrl" value="jdbc:oracle:thin:@ldaps://oid0.wow.com:666/chost,cn=OracleContext,dc=wow,dc=com ldaps://oid1.wow.com:666/chost,cn=OracleContext,dc=wow,dc=com"/>
    <property name="overrideDefaultUser" value="useruser"/>
    <property name="overrideDefaultPassword" value="strongpassword"/>
    <!-- special c3p0 props -->
    <property name="minPoolSize" value="1"/>
    <property name="maxPoolSize" value="10"/>
    <property name="maxStatements" value="10"/>
    <property name="breakAfterAcquireFailure" value="false"/>
    <property name="acquireRetryAttempts" value="5"/>
    <property name="testConnectionOnCheckin" value="true"/>
    <property name="properties">
        <props>
            <prop key="oracle.net.ldap_loadbalance">OFF</prop>
        </props>
    </property>
</bean>

关于java - 我应该如何为具有 LDAP 和两个 LDAP 服务器的 Oracle 编写 JDBC url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6778461/

相关文章:

sql - oracle,添加子查询时缺少右括号

oracle - Oracle 列别名中的双引号

php - 如何在 laravel 的含咖啡因模块中修复 '/'

php - Safari中如何处理字符为 'é'的URL?

java - 我的java服务器后端代码需要部署在云中

java - 保持 i18n 资源同步

oracle - 在oracle中查询日期时间

java - 从流式 URL 读取 JSON 数据?

Java 输入缓冲区和 do-while 循环行为(为什么它检查第一个字符 3 次?)

java - 使用 JavaCC 删除 C 注释