Иногда у меня возникают проблемы с подключением к Oracle, потому что я не могу понять, какой файл tnsnames.ora использует мой клиент базы данных.
Как лучше всего это выяснить? ++ рад различным платформенным решениям.
Oracle обеспечивает полезность, названную 'tnsping':
R:\>tnsping someconnection
TNS Ping Utility for 32-bit Windows: Version 9.0.1.3.1 - Production on 27-AUG-20
08 10:38:07
Copyright (c) 1997 Oracle Corporation. All rights reserved.
Used parameter files:
C:\Oracle92\network\ADMIN\sqlnet.ora
C:\Oracle92\network\ADMIN\tnsnames.ora
TNS-03505: Failed to resolve name
R:\>
R:\>tnsping entpr01
TNS Ping Utility for 32-bit Windows: Version 9.0.1.3.1 - Production on 27-AUG-20
08 10:39:22
Copyright (c) 1997 Oracle Corporation. All rights reserved.
Used parameter files:
C:\Oracle92\network\ADMIN\sqlnet.ora
C:\Oracle92\network\ADMIN\tnsnames.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = **)
(PROTOCOL = TCP) (Host = ****) (Port = 1521))) (CONNECT_DATA = (SID = ENTPR0
1)))
OK (40 msec)
R:\>
Это должно показать что файл you' использование ре. Полезность сидит в справочнике 'мусорного ведра' Oracle.
Для linux:
$ strace sqlplus -L scott/tiger@orcl 2>&1| grep -i 'open.*tnsnames.ora'
показывает что-то вроде этого:
open("/opt/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora",O_RDONLY)=7
Меняем на
$ strace sqlplus -L scott/tiger@orcl 2>&1| grep -i 'tnsnames.ora'
покажет все пути к файлам, по которым произошел сбой.
Есть другое место, где местоположение TNS сохранено: Если you' ре используя Windows, откройте < code> regedit и проведите к < code> Мой Местный Machine/Software/ORACLE/KEY_OraClient10_home1< HKEY;/code> где < code> KEY_OraClient10_home1 Ваша Oracle домой. Если есть вход последовательности, названный < code> TNS_ADMIN тогда ценность того входа укажет на файл TNS, что Oracle использует на Вашем компьютере.
На моей машине развития у меня есть три различных версии клиентского программного обеспечения Oracle. Я управляю 'tnsnames.ora' файлом в одном из них. В других двух я вошел в 'tnsnames.ora' файл:
ifile=path_to_tnsnames.ora_file/tnsnames.ora
Таким образом, если по некоторым причинам несправедливость 'tnsnames.ora' файл используется клиентом, это будет всегда заканчиваться в актуальной версии.
Для Windows: Filemon от SysInternals покажет вам, к каким файлам осуществляется доступ.
Не забудьте настроить фильтры, чтобы вас не перегружал болтливый трафик файловой системы.
Добавлено: Filemon не работает с новыми версиями Windows, поэтому вам, возможно, придется использовать Process Monitor.
Кодеслэйв спрашивает " Shouldn' t это всегда быть " $ORACLE_ HOME/network/admin/tnsnames.ora"? ответ не, это isn' t. Рассмотрите эти две просьбы tnsping на той же машине:
C:\Documents and Settings\me>D:\Oracle\10.2.0_DB\BIN\tnsping orcl
TNS Ping Utility for 32-bit Windows: Version 10.2.0.4.0 - Production on 09-OCT-2
008 14:30:12
Copyright (c) 1997, 2007, Oracle. All rights reserved.
Used parameter files:
D:\Oracle\10.2.0_DB\network\admin\sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = xxxx
)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL)))
OK (40 msec)
C:\Documents and Settings\me>tnsping orcl
TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 09-OCT-2
008 14:30:21
Copyright (c) 1997, 2005, Oracle. All rights reserved.
Used parameter files:
D:\oracle\10.2.0_Client\network\admin\sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = XXXX)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))
OK (20 msec)
C:\Documents and Settings\me>
Отметьте два различных места файла параметра, которые зависят от который tnsping исполняемый файл you' управление ре (и возможно где it' s управляемый от). Для находящейся в tnsnames организации сети оракула, используя переменную TNS_ADMIN единственный способ гарантировать you' ре, получающее последовательный tnsnames.ora файл. (ОТМЕТЬТЕ: центральный Windows ответ)
По умолчанию tnsnames.ora расположен в справочнике $ORACLE_HOME/network/admin на операционных системах UNIX и в каталоге ORACLE_HOME\network\admin на операционных системах Windows. tnsnames.ora может также быть сохранен следующие местоположения:
Справочник, определенный переменной окружения TNS_ADMIN (или стоимость регистрации)
На операционных системах UNIX, глобальном справочнике конфигурации. Например, на Операционной системе Соляриса, этот справочник-/var/opt/oracle
Если у Вас есть несколько ORACLE_HOMES, знают, какой Вы используете, поскольку местоположение tnsnames.ora файла может измениться от одного ORACLE_HOME до следующего.
Для человека, который упомянул переменную окружения TWO_TASK, которая используется, чтобы определить сервисное имя базы данных по умолчанию, чтобы соединиться с (который мог быть базой данных по другому серверу). Сервисное имя, к которому Вы определяете TWO_TASK, тогда ищется в tnsnames.ora файле, когда Вы соединяетесь.
Разве это не должно быть всегда "$ORACLE HOME/network/admin/tnsnames.ora"? Тогда вы можете просто сделать "echo $oracle home" или *nix-эквивалент.
@ Пит Холбертон Вы совершенно правы. Что напоминает мне, что есть еще один гаечный ключ в работе под названием TWO_ TASK.
Согласно http://www.orafaq.com/wiki/TNS_ADMIN TNS_ADMIN - это переменная окружения, которая указывает на каталог, где находятся файлы конфигурации SQL*Net (такие как sqlnet.ora и tnsnames.ora).
'strace sqlplus-L scott/tiger@orcl' помогает найти '.tnsnames.ora' файлом на '/home/oracle', чтобы найти файл, который это берет вместо файла '$ORACLE_HOME/network/admin/tnsnames.ora'. Спасибо за регистрацию.
Самый легкий путь состоит в том, чтобы, вероятно, проверить ПУТЬ переменная окружения процесса, который соединяется с базой данных. Скорее всего, tnsnames.ora файл находится в первая bin-папка Oracle в path..\network\admin. Переменная окружения TNS_ADMIN или стоимость в регистрации (для текущей Oracle домой) могут отвергнуть это.
Используя filemon любят предложенный другими, также добьется цели.
Не прямой ответ на Ваш вопрос, но I' ve, вполне, расстроил меня, попытка находит и обновляет все tnsnames файлы, поскольку у меня было несколько оракулов, устанавливает: Клиент, инструменты ВИСМУТА, OWB, и т.д., у каждого из которых был свой собственный оракул домой. Я закончил тем, что создал полезность под названием TNSNamesSync, который обновит все tnsnames во всех домах оракула. It' s в соответствии с лицензией MIT, бесплатной использовать здесь https://github.com/artybug/TNSNamesSync/releases
Доктора здесь: https://github.com/artchik/TNSNamesSync/blob/master/README.md
Это для Windows только, все же.