Иногда я получаю проблемы с соединением Oracle, потому что не могу понять, какой файл tnsnames.ora использует мой клиент базы данных.
Какой лучший способ понять это? ++ довольны различными решениями платформы.
Иногда я получаю проблемы с соединением 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/[email protected] 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/[email protected] 2>&1| grep -i 'tnsnames.ora'
отобразит все пути к файлу, которые не работают.
Существует другое место, где хранится местоположение TNS. Если вы используете Windows, откройте regedit
и перейдите к My HKEY Local Machine/Software/ORACLE/KEY_OraClient10_home1
, где KEY_OraClient10_home1
является вашим домом Oracle. Если есть строковая запись с именем TNS_ADMIN
, то значение этой записи укажет на файл TNS, который Oracle использует на вашем компьютере.
Для Windows: Filemon из SysInternals покажет вам, к каким файлам обращаются.
Не забудьте установить фильтры, чтобы вы не перегружены потоком файловой системы chatty.
Добавлено: Filemon не работает с более новыми версиями Windows, поэтому вам, возможно, придется использовать Process Monitor.
На моей машине разработки у меня есть три разные версии клиентского программного обеспечения Oracle. Я управляю файлом tnsnames.ora
в одном из них. В двух других я записал файл tnsnames.ora
:
ifile=path_to_tnsnames.ora_file/tnsnames.ora
Таким образом, если по какой-то причине неправильный tnsnames.ora
файл используется клиентом, он всегда будет на последней версии.
Codeslave спрашивает: "Не всегда ли это" $ORACLE_ HOME/network/admin/tnsnames.ora "? Ответ - нет, это не так. Рассмотрим эти два вызова tnsp на одном компьютере:
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 (и, возможно, от его запуска). Для сетей основанных на tnsnames оракулов использование переменной TNS_ADMIN - единственный способ гарантировать, что вы получаете согласованный файл tnsnames.ora. (ПРИМЕЧАНИЕ: Windows-ориентированный ответ)
Не всегда ли это "$ ORACLE_ HOME/network/admin/tnsnames.ora"? Затем вы можете просто выполнить "echo $oracle_ home" или эквивалент * nix.
@Pete Holberton Вы совершенно правы. Что напоминает мне, там еще один ключ обезьяны в работах под названием TWO_ TASK
Согласно http://www.orafaq.com/wiki/TNS_ADMIN
TNS_ADMIN - это переменная среды, указывающая на каталог, в котором расположены файлы конфигурации SQL * Net (например, sqlnet.ora и tnsnames.ora).
strace sqlplus -L scott/[email protected]
помогает найти .tnsnames.ora
файл на /home/oracle
, чтобы найти файл, который требуется вместо файла $ORACLE_HOME/network/admin/tnsnames.ora
. Спасибо за публикацию.
По умолчанию tnsnames.ora находится в каталоге $ORACLE_HOME/network/admin в операционных системах UNIX и в каталоге ORACLE_HOME\network\admin в операционных системах Windows. tnsnames.ora также можно сохранить в следующих местах:
Каталог, указанный переменной среды TNS_ADMIN (или значением реестра)
В операционных системах UNIX - глобальный каталог конфигурации. Например, в операционной системе Solaris этот каталог является /var/opt/oracle
Если у вас несколько ORACLE_HOMES, имейте в виду, какой из них вы используете, так как расположение файла tnsnames.ora может варьироваться от одного ORACLE_HOME к другому.
Для человека, который упоминает переменную среды TWO_TASK, которая используется для установки имени службы базы данных по умолчанию для подключения (которое может быть базой данных на другом сервере). Имя службы, которое вы установили TWO_TASK, затем просматривается в файле tnsnames.ora при подключении.
Самый простой способ - это, вероятно, проверить переменную среды PATH процесса, который подключается к базе данных. Скорее всего, файл tnsnames.ora находится в первом каталоге Oracle bin в пути.. \network\admin. Переменная окружения TNS_ADMIN или значение в реестре (для текущего дома Oracle) могут переопределить это.
Использование filemon, как это предлагается другими, также будет делать трюк.
Не прямой ответ на ваш вопрос, но я был очень расстроен, пытаясь найти и обновить все файлы tnsnames, поскольку у меня было несколько инсталляций оракула: клиент, инструменты BI, OWB и т.д., каждый из которых имел свои собственные оракул домой. Я закончил создание утилиты под названием TNSNamesSync, которая обновит все tnsnames во всех домах оракула. Он под лицензией MIT, можно использовать здесь https://github.com/artybug/TNSNamesSync/releases
Документы находятся здесь: https://github.com/artchik/TNSNamesSync/blob/master/README.md
Это только для Windows.