#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? Если первый адрес завершается ошибкой, он попытается подключить второй? или всегда он будет пытаться подключить случайный адрес?