Недавно мы изменили физические базы данных, новые серверы, новые местоположения, ту же схему и данные базы данных, и после изменения каждый раз, когда мы пытаемся подключиться напрямую к БД в наших собственных приложениях настольного типа, примерно в половине случаев мы получаем эту ошибку :
SQL*Loader-704: Internal error: ulconnect: OCIServerAttach[0]
ORA-12545: Connect failed because target host or object does not exist
В остальное время он подключается сразу, без проблем. Наши приложения, которые устанавливают соединения через JDBC, похоже, не имеют проблем, но мы сталкиваемся с тем, что выполняет поиск tnsnames.ora (или, по крайней мере, это моя догадка). TNSPING работает на 100%, но использование исполняемого файла оракула, такого как SQLLDDR, дает сбой как минимум в 50% случаев. Вот анонимный фрагмент нашего файла TSNNAMES и вывод TNSPING:
DB_CONNECTION =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 1.2.3.4)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = MY.URL.COM)
)
)
И ТНПИНГ:
C:\>TNSPING DB_CONNECTION
TNS Ping Utility for 32-bit Windows: Version 9.2.0.1.0
Copyright (c) 1997 Oracle Corporation. All rights reserved.
Used parameter files:
C:\oracle\ora92\network\admin\sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = 1.2.3.4)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = MY.URL.COM)))
OK (200 msec)
У меня есть SID БД, на который полагаются соединения JDBC, но добавление его в tnsnames.ora не увеличивает шансы на установление соединения. Я не знаю достаточно о том, как файл tnsnames используется Oracle для интеллектуального решения этой проблемы, поэтому, если у вас есть предложения или вы видите что-то, чего явно не хватает, пожалуйста, дайте мне знать.
РЕДАКТИРОВАТЬ: новые базы данных могут быть две базы данных с балансировкой нагрузки, которые могут быть частью проблемы.