Oracle - Какой файл TNS Names я использую?
-
08-06-2019 - |
Вопрос
Иногда у меня возникают проблемы с подключением к 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:\>
Это должно показать, какой файл вы используете.Утилита находится в Oracle bin
справочник.
Другие советы
Для 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:Если вы используете Windows, откройте regedit
и перейдите к My HKEY Local Machine/Software/ORACLE/KEY_OraClient10_home1
где KEY_OraClient10_home1
это ваш дом Оракула.Если есть вызываемая строковая запись TNS_ADMIN
, тогда значение этой записи будет указывать на файл TNS, который Oracle использует на вашем компьютере.
Для Windows: Филемон from SysInternals покажет вам, к каким файлам осуществляется доступ.
Не забудьте настроить фильтры, чтобы вас не перегружал трафик файловой системы chatty.
Добавлено: Filemon не работает с более новыми версиями Windows, поэтому вам, возможно, придется использовать Монитор процесса.
На моей машине разработки у меня есть три разные версии клиентского программного обеспечения Oracle.Я управляю tnsnames.ora
файл в одном из них.В двух других случаях я ввел в tnsnames.ora
файл:
ifile=path_to_tnsnames.ora_file/tnsnames.ora
Таким образом, если по какой-то причине неправильный tnsnames.ora
файл используется клиентом, он всегда будет иметь актуальную версию.
Codeslave спрашивает: "Разве это не должно быть всегда "$ORACLE_ HOME /network /admin /tnsnames.ora"?Ответ - нет, это не так.Рассмотрим эти два вызова 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 вы запускаете (и, возможно, откуда он запускается).Для сетей Oracle на основе tnsnames использование переменной TNS_ADMIN - единственный способ гарантировать, что вы получаете согласованный файл tnsnames.ora.(ПРИМЕЧАНИЕ:Ориентированный на Windows ответ)
По умолчанию tnsnames.ora находится в каталоге $ORACLE_HOME/network/admin в операционных системах UNIX и в каталоге ORACLE_HOME etwork\admin в операционных системах Windows.tnsnames.ora также может храниться в следующих местах:
Каталог, указанный переменной среды TNS_ADMIN (или значением реестра)
В операционных системах UNIX - глобальный каталог конфигурации.Например, в операционной системе Solaris этим каталогом является /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 находится в первый каталог Oracle bin в path..\сеть\администратор.Переменная среды TNS_ADMIN или значение в реестре (для текущего Oracle home) могут переопределять это.
Использование filemon, как предлагали другие, также сделает свое дело.
Не прямой ответ на ваш вопрос, но я сам был очень разочарован, пытаясь найти и обновить все файлы tnsnames, поскольку у меня было несколько установок oracle:Клиент, инструменты BI, OWB и т.д., каждый из которых имел свой собственный oracle home.В итоге я создал утилиту под названием TNSNamesSync, которая обновит все имена tnsnames во всех домах Oracle.Он находится под лицензией MIT, его можно бесплатно использовать здесь https://github.com/artybug/TNSNamesSync/releases
Документы находятся здесь:https://github.com/artchik/TNSNamesSync/blob/master/README.md
Однако это только для Windows.