2008-08-13 10 views

Respuesta

72

Oracle proporciona una utilidad llamada 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:\> 

Esto debería mostrar qué archivo que está utilizando. La utilidad se encuentra en el directorio Oracle bin.

15

Para Linux:

$ strace sqlplus -L scott/[email protected] 2>&1| grep -i 'open.*tnsnames.ora' 

muestra algo como esto:

open("/opt/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora",O_RDONLY)=7 

Cambiar a

$ strace sqlplus -L scott/[email protected] 2>&1| grep -i 'tnsnames.ora' 

mostrará todas las rutas de archivos que están fallando.

+1

Gracias, en base a esto, parece que /etc/tnsnames.ora es una ubicación confiable y global para nombres de tns. –

+0

@AvindraGoolcharan, esa es mi conclusión también. Ahí es donde lo ponemos y no hemos tenido problemas. –

1

¿No debería ser siempre "$ ORACLE_ HOME/network/admin/tnsnames.ora"? Luego puede hacer "echo $ oracle_ home" o el equivalente de * nix.

@Pete Holberton Usted es del todo correcto. Lo que me recuerda, hay otra llave inglesa en las obras denominadas TWO_ TAREA

Según http://www.orafaq.com/wiki/TNS_ADMIN
TNS_ADMIN es una variable de entorno que apunta al directorio donde el SQL * Net archivos de configuración (como sqlnet.ora y tnsnames.ora) son situado.

+2

En realidad, no, no puede asumir esta ubicación. Está el hogar del agente y el hogar del cliente, solo para nombrar 2, que tienen su propio directorio de red/administrador. La respuesta que obtienes depende de qué ejecutable estás ejecutando. – DCookie

4

Para Windows: Filemon de SysInternals le mostrará a qué archivos se está accediendo.

Recuerde configurar sus filtros para que no se sienta abrumado por el tráfico del sistema de archivos hablador.

Filter Dialog

Agregado: Filemon no funciona con las versiones más recientes de Windows, por lo que puede que tenga que utilizar Process Monitor.

5

Hay otro lugar donde se almacena la ubicación de TNS: Si está usando Windows, abra regedit y navegue hasta My HKEY Local Machine/Software/ORACLE/KEY_OraClient10_home1 donde KEY_OraClient10_home1 es su hogar Oracle. Si hay una entrada de cadena llamada TNS_ADMIN, entonces el valor de esa entrada apuntará al archivo TNS que Oracle está usando en su computadora.

0

De forma predeterminada, tnsnames.ora se encuentra en el directorio $ ORACLE_HOME/network/admin en los sistemas operativos UNIX y en el directorio ORACLE_HOME \ network \ admin en los sistemas operativos Windows. tnsnames.ora también puede almacenarse en las siguientes ubicaciones:

El directorio especificado por el (o valor de registro) variable de entorno TNS_ADMIN

En los sistemas operativos UNIX, el directorio de configuración global.Por ejemplo, en el sistema operativo Solaris, este directorio es/var/opt/oracle

Si tiene varias ORACLE_HOMES, tenga en cuenta cuál de ellas está utilizando, ya que la ubicación del archivo tnsnames.ora puede variar de una ORACLE_HOME a la siguiente.

Para la persona que mencionó la variable de entorno TWO_TASK, que se utiliza para establecer un nombre de servicio de base de datos predeterminado para conectarse (que podría ser una base de datos en otro servidor). El nombre del servicio al que configuró TWO_TASK se busca en el archivo tnsnames.ora cuando se conecta.

3

Codeslave pregunta "¿No debería ser siempre '$ ORACLE_ INICIO/network/admin/tnsnames.ora' La respuesta es no, no es Tenga en cuenta estas dos invocaciones de tnsping en la misma máquina:?.

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> 

Nota las dos ubicaciones de los archivos de parámetros diferentes, que dependen de la cual tnsping ejecutable que se está ejecutando (y quizás donde es de ejecutarse desde). para la red de Oracle basada en tnsnames, utilizando la variable TNS_ADMIN es la única manera de asegúrese de obtener un archivo tnsnames.ora consistente. (NOTA: respuesta centrada en Windows)

+3

¿No te encantan las casas de oráculo múltiples? – stjohnroe

4

En mi máquina de desarrollo tengo tres diferencias versiones actuales del software de cliente de Oracle. Administro el archivo tnsnames.ora en uno de ellos. En los otros dos, he entrado en el archivo tnsnames.ora:

ifile=path_to_tnsnames.ora_file/tnsnames.ora 

esta manera, si por alguna razón el tnsnames.ora archivo incorrecto es utilizado por un cliente, será siempre terminan en la versión actualizada .

0

La manera más fácil es, probablemente, verificar la variable de entorno PATH del proceso que se está conectando a la base de datos. Lo más probable es que el archivo tnsnames.ora esté en primer directorio de Oracle bin en la ruta .. \ network \ admin. La variable de entorno TNS_ADMIN o el valor en el registro (para el hogar Oracle actual) pueden anular esto.

El uso de FileMon como lo sugieren otros también hará el truco.

1

strace sqlplus -L scott/[email protected] ayuda para encontrar .tnsnames.ora archivo en /home/oracle para encontrar el archivo que se necesita en lugar de $ORACLE_HOME/network/admin/tnsnames.ora archivo. Gracias por la publicación.

0

No respondo directamente a su pregunta, pero he estado bastante frustrado tratando de encontrar y actualizar todos los archivos de nombres, ya que tenía varias instalaciones de Oracle: Cliente, herramientas de BI, OWB, etc., cada uno de los cuales tenía su propio oráculo a casa. Terminé creando una utilidad llamada TNSNamesSync que actualizará todos los nombres de todos los hogares de Oracle. Es bajo la licencia MIT, de uso gratuito aquí https://github.com/artybug/TNSNamesSync/releases

Los documentos están aquí: https://github.com/artchik/TNSNamesSync/blob/master/README.md

Esto es sólo para Windows, sin embargo.

Cuestiones relacionadas