Oracle - Какой файл имен TNS я использую? - PullRequest
50 голосов
/ 14 августа 2008

Иногда возникают проблемы с подключением к Oracle, потому что я не могу понять, какой файл tnsnames.ora использует мой клиент базы данных.

Какой лучший способ понять это? ++ рад за различные платформенные решения.

Ответы [ 11 ]

72 голосов
/ 27 августа 2008

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.

16 голосов
/ 14 августа 2008

Для 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'

покажет все пути к файлам, которые терпят неудачу.

5 голосов
/ 30 августа 2008

Есть еще одно место, где хранится местоположение TNS: если вы используете Windows, откройте regedit и перейдите к My HKEY Local Machine/Software/ORACLE/KEY_OraClient10_home1, где KEY_OraClient10_home1 - ваш Oracle. Если есть строковая запись с именем TNS_ADMIN, то значение этой записи будет указывать на файл TNS, который Oracle использует на вашем компьютере.

4 голосов
/ 14 октября 2008

На моей машине для разработки у меня есть три разные версии клиентского программного обеспечения Oracle. Я управляю файлом tnsnames.ora в одном из них. В двух других я ввел в tnsnames.ora файл:

ifile=path_to_tnsnames.ora_file/tnsnames.ora

Таким образом, если по какой-то причине клиент использует неправильный файл tnsnames.ora, он всегда будет иметь актуальную версию.

4 голосов
/ 27 августа 2008

Для Windows: Filemon из SysInternals покажет вам, к каким файлам осуществляется доступ.

Не забудьте установить фильтры, чтобы вы не были перегружены разговором в файловой системе.

Filter Dialog

Добавлено: Filemon не работает с более новыми версиями Windows, поэтому вам, возможно, придется использовать Process Monitor .

3 голосов
/ 10 октября 2008

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-ориентированный ответ)

2 голосов
/ 01 сентября 2008

По умолчанию 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 при подключении.

1 голос
/ 11 декабря 2013

strace sqlplus -L scott/tiger@orcl помогает найти .tnsnames.ora файл в /home/oracle, чтобы найти файл, который он использует вместо $ORACLE_HOME/network/admin/tnsnames.ora файла. Спасибо за публикацию.

1 голос
/ 14 августа 2008

Разве это не должно быть всегда "$ 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).

0 голосов
/ 26 марта 2016

Не прямой ответ на ваш вопрос, но я был очень разочарован, пытаясь найти и обновить все файлы tnsnames, так как у меня было несколько установок Oracle: клиент, инструменты BI, OWB и т. Д., Каждая из которых имела свою собственную оракул дом. Я закончил тем, что создал утилиту под названием TNSNamesSync, которая обновит все tnsnames во всех домах оракула. Он находится под лицензией MIT, бесплатное использование здесь https://github.com/artybug/TNSNamesSync/releases

Документы здесь: https://github.com/artchik/TNSNamesSync/blob/master/README.md

Это только для Windows.

...