Вопрос

Иногда у меня возникают проблемы с подключением к 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.

Filter Dialog

Добавлено: 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top