【问题标题】:java.net.UnknownHostException: <<hostname>> : unknown errorjava.net.UnknownHostException: <<hostname>> : 未知错误
【发布时间】:2019-02-03 02:25:38
【问题描述】:

我正在尝试从运行在 AWS 的 EC2 实例上的应用程序建立 Oracle 数据库连接。 Oracle DB 位于本地服务器中。防火墙已打开,我可以从我的 EC2 实例远程登录到该数据库的 SCAN 和 VIP 主机。但是,我仍然遇到以下异常:

Caused by: oracle.net.ns.NetException: The Network Adapter could not establish the connection
at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:392) ~[ojdbc6-11.2.0.3.jar:11.2.0.3.0]
at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:434) ~[ojdbc6-11.2.0.3.jar:11.2.0.3.0]
at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:687) ~[ojdbc6-11.2.0.3.jar:11.2.0.3.0]
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:343) ~[ojdbc6-11.2.0.3.jar:11.2.0.3.0]
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1102) ~[ojdbc6-11.2.0.3.jar:11.2.0.3.0]
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:320) ~[ojdbc6-11.2.0.3.jar:11.2.0.3.0]
... 239 common frames omitted
Caused by: java.net.UnknownHostException: <<hostname>>: unknown error
at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method) ~[na:1.8.0_40-internal]
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:907) ~[na:1.8.0_40-internal]
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1302) ~[na:1.8.0_40-internal]
at java.net.InetAddress.getAllByName0(InetAddress.java:1255) ~[na:1.8.0_40-internal]
at java.net.InetAddress.getAllByName(InetAddress.java:1171) ~[na:1.8.0_40-internal]
at java.net.InetAddress.getAllByName(InetAddress.java:1105) ~[na:1.8.0_40-internal]
at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:117) ~[ojdbc6-11.2.0.3.jar:11.2.0.3.0]
at oracle.net.nt.ConnOption.connect(ConnOption.java:133) ~[ojdbc6-11.2.0.3.jar:11.2.0.3.0]
at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:370) ~[ojdbc6-11.2.0.3.jar:11.2.0.3.0]

JDBC 网址:

jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)
(HOST = <<IP address of the host>>)(PORT = 1590)))(LOAD_BALANCE = yes)
(CONNECT_DATA =(SERVICE_NAME = <<example.service.com>>)(FAILOVER_MODE =(TYPE = SELECT)
(METHOD = BASIC))))`

【问题讨论】:

    标签: java oracle amazon-ec2


    【解决方案1】:

    您使用的是 java 8 吗?如果是这样,那么可能与this bug

    有关

    Java 7 或 9 可能会给您一个更有用的错误消息,而不是“未知错误”(例如,可能是“名称或服务未知”)

    除此之外,您是否尝试过从您尝试连接的主机进行 tnsping?

    同样根据Oracle driver documentation 中的以下内容,当在 jdbc URL 中使用 tnsnames 条目时,它应该如下所示,使用 OCI 驱动程序:

    请注意,您还可以通过 TNSNAMES 条目指定数据库。您可以在要连接的客户端计算机上的文件 tnsnames.ora 中找到可用的 TNSNAMES 条目。例如,如果您想以用户 scott 的身份连接到主机 myhost 上的数据库,密码为tiger,其 TNSNAMES 条目为 MyHostString,请输入:

    Connection conn = DriverManager.getConnection
      ("jdbc:oracle:oci8:@MyHostString","scott","tiger");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      • 2014-08-27
      • 2018-05-12
      • 2019-12-27
      • 1970-01-01
      • 2017-08-30
      相关资源
      最近更新 更多