使用群集类型HOST时无法连接oracle数据库

问题描述

在连接Oracle DB时遇到以下错误我正在使用Spring Boot JDBC模板连接到数据库错误在下面,

Exception in thread "main" java.lang.Exception: java.sql.sqlRecoverableException: IO Error: The Network Adapter Could not establish the connection
    at com.falabella.util.OracleDB.main(OracleDB.java:70)
Caused by: java.sql.sqlRecoverableException: IO Error: The Network Adapter Could not establish the connection
Caused by: oracle.net.ns.NetException: The Network Adapter Could not establish the connection
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:392)
Caused by: java.net.UnkNownHostException: NODE-01: nodename nor servname provided,or not kNown

下面是我的发现,我的数据库服务器主机具有集群,并且它具有两个节点,如下所示,

   Cluster (wood.clsuter.com)
     |  NODE01 (wood-01)
     |  NODE02 (wood-02)

我的连接字符串是这样的,jdbc:oracle:thin:@ wood-clsuter.com:1531 / service_name

当我在连接字符串中使用群集名称时,我遇到以下错误

Caused by: java.net.UnkNownHostException: wood-01: nodename nor servname provided,or not kNown

如果我在连接字符串中使用任何节点名称,并且能够毫无问题地连接数据库,则有效的连接字符串如下所示, jdbc:oracle:thin:@wood-01.com:1531/service_namejdbc:oracle:thin:@wood-02.com:1531/service_name

由于我需要使用数据库请求作为负载平衡,因此需要使用集群名称而不是从属节点,

我想知道此问题的根本原因,例如这种生产环境问题,

您能帮我吗?

解决方法

您需要将连接字符串更改为:

"jdbc:oracle:thin:@(DESCRIPTION=(FAILOVER=ON)(LOAD_BALANCE=ON)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=wood-01.com)(PORT = 1531))(ADDRESS = (PROTOCOL = TCP)(HOST = wood-02.com)(PORT = 1531)))(CONNECT_DATA=(SERVICE_NAME =service_name)(FAILOVER_MODE=(TYPE=select)(METHOD=basic))))"