oracle - Determinación de la ubicación del archivo tnsnames.ora relevante
sqlplus toad (2)
Instalé los controladores Oracle 11g de 32 y 64 bits. Busqué en mi PC archivos con el nombre "tnsnames.ora" y encontré 3 en las siguientes ubicaciones:
1. C:/Oracle/product/11203_32bit/CLIENT_1/NETWORK/ADMIN
2. C:/Oracle/product/11203_64bit/CLIENT_1/NETWORK/ADMIN
3. C:/Windows/TNS
La existencia de la tercera ubicación del archivo tnsnames.ora me sorprende.
Tengo los siguientes clientes de Oracle instalados en mi PC:
"C:/Program Files (x86)/Quest Software/Toad for Oracle 11.6/Toad.exe"
"C:/Program Files/Devart/dbForge Studio Express for Oracle/dbforgeoracle.exe"
Según la ubicación de cada programa (Archivos de programa (x86) frente a c: / Archivos de programa), esto me sugiere que Toad, un programa de 32 bits, debería usar el controlador de 32 bits y dbForge debería usar el controlador de 64 bits.
dbForge parece usar el archivo tnsnames.ora en la ubicación # 2 o # 3. Sé esto renombrando sistemáticamente todos menos uno de los archivos tns y luego verificando si los nombres de conexión leídos del archivo están disponibles al intentar crear una nueva conexión desde la aplicación.
Sin embargo, ¡TOAD parece reconocer solo el archivo tnsnames.ora en la ubicación # 3 y no reconoció el archivo tnsnames.ora en la ubicación 2! (Siendo que era un programa de 32 bits, no esperaba que reconociera el archivo tns en la ubicación 2 y ese fue el caso). Para resumir la prueba TOAD en aras de una claridad esperanzadora, TOAD solo reconoció el archivo tns en la ubicación 3.
Otros colegas no tienen un archivo tns en la ubicación 3 en sus máquinas. No estoy seguro de por qué lo hago. Cuando ejecuto Toad, muestra los siguientes 2 Inicio, con el Inicio de 32 bits como el activo.
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
P1: ¿OraClient11g_home1 es mi hogar de 64 bits o tengo instalados dos clientes Oracle?
P2: ¿Por qué el TOAD de 32 bits no usa tns en la ubicación n. ° 1 en lugar de usar solo el que está en la ubicación n. ° 3?
P3: Si dejo el archivo tns en la ubicación 3, tanto dbForge como TOAD funcionan, pero me gustaría saber por qué para poder entender con precisión cómo mover la información tns de una máquina a otra.
Basándose en sus rutas, tiene dos clientes instalados como sospecha (Toad y dbforge son herramientas, no clientes, por lo que su terminología está un poco apagada). Uno de 32 bits, el otro de 64 bits. Parece que Toad es de 32 bits en función de su ruta de instalación, pero ejecútelo y vaya a Ayuda | Paquete de soporte. Verá que el encabezado superior será "INFORMACIÓN DE APLICACIÓN (32 bits)" o "INFORMACIÓN DE APLICACIÓN (64 bits)" solo para confirmar. Toad 11.6 fue el primero en introducir una versión de 64 bits.
Toad solo verá el cliente de Oracle que es para la misma plataforma que él. Por lo tanto, su cliente de 64 bits es irrelevante por el bien de Toad. C: / Windows / TNS parece ser una carpeta utilizada para la carpeta TNS_ADMIN dada su ubicación extraña y el hecho de que Toad la ve. En el símbolo del sistema, ejecute SET TNS_ADMIN y vea si informa "TNS_ADMIN = C: / Windows / TNS". Si lo hace, entonces todas las Herramientas deberían estar usando ese tnsnames.ora. Eso es una anulación global si lo hace, apunta a la carpeta que contiene sus archivos de configuración de red. Si no tiene TNS_ADMIN establecido como una variable de entorno, búsquelo en su registro raíz de Oracle: HKEY_LOCAL_MACHINE / Software / Oracle.
Si usa un conjunto común de conexiones para todas sus herramientas, eliminaría todos sus archivos tnsnames.ora. También reubicaría esa carpeta C: / Windows / TNS en un lugar más apropiado como C: / Oracle / Admin y crearía sus tnsnames.ora, sqlnet.ora y ldap.ora (si corresponde) allí. Cree una variable de entorno TNS_ADMIN que apunte a esa ubicación.
Según Oracle, en estas ubicaciones se buscan
tnsnames.ora
, resp.
sqlnet.ora
y
ldap.ora
:
- Archivos de Oracle Net en el directorio de trabajo actual (PWD / CWD)
-
TNS_ADMIN
definido en sesión o por script definido por el usuario -
TNS_ADMIN
definido como una variable de entorno global -
TNS_ADMIN
definido en el registro -
Archivos de Oracle Net en
%ORACLE_HOME/network|net80/admin
(ubicación predeterminada de Oracle)
Sin embargo, no estoy seguro de si cada aplicación / controlador sigue esta lista. Obtuve esta lista del documento Oracle 111942.1 que hace referencia a Oracle 9i, por lo que podría estar desactualizada.
En la Guía del administrador de Database Net Services, el orden es
-
TNS_ADMIN
definido por la variable de entorno -
TNS_ADMIN
definido en el registro (si la variable de entornoTNS_ADMIN
no está presente) -
Directorio
%ORACLE_HOME%/network/admin
(si la variable de entornoTNS_ADMIN
no está presente)
Recomendaría definir una variable de entorno para
TNS_ADMIN
y usar solo un archivo tnsnames.ora.
Para estar seguro, verifique también sus valores de registro.
Si sus archivos
no se
encuentran en
%ORACLE_HOME%/network/admin
, le recomiendo crear un enlace simbólico, solo para estar seguro, por ejemplo,
mklink /d %ORACLE_HOME%/network/admin c:/Oracle/common/settings/admin
Otra nota, no tiene que "jugar" con su archivo tnsnames.ora.
Con
Process Monitor
de Microsoft Sysinternals puede monitorear el acceso a cada archivo, es decir, el filtro sería
Path contains tnsnames
Actualizar
Cuando ejecuto una prueba en mi máquina obtengo el siguiente orden:
-
Variable de entorno
TNS_ADMIN
-
Clave de registro
HKEY_CURRENT_USER/SOFTWARE/ORACLE/KEY_{Oracle_Home_Name}/TNS_ADMIN
-
Clave de registro
HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_{Oracle_Home_Name}/TNS_ADMIN
, resp.HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/ORACLE/KEY_{Oracle_Home_Name}/TNS_ADMIN
-> Solo si la variable de entorno
TNS_ADMIN
no está establecida. -
%ORACLE_HOME%/network/admin
- Directorio actual (que puede ser diferente al directorio donde se encuentra su aplicación)
- Carpeta donde se encuentra su aplicación
Actualización 2
Obviamente no hay búsqueda de soluciones, varía para diferentes proveedores / controladores. Tal vez también depende de la versión de Oracle.
Por ejemplo, el
servidor HTTP de Oracle
lee la configuración
TNS_ADMIN
del
opmn.xml
configuración
opmn.xml
.
Otro ejemplo, para la versión beta de ODP.NET Managed Driver (Oracle.ManagedDataAccess), encontré este pedido en Oracle Managed y TNS Names :
-
alias de origen de datos en la sección ''dataSources'' en la sección
<oracle.manageddataaccess.client>
en el archivo de configuración .NET (es decir,machine.config
,web.config
,user.config
). -
alias de origen de datos en el archivo
tnsnames.ora
en la ubicación especificada porTNS_ADMIN
en el archivo de configuración .NET. -
alias de origen de datos en el archivo
tnsnames.ora
presente en el mismo directorio que el.exe
. -
alias de origen de datos en el archivo
tnsnames.ora
presente en%TNS_ADMIN%
(donde%TNS_ADMIN%
es una configuración de variable de entorno). -
alias de origen de datos en el archivo
tnsnames.ora
presente en%ORACLE_HOME%/network/admin
(donde%ORACLE_HOME%
es una configuración de variable de entorno).
En la documentation oficial (12c Release 4 (12.1.0.2.4)) dice:
-
alias de origen de datos en la sección
dataSources
en la sección<oracle.manageddataaccess.client>
en el archivo de configuración .NET (es decir,machine.config
,web.config
,user.config
). -
alias de origen de datos en el archivo
tnsnames.ora
en la ubicación especificada porTNS_ADMIN
en el archivo de configuración .NET. Las ubicaciones pueden consistir en rutas de directorio absolutas o relativas. -
alias de origen de datos en el archivo
tnsnames.ora
presente en el mismo directorio que el.exe
.
Sin embargo, según algunas pruebas que hice con el controlador administrado ODP.NET (4.121.2.0), se tiene en cuenta
%ORACLE_HOME%/network/admin
y la variable de entorno
TNS_ADMIN
.
Bloqueos como la documentación no es 100% correcta.