2009-04-17 43 views
6

Mi objetivo es conectarme a una instancia de Oracle 9i desde mi máquina OS X. Seguí las instrucciones de configuración here y las recibí sin errores (eventualmente). Sin embargo, estoy encontrando que sqlplus no puede conectarse:¿Cómo es que sqlplus no se conecta?

[ [email protected] ~ ]$ sqlplus xxx/[email protected] 

SQL*Plus: Release 10.2.0.4.0 - Production on Fri Apr 17 10:13:08 2009 

Copyright (c) 1982, 2007, Oracle. All Rights Reserved. 

espera muuucho ...

ERROR: 
ORA-12170: TNS:Connect timeout occurred 

Enter user-name: xxx 
Enter password: 
ERROR: 
ORA-12162: TNS:net service name is incorrectly specified 

Enter user-name: 

Mi tnsnames.ora archivo ...

zzz = 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
     (ADDRESS = 
     (PROTOCOL = TCP) 
     (HOST = dbhost) 
     (PORT = 1521)) 
    ) 
    (CONNECT_DATA = 
    (SERVICE_NAME = zzz) 
) 
) 

Tal vez hay una variable de entorno eso necesita ser configurado?


ACTUALIZACIÓN

Capaz de ordenador central de ping DB ningún problema.

Probado ...

sqlplus xxx/[email protected]//dbhost/zzz 

Got ...

ERROR: 
ORA-12170: TNS:Connect timeout occurred 

intentado usar SID en lugar de SERVICE_NAME en tnsnames.ora. No pareció cambiar el resultado. Revertido a SERVICE_NAME.


entradas último par de sqlnet.log ...

*********************************************************************** 
Fatal NI connect error 12170. 

    VERSION INFORMATION: 
    TNS for MacOS X Server: Version 10.2.0.4.0 - Production 
    TCP/IP NT Protocol Adapter for MacOS X Server: Version 10.2.0.4.0 - Production 
    Time: 17-APR-2009 10:33:06 
    Tracing not turned on. 
    Tns error struct: 
    ns main err code: 12535 
    TNS-12535: Message 12535 not found; No message file for product=network, facility=TNS 
    ns secondary err code: 12560 
    nt main err code: 505 
    TNS-00505: Message 505 not found; No message file for product=network, facility=TNS 
    nt secondary err code: 60 
    nt OS err code: 0 


*********************************************************************** 
Fatal NI connect error 12170. 

    VERSION INFORMATION: 
    TNS for MacOS X Server: Version 10.2.0.4.0 - Production 
    TCP/IP NT Protocol Adapter for MacOS X Server: Version 10.2.0.4.0 - Production 
    Time: 17-APR-2009 11:24:08 
    Tracing not turned on. 
    Tns error struct: 
    ns main err code: 12535 
    TNS-12535: Message 12535 not found; No message file for product=network, facility=TNS 
    ns secondary err code: 12560 
    nt main err code: 505 
    TNS-00505: Message 505 not found; No message file for product=network, facility=TNS 
    nt secondary err code: 60 
    nt OS err code: 0 

respuesta parcial

Gracias a todos por sus respuestas. Fueron útiles. Descubrí que había un problema de DNS. Pude hacer ping por nombre de host, así que pensé que debería funcionar bien. También probé I.P. dirección. Resultó que necesitaba el interno "10.1.x.x" I.P. dirección para que funcione en esta máquina OS X (pero el nombre de host está bien en Windows).

En este punto, puedo conectar con ...

sqlplus xxx/[email protected]//INTERNAL_IP/zzz 

Sin embargo, con los valores introducidos en tnsnames.ora, esto todavía no funciona ...

sqlplus xxx/[email protected] 

. ..

ORA-12154: TNS:could not resolve the connect identifier specified 

buscaba un sa mple tnsnames.ora archivo que estaba cerca de lo que necesitaba y copió los contenidos en mi archivo. Cambió los parámetros y ahora todo funciona. No estoy seguro de por qué el mío no estaba funcionando.

Respuesta

8

Puesto que usted está utilizando un cliente 10g, es recomendable utilizar Easy Connect sintaxis lugar:

export TWO_TASK=//dbhost/zzz 
sqlplus xxx/yyy 

, o simplemente esta:

sqlplus 'xxx/[email protected]//dnhost/zzz' 

También puedes ver sus ORACLE_HOME puntos a la carpeta correcta: tnsnames.ora se busca en $ORACLE_HOME/network/admin/tnsnames.ora

+0

Creo que debe estar ubicando bien el archivo tnsnames, ya que no se queja de que zzz es un servicio desconocido. –

+0

¿Has probado TNSPING zzz? ¿Puedes TELNET dbhost 1521? – chris

4

Sus corchetes parecen correctos.

Trate de usar el SID:

El siguiente es un ejemplo de un archivo tnsnames.ora:

IDENTIFIER = 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
     (ADDRESS = (PROTOCOL = TCP) (HOST = userid.myhosteddb.net)(PORT = 1521)) 
    ) 
    (CONNECT_DATA = (SID = odb)) 
) 

Read about SID here.

1

Probablemente hay un archivo sqlnet.log está generando en su trabajo directorio. Esto puede ayudarlo o si publica sus contenidos, podría brindarnos más información.

En su ejemplo, está intentando dos cosas diferentes. En la línea de comando usaste "xxx/yyy @ zzz". Parece que esto es encontrar la entrada "zzz" en tnsnames.ora con éxito, pero el tiempo de espera indica que no obtiene respuesta alguna del servidor. ¿Puedes hacer ping al dbhost con éxito?

En su segundo intento, ingresó "xxx" para el nombre de usuario; lo cual tiene sentido si no está acostumbrado a SQLPlus, pero como puede ver, no hay ningún punto en el que le solicite el nombre de la base de datos. Entonces, en este caso, intentaba conectarse a "xxx/yyy" sin un nombre de servicio, lo que lleva al segundo error. Esto solo significa que no tiene un nombre de servicio predeterminado configurado. Entonces este error proviene de una entrada incompleta. (Ingresaría "xxx @ zzz" para el nombre de usuario para especificar el nombre del servicio en este aviso. Puede ingresar la cadena de conexión completa "xxx/yyy @ zzz" en el indicador de nombre de usuario, si no le importa que la contraseña sea visible.)

+0

Sí, puedo hacer ping al host DB especificado en mi archivo tnsnames.ora. – Ethan

1

¿Has probado usar telnet para llegar al puerto abierto para asegurarte de que un firewall no te está bloqueando? puede valer la pena probar Telnet port num host

+0

Puedo conectarme a ese DB desde otras máquinas usando herramientas como SQLDeveloper, entonces sé que el host permite las conexiones. – Ethan

+0

Pero, ¿un firewall local bloquea las conexiones de salida? – trent

1

¿Ha configurado su entorno con el script oraenv?

¿Has probado tnsping?

$ tnsping $ORACLE_SID 

Tal vez le ayudará a comparar la salida de una máquina que se conecta a la salida de una máquina que no puede conectarse. Al menos eso es lo que hago justo antes de contactar a nuestro DBA.

Puede ser un poco más detalle en lo que el error con el comando oerr:

$ oerr ora 12170 
12170, 00000, "TNS:Connect timeout occurred" 
// *Cause: The server shut down because connection establishment or 
// communication with a client failed to complete within the allotted time 
// interval. This may be a result of network or system delays; or this may 
// indicate that a malicious client is trying to cause a Denial of Service 
// attack on the server. 
// *Action: If the error occurred because of a slow network or system, 
// reconfigure one or all of the parameters SQLNET.INBOUND_CONNECT_TIMEOUT, 
// SQLNET.SEND_TIMEOUT, SQLNET.RECV_TIMEOUT in sqlnet.ora to larger values. 
// If a malicious client is suspected, use the address in sqlnet.log to 
// identify the source and restrict access. Note that logged addresses may 
// not be reliable as they can be forged (e.g. in TCP/IP). 
+0

Las herramientas que tengo disponibles son las que vienen con Oracle Instant Client para OS X. Eso incluye sqlplus, pero no parece tener un comando "tnsping". – Ethan

+0

¿Cuál es la var $ ORACLE_SID? Eso no está en mi entorno. ¿Necesita ser? – Ethan

+0

No tengo ninguna experiencia con Oracle Instant Client. Estoy bastante seguro de que $ ORACLE_SID debe configurarse para usar el script de configuración oraenv. Parece que te faltan algunas piezas allí. –

2

Puede utilizar

sqlplus user/[email protected]_host 

si no se puede conectar puede utilizar

sqlplus user/[email protected](DESCRIPTION=((ADDRESS=(PROTOCOL = TCP)(HOST = dbhost)(PORT = 1521))(CONNECT_DATA=(SERVICE_NAME = zzz))) 

si está usando linux otro * Nix OS necesita usar comillas, más los() son interpretados por la cáscara

por ejemplo

sqlplus user/[email protected]'(DESCRIPTION=((ADDRESS=(PROTOCOL = TCP)(HOST = dbhost)(PORT = 1521))(CONNECT_DATA=(SERVICE_NAME = zzz)))' 
0

SEGUIMIENTO DE ENLACE THIS instalación paso a paso y métodos de instalación de la POST .. tener cuidado con él.

Y para conectar con SQL Plus:

  1. nombre de usuario será Sistema estar según la instrucción dada en enlace de arriba
  2. su contraseña NO DEBE SER tigre, pero el que se establece al inicio de la instalación

PD: no cunda el pánico si encuentra un problema (incompatibilidad con el navegador) conectando Oracle Enterprise Manager mientras prueba la instalación si su navegador es Google Chrome. pulse la flecha de la página posterior y la flecha de la página siguiente para aceptar los términos y hacer clic en Aceptar.

Resolví este problema en mi máquina en un día ... pero será cuestión de un par de horas para usted.

soruces: soy ingeniero informático mayoría código en Java

+2

sin necesidad de gritar, ¿verdad? – kleopatra

0

que tenía el mismo error (ORA-12162: TNS: nombre del servicio de red se especifica incorrectamente), pero una razón diferente (en Windows 7 Enterprise de 64 bits) Espero que esto ayude a alguien:

I.T. en mi trabajo instalé Oracle de 32 bits y 64 bits, y en función de mi variable PATH, el shell buscó en la ruta de 64 bits para SQLPLUS.exe en comparación con la ruta de 32 bits.

Los diferentes caminos utilizar diferentes archivos tnsnames.ora y yo no tenía mi cadena de conexión en la ruta de 64 bits:

Oracle \ product \ 11.1.0 \ client_1_64bit \ network \ admin \ tnsnames.ora

que sólo tenía la cadena de conexión en el de 32 bits tNSNAMES.ORA: Oracle \ product \ 11.1.0 \ client_1_32bit \ network \ admin \ tnsnames.ora

también, puesto que había múltiples instalaciones de Oracle I tuvo que eliminar la variable de entorno ORACLE_HOME para que ambas instalaciones puedan usar diferentes directorios principales.

0

Tuve un problema similar y parece que Oracle sqlplus fue el problema.

conexión similares a cualquiera de estas obras:

> sqlplus MyUsername/[email protected]:1521/MyServiceName 
    > sqlplus MyUsername/[email protected]//MyHostname:1521/MyServiceName 

(la // es opcional antes de que el nombre de host). Sin embargo, dejando fuera de la contraseña o ambos de usuario/pase falla como esta:

sqlplus @//MyHostname:1521/MyServiceName 

    SQL*Plus: Release 11.2.0.4.0 Production on Thu Apr 2 15:59:49 2015 

    Copyright (c) 1982, 2013, Oracle. All rights reserved. 

    SP2-0310: unable to open file "//MyHostname:1521/MyServiceName.sql" 
    Enter user-name: MyUsername 
    Enter password: MyPassword 
    ERROR: 
    ORA-12162: TNS:net service name is incorrectly specified 

Así, a pesar de que sqlplus le pide el nombre de usuario/contraseña, que será estúpidamente fallar con un mensaje de error falso si se escriben en el rápido. Solo funciona si los coloca (¡ambos!) Al comienzo de la cadena de conexión.

Estúpido Oracle !!!

Cuestiones relacionadas