Определение местоположения соответствующего файла tnsnames.ora
Я установил 32- и 64-разрядные драйверы Oracle 11g. Я ищу на своем компьютере файлы с именем "tnsnames.ora" и обнаружил 3 в следующих местах:
1. C:\Oracle\product\11203_32bit\CLIENT_1\NETWORK\ADMIN
2. C:\Oracle\product\11203_64bit\CLIENT_1\NETWORK\ADMIN
3. C:\Windows\TNS
Меня удивляет существование 3-го местоположения файла tnsnames.ora.
На моем компьютере установлены следующие клиенты Oracle:
"C:\Program Files (x86)\Quest Software\Toad for Oracle 11.6\Toad.exe"
"C:\Program Files\Devart\dbForge Studio Express for Oracle\dbforgeoracle.exe"
Исходя из расположения каждой программы (Program Files (x86) и c:\Program Files), это говорит о том, что 32-разрядная программа Toad должна использовать 32-разрядный драйвер, а dbForge должна использовать 64-разрядный драйвер.
Кажется, что dbForge использует файл tnsnames.ora либо в папке №2, либо в №3. Я знаю это, систематически переименовывая все, кроме одного из файлов tns, а затем проверяя, доступны ли имена соединений, считанные из файла, при попытке создать новое соединение из приложения.
Тем не менее, TOAD, похоже, распознает только файл tnsnames.ora в расположении #3 и вообще не распознает файл tnsnames.ora в расположении 2! (Поскольку это была 32-битная программа, я не ожидал, что она распознает файл tns в местоположении 2, и это так). Чтобы подвести итоги теста TOAD для обнадеживающей ясности, TOAD распознал только файл tns в местоположении 3.
Другие коллеги не имеют файла tns в расположении 3 на своих машинах. Я не уверен, почему я делаю. Когда я запускаю Toad, он показывает следующие 2 Home, с 32-битным Home как активный.
OraClient11g_home1 (11.2.0.3)
ORACLE_HOME:C:\app\C39293\product\11.2.0\client_1
ORACLE_HOME_NAME:OraClient11g_home1
ORACLE_HOME_KEY:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient11g_home1
ORACLE_SID:
NLS_LANG:AMERICAN_AMERICA.WE8MSWIN1252
SQLPATH:
LOCAL:
Client DLL:C:\app\C39293\product\11.2.0\client_1\oci.dll
TNSNames.ora:
SQLNet.ora:
LDAP.ora:
Login.sql:
GLogin.sql:
In system PATH:No
Home is valid:No
OraClient11g_home1_32bit (11.2.0.3)
ORACLE_HOME:c:\oracle\product\11203_32bit\CLIENT_1
ORACLE_HOME_NAME:OraClient11g_home1_32bit
ORACLE_HOME_KEY:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient11g_home1_32bit
ORACLE_SID:
NLS_LANG:AMERICAN_AMERICA.WE8MSWIN1252
SQLPATH:c:\oracle\product\11203_32bit\CLIENT_1\dbs
LOCAL:
Client DLL:c:\oracle\product\11203_32bit\CLIENT_1\bin\oci.dll
TNSNames.ora:
SQLNet.ora:
LDAP.ora:
Login.sql:
GLogin.sql:c:\oracle\product\11203_32bit\CLIENT_1\sqlplus\admin\glogin.sql
In system PATH:Yes
Q1: Является ли OraClient11g_home1 моим 64-битным домом или у меня установлены два клиента Oracle?
Q2: Почему 32-битная TOAD не использует tns в местоположении #1, а не использует только одно в местоположении #3?
Q3: Если я оставлю файл tns в папке 3, оба dbForge и TOAD будут работать, но мне хотелось бы знать, почему, поэтому я могу точно понять, как перемещать информацию tns с одного компьютера на другой.
2 ответа
На основании ваших путей, как вы подозреваете, у вас есть два установленных клиента (Toad и dbforge - это инструменты, а не клиенты, так что ваша терминология немного отличается). Один 32-битный, другой 64-битный. Похоже, что Toad 32-битный в зависимости от пути установки, но выполните его и перейдите в Help|Support Bundle. Вы увидите, что верхний заголовок будет "ИНФОРМАЦИЯ О ПРИЛОЖЕНИИ (32-разрядная версия)" или "ИНФОРМАЦИЯ О ПРИЛОЖЕНИИ (64-разрядная версия)" только для подтверждения. Toad 11.6 был первым, кто представил 64-битную версию.
Жаба увидит только клиент Oracle, который предназначен для той же платформы, что и он. Так что ваш 64-битный клиент не имеет значения для Жабы. C:\Windows\TNS - это папка, используемая для папки TNS_ADMIN, учитывая ее странное местоположение и тот факт, что ее видит Жаба. В командной строке выполните команду SET TNS_ADMIN и посмотрите, сообщает ли она "TNS_ADMIN=C:\Windows\TNS". Если это так, все инструменты должны использовать этот файл tnsnames.ora. Это глобальное переопределение, если вы указываете на папку, содержащую ваши сетевые файлы конфигурации. Если в качестве переменной среды не задан TNS_ADMIN, найдите его в корневом реестре Oracle: HKEY_LOCAL_MACHINE\Software\Oracle.
Если вы используете общий набор соединений для всех ваших инструментов, я удалил бы все ваши файлы tnsnames.ora. Я бы также переместил эту папку C:\Windows\TNS в более подходящее место, например C:\Oracle\Admin, и создал бы там ваши tnsnames.ora, sqlnet.ora и ldap.ora (если применимо). Создайте переменную среды TNS_ADMIN, указывающую на это местоположение.
По данным Oracle, эти места ищутся tnsnames.ora
соответственно sqlnet.ora
а также ldap.ora
:
- Файлы Oracle Net в текущем рабочем каталоге (PWD/CWD)
TNS_ADMIN
определяется сессионно или по пользовательскому сценариюTNS_ADMIN
определяется как глобальная переменная средыTNS_ADMIN
определяется в реестре- Oracle Net файлы в
%ORACLE_HOME/network|net80\admin
(Расположение Oracle по умолчанию)
Однако я не уверен, что каждое приложение / драйвер следует этому списку. Я получил этот список из Oracle Document 111942.1 со ссылкой на Oracle 9i, поэтому он может быть устаревшим.
В Руководстве администратора базы данных Net Services порядок
TNS_ADMIN
определяется переменной средыTNS_ADMIN
определяется в реестре (еслиTNS_ADMIN
переменной среды нету)%ORACLE_HOME%/network/admin
каталог (еслиTNS_ADMIN
переменной среды нету)
Я бы порекомендовал определить переменную среды для TNS_ADMIN
и использовать только один файл tnsnames.ora. Чтобы быть в безопасности, проверьте также значения вашего реестра.
Если ваши файлы не находятся в %ORACLE_HOME%\network\admin
Я рекомендую создать для него символическую ссылку - просто чтобы быть на очень безопасной стороне, например mklink /d %ORACLE_HOME%\network\admin c:\Oracle\common\settings\admin
Еще одно замечание: вам не нужно "играть" с файлом tnsnames.ora. С Process Monitor от Microsoft Sysinternals вы можете контролировать каждый доступ к файлу, то есть фильтр будет Path contains tnsnames
Обновить
Когда я запускаю тест на моей машине, я получаю следующий порядок:
- Переменная среды
TNS_ADMIN
- Ключ реестра
HKEY_CURRENT_USER\SOFTWARE\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN
Ключ реестра
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN
соответственноHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN
-> Только если
TNS_ADMIN
Переменная окружения не установлена.%ORACLE_HOME%\network\admin
- Текущий каталог (который может отличаться от каталога, в котором находится ваше приложение)
- Папка, в которой находится ваше приложение
Обновление 2
Очевидно, что нет поиска исправлений, он варьируется для разных провайдеров / драйверов. Может быть, это также зависит от версии Oracle.
Например, Oracle HTTP Server читает TNS_ADMIN
установка из opmn.xml
Конфигурационный файл
Другой пример, для бета- версии ODP.NET Managed Driver (Oracle.ManagedDataAccess), я нашел этот порядок в Oracle Managed и TNS Names:
- псевдоним источника данных в разделе "источники данных" под
<oracle.manageddataaccess.client>
раздел в конфигурационном файле.NET (т.е.machine.config
,web.config
,user.config
). - псевдоним источника данных в
tnsnames.ora
файл в месте, указанномTNS_ADMIN
в конфигурационном файле.NET. - псевдоним источника данных в
tnsnames.ora
файл присутствует в том же каталоге, что и.exe
, - псевдоним источника данных в
tnsnames.ora
файл присутствует на%TNS_ADMIN%
(где%TNS_ADMIN%
является настройкой переменной среды). - псевдоним источника данных в
tnsnames.ora
файл присутствует на%ORACLE_HOME%\network\admin
(где%ORACLE_HOME%
является настройкой переменной среды).
В официальной документации (12c Release 4 (12.1.0.2.4)) говорится:
- псевдоним источника данных в
dataSources
раздел под<oracle.manageddataaccess.client>
раздел в конфигурационном файле.NET (т.е.machine.config
,web.config
,user.config
). - псевдоним источника данных в
tnsnames.ora
файл в месте, указанномTNS_ADMIN
в конфигурационном файле.NET. Местоположения могут состоять из абсолютных или относительных путей к каталогам. - псевдоним источника данных в
tnsnames.ora
файл присутствует в том же каталоге, что и.exe
,
Однако, основываясь на некоторых тестах, которые я сделал с ODP.NET Managed Driver (4.121.2.0), он занимает %ORACLE_HOME%\network\admin
а также TNS_ADMIN
Переменная среды во внимание. Блокировки, подобные документации, не на 100% правильны.
Если вы используете Visual Studio v2017, вот файл tnsNames:
32-битная установка:
c: \ program files (x86) \ инструменты разработчика oracle для vs2017\network\admin\tnsnames.ora
64-битная установка:
c: \ program files \ инструменты разработчика oracle для vs2017\network\admin\tnsnames.ora