奇怪的Oracle连接URL

时间:2013-01-04 13:38:42

标签: java oracle jdbc

我们的一位客户正尝试使用以下JDBC URL连接到Oracle数据库:

jdbc:oracle:thin:@(DESCRIPTION=(FAILOVER=ON)LOAD_BALANCE=OFF)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=server1.domain.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=server2.domain.com)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=FOO))) 

他们收到此错误:

Caused by: oracle.net.ns.NetException: NL Exception was generated
    at oracle.net.resolver.AddrResolution.resolveAddrTree(AddrResolution.java:614) ~[ojdbc5_11g-11.2.0.1.0.jar:11.2.0.1.0]
    at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:411) ~[ojdbc5_11g-11.2.0.1.0.jar:11.2.0.1.0]
    at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:672) ~[ojdbc5_11g-11.2.0.1.0.jar:11.2.0.1.0]
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:237) ~[ojdbc5_11g-11.2.0.1.0.jar:11.2.0.1.0]
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1042) ~[ojdbc5_11g-11.2.0.1.0.jar:11.2.0.1.0]
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:301) ~[ojdbc5_11g-11.2.0.1.0.jar:11.2.0.1.0] 

问题:

  1. 我之前从未见过这样的连接网址。它看起来更像是TNSNAMES.ORA中的一个条目。如何找出此连接字符串的含义?

  2. 可能导致此无用错误消息的原因是什么?

2 个答案:

答案 0 :(得分:7)

语法是'Oracle Net连接描述符语法',请参阅JDBC Developers Guide中的表8.3。

语法确实与tnsnames.ora中使用的语法相同; Oracle Database Net Services Reference

中描述了此语法

至于具体问题,我觉得你在描述符中有不平衡的括号,特别是:

(FAILOVER=ON)LOAD_BALANCE=OFF)

应该是:

(FAILOVER=ON)(LOAD_BALANCE=OFF)

(请注意额外的(。)

答案 1 :(得分:0)

我从你的tnsnames条目生成了以下连接URL:

jdbc:oracle:thin:@server1.domain.com:1521/FOO

尝试使用上面的连接URL。 还要检查监听器是否已启动并运行: 在windows中: ctrl + r services.msc,检查是否已启动服务:“Oracle * TNSListener”。

jdbc:oracle:thin:@(DESCRIPTION=(FAILOVER=ON)LOAD_BALANCE=OFF)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=server1.domain.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=server2.domain.com)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=FOO)))