Не удается подключить базу данных Oracle при использовании хоста кластерного типа

#java #oracle #spring-boot #jdbctemplate

#java #Oracle #spring-boot #jdbctemplate

Вопрос:

Я сталкиваюсь со следующими ошибками при подключении 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_name или
jdbc:oracle:thin:@wood-02.com:1531/service_name

Поскольку мне нужно использовать мои запросы к БД для балансировки нагрузки, мне нужно использовать имя кластера вместо подчиненных узлов,

Я хотел бы знать основную причину этой проблемы, такие проблемы с производственной средой,

Не могли бы вы помочь мне с этим?

Ответ №1:

Вам необходимо изменить строку подключения на:

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

Комментарии:

1. Спасибо за ваш ответ, я хотел бы знать, как это будет работать, как будет работать address_list? Если первый адрес завершается ошибкой, он попытается подключить второй? или всегда он будет пытаться подключить случайный адрес?

2. docs.oracle.com/cd/E11882_01/network.112/e10835/…