Определение местоположения соответствующего файла 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:

  1. Файлы Oracle Net в текущем рабочем каталоге (PWD/CWD)
  2. TNS_ADMIN определяется сессионно или по пользовательскому сценарию
  3. TNS_ADMIN определяется как глобальная переменная среды
  4. TNS_ADMIN определяется в реестре
  5. Oracle Net файлы в %ORACLE_HOME/network|net80\admin (Расположение Oracle по умолчанию)

Однако я не уверен, что каждое приложение / драйвер следует этому списку. Я получил этот список из Oracle Document 111942.1 со ссылкой на Oracle 9i, поэтому он может быть устаревшим.

В Руководстве администратора базы данных Net Services порядок

  1. TNS_ADMIN определяется переменной среды
  2. TNS_ADMIN определяется в реестре (если TNS_ADMIN переменной среды нету)
  3. %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

Обновить

Когда я запускаю тест на моей машине, я получаю следующий порядок:

  1. Переменная среды TNS_ADMIN
  2. Ключ реестра HKEY_CURRENT_USER\SOFTWARE\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN
  3. Ключ реестра 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 Переменная окружения не установлена.

  4. %ORACLE_HOME%\network\admin
  5. Текущий каталог (который может отличаться от каталога, в котором находится ваше приложение)
  6. Папка, в которой находится ваше приложение

Обновление 2

Очевидно, что нет поиска исправлений, он варьируется для разных провайдеров / драйверов. Может быть, это также зависит от версии Oracle.

Например, Oracle HTTP Server читает TNS_ADMIN установка из opmn.xml Конфигурационный файл

Другой пример, для бета- версии ODP.NET Managed Driver (Oracle.ManagedDataAccess), я нашел этот порядок в Oracle Managed и TNS Names:

  1. псевдоним источника данных в разделе "источники данных" под <oracle.manageddataaccess.client> раздел в конфигурационном файле.NET (т.е. machine.config, web.config, user.config).
  2. псевдоним источника данных в tnsnames.ora файл в месте, указанном TNS_ADMIN в конфигурационном файле.NET.
  3. псевдоним источника данных в tnsnames.ora файл присутствует в том же каталоге, что и .exe,
  4. псевдоним источника данных в tnsnames.ora файл присутствует на %TNS_ADMIN%
    (где %TNS_ADMIN% является настройкой переменной среды).
  5. псевдоним источника данных в tnsnames.ora файл присутствует на %ORACLE_HOME%\network\admin
    (где %ORACLE_HOME% является настройкой переменной среды).

В официальной документации (12c Release 4 (12.1.0.2.4)) говорится:

  1. псевдоним источника данных в dataSources раздел под <oracle.manageddataaccess.client> раздел в конфигурационном файле.NET (т.е. machine.config, web.config, user.config).
  2. псевдоним источника данных в tnsnames.ora файл в месте, указанном TNS_ADMIN в конфигурационном файле.NET. Местоположения могут состоять из абсолютных или относительных путей к каталогам.
  3. псевдоним источника данных в 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

Другие вопросы по тегам