Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программно определить положение tnsnames.ora

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

KDPoid



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть программулька.
У программульки есть настройка.
Настройка - имя подключения, которое выбирает пользователь.
 
Хотелось бы не заставлять пользователя фантазировать, а предложить ему на выбор настройки, которые прописаны в tnsnames.ora его собственного клиента oracle.
 
Отсюда и вопрос:
Как определить, где oracle_home?
 
Программулька под windows.
 
Эксперименты показали, что задание переменных окружения ORACLE_HOME, TNS_ADMIN, ORACLE_BASE - желательно, рекомендовано документацией, но совсем не обязательно. В жизни вижу инстансы оракла, которые прекрасно живут без задания этих переменных окружения.
 
Toad с задачей самостоятельно поиска tnsnames справляется, значит это возможно
 
Пока, наиболее правдоподобным вариантом выглядит ветка реестра
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\  
Во всех наблюдаемых клиентах там есть ветка KEY_чтототам, которая содержит ORACLE_HOME.
Но по какому принципу определяется окончание названия ветки, может ли быть два разных KEY_чтототама, да и вообще, не случайность ли, что я всегда нахожу эту ветку на машинке с клиентом оракла - подтверждений в Интернете найти не  могу.
 
Порадуюсь любой информации по теме.
 
 

Всего записей: 404 | Зарегистр. 08-08-2006 | Отправлено: 06:35 23-11-2016
Dronton2

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Насколько я помню, Wow6432Node\ присутствует только в 64-битных ОС. В 32-битных эта подстрока должна отсутствовать.
KEY_чтототам - это и есть ORACLE_HOME_KEY. Ситуация может осложняться несколькими ORACLE_HOME.
Я не знаю, как делать правильно, но считаю, что самый надёжный способ - перебрать все ветки в ветке "HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\" и искать в них параметр "ORACLE_HOME_KEY". Значение параметра должно совпадать с названием ветки, в которой ищем (начиная со слова SOFTWARE), например: "ORACLE_HOME_KEY"="SOFTWARE\ORACLE\KEY_OraClient10g_home1". В этой ветке и нужно искать параметр ORACLE_HOME

Всего записей: 460 | Зарегистр. 27-06-2005 | Отправлено: 13:40 23-11-2016 | Исправлено: Dronton2, 16:42 23-11-2016
landy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
верно, на машине может быть установлено сразу несколько оракловых клиентов разных версий с разными tnsnames.ora, один из которых текущий. Плюс, есть еще т.н. instantclient, которому вообще не нужны записи в реестре, он должен быть доступен через PATH.

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 15:41 16-01-2017
maxsv2



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А есть 100% гарантия установленного клиента ORACLE?
tnsnames.ora есть только в полноценном клиенте ORACLE.
Есть облегченный вариант клиента  = InstantClient
(достаточно копирования)
подключение осуществляется на прямую строкой  
\\SERVER:PORT\INSTANCE\
 

Всего записей: 191 | Зарегистр. 24-01-2004 | Отправлено: 15:58 19-04-2017
llleopevzner

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если вопрос в том, чтобы показать список алиасов, которые есть в tnsnames, то я бы посмотрел DAC, который используется для доступа к БД.
В ODAC, к примеру, есть специальная процедура  
procedure GetServerList(List: TStrings); virtual;
Даже если нужный DAC такого сервиса не предоставляет, можно просто скопировать из того-же одака. Ничего сложного там не было.

Всего записей: 32 | Зарегистр. 11-12-2005 | Отправлено: 17:23 26-04-2017
landy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
нет, вопрос был в том, как найти нужный tnsnames.ora с учетом того, что его может не быть вообще или быть в нескольких экземплярах...

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 00:05 28-04-2017
llleopevzner

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
нет, вопрос был в том, как найти нужный tnsnames.ora с учетом того, что его может не быть вообще или быть в нескольких экземплярах...

 
Так это как раз и будет тот самый tnsnames, с которым будет работать DAC.
Достаточно посмотреть исходники, и там однозначно определен порядок поиска нужного файла.

Всего записей: 32 | Зарегистр. 11-12-2005 | Отправлено: 09:48 28-04-2017
maxsv2



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А сам автор вопроса, присутствует, что скажет?
А то становится похоже на клуб экстрасенсов, дали ответ и сами решили - как он "хорош".
Или у кого-то есть "сокровенные-всевышние" знания?

Всего записей: 191 | Зарегистр. 24-01-2004 | Отправлено: 09:43 10-05-2017
llleopevzner

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А самому автору давно неинтересно )
Хотя у меня в конкретном проекте как-то возникла реальная потребность разбираться с правилами поиска tnsnames.ora
В итоге оказалось,что есть уже готовые и работоспособные функции (как минимум в ODAC).

Всего записей: 32 | Зарегистр. 11-12-2005 | Отправлено: 17:45 12-05-2017
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программно определить положение tnsnames.ora


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru