奇怪的Oracle连接URL

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. 是什么导致了这个无用的错误信息?


TNSNames条目长什么样?你能tnsping FOO吗? - tbone
3
这是“Oracle Net连接描述符语法”,请参见JDBC开发人员指南中的表8.3。 - Mark Rotteveel
关于这个问题,我看你在 LOAD_BALANCE 前面缺少了一个 ( - Mark Rotteveel
如上所述,我们也使用这些连接。如果ADDRESS_LIST中的一个服务器宕机,它会执行故障转移。并且它将连接到其中一个名为FOO的服务器。 - alexvetter
它应该看起来更像这样连接字符串 - alexvetter
1
我遇到了同样的问题,因为我在连接字符串中留下了 //,即 jdbc:oracle:thin:@//(DESCRIPTION... 而不是 jdbc:oracle:thin:@(DESCRIPTION... - bonh
2个回答

10

语法是“Oracle Net连接描述符语法”,请参见JDBC开发人员指南中的表8.3。

实际上,该语法与tnsnames.ora中使用的语法相同;该语法在Oracle数据库网络服务参考中有描述。

至于具体问题,我认为您的描述符中存在未平衡的括号,具体来说:

(FAILOVER=ON)LOAD_BALANCE=OFF)

应该是:

(FAILOVER=ON)(LOAD_BALANCE=OFF)

(请注意多了一个(。)


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)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接