6

我们的一位客户正在尝试使用以下 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. 我以前从未见过这样的连接 URL。它看起来更像是 TNSNAMES.ORA 中的一个条目。我怎样才能找出这个连接字符串的含义?

  2. 什么可能导致这个无用的错误消息?

4

2 回答 2

10

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

语法确实与 ; 中使用的语法相同tnsnames.oraOracle 数据库网络服务参考中描述了此语法。

至于具体问题,在我看来,描述符中的括号不平衡,特别是:

(FAILOVER=ON)LOAD_BALANCE=OFF)

应该:

(FAILOVER=ON)(LOAD_BALANCE=OFF)

(注意额外的(。)

于 2013-01-04T13:52:24.873 回答
0

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

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

尝试使用上述连接 URL。还要检查侦听器是否已启动并正在运行:在 windows 中:ctrl + rservices.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)))
于 2017-01-12T18:59:35.080 回答