Oracle - какой файл имен TNS я использую?

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

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

11 ответов


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


для 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 ваш дом Oracle. Если есть строковая запись с именем TNS_ADMIN, то значение этой записи будет указывать на файл TNS, который Oracle использует на вашем компьютере.


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

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

Filter Dialog

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


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

ifile=path_to_tnsnames.ora_file/tnsnames.ora

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


Codeslave спрашивает: "Разве это не всегда должно быть" $ORACLE_ HOME/network/admin / tnsnames.Ора"? Ответ-Нет, это не так. Рассмотрим эти два вызова tnsping на одной машине:

C:\Documents and Settings\me>D:\Oracle.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.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.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.Ора файл. (Примечание: Windows-ориентированный ответ)


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


не должно ли это всегда быть " $ORACLE_ HOME/network/admin / tnsnames.Ора"? Тогда вы можете просто сделать "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/tiger@orcl помогает найти на /home/oracle найти файл занимает вместо . Спасибо за сообщение.


самый простой способ, вероятно, чтобы проверить путь переменная окружения процесса, подключающегося к базе данных. Скорее всего, tnsnames.файл ora находится в первый каталог Oracle bin в path..\сеть\администратор. Переменная среды TNS_ADMIN или значение в реестре (для текущего Oracle home)может переопределить это.

использование filemon, как предложено другими, также сделает трюк.


не прямой ответ на ваш вопрос, но я был очень расстроен, пытаясь найти и обновить все файлы tnsnames, так как у меня было несколько установок oracle: Client, BI tools, OWB и т. д., Каждый из которых имел свой собственный дом oracle. В итоге я создал утилиту TNSNamesSync, которая обновит все имена tnsnames во всех домах oracle. Это под лицензией MIT, свободно использовать здесь https://github.com/artybug/TNSNamesSync/releases

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

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