sexta-feira, 17 de agosto de 2012

Resolución de problemas de red de Oracle


Este artículo tiene un procedimiento que ayudará a diagnosticar y solucionar los problemas más común del SQLNET y de configuración del archivo TNSNAMES.ora. Este artículo tiene dos partes.
 
1. Prueba de comunicación entre el cliente y el LISTENER.
 
Para hacer una prueba con la comunicación entre el cliente y el LISTENER, utilizase el comando “tnsping”. Un error común que tnsping pruebas de conectividad a la instancia. En realidad, sólo pone a prueba la conectividad con el LISTENER.
 
Esta prueba puede demostrar que 
 
a)  El archivo “tnsnames.ora” tiene que tener el nombre del servidor y la puerta correctos, y
b)  Que hay un LISTENER escuchando en el servidor y la puerta. 
 
Para ejecutar el comando tnsping, usar:
 
tnsping [conexión_tnsnames ] [numero_veces]
  

oracle@dbsrv$ tnspinng test 2

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS =
(PROTOCOL = TCP) (HOST = dbsrv)(PORT = 1521))) (CONNECT_DATA =
(SERVER = DEDICATED) (SERVICE_NAME = test)))
OK (40 msec)
OK (10 msec)


Si lá configuración estuver correcta, verá algo como esto:

Si no tiene un mensaje como esta de arriba, aquí están algunos errores comunes, y algunas sugerencias para corregirlos:

Mesages común de errors


TNS-03505: Failed to resolve name


El nombre de base de datos especificada no se ha encontrado en el archivo TNSNAMES.ORA, ONAMES o LDAP. Esto significa que el comando “tnsping” ni siquiera ha llegado tan lejos como tratando de hacer contacto con un servidor - que simplemente no puede encontrar ningún registro de la base de datos que está tratando el comando “tnsping”. Asegúrese de que usted ha escrito el nombre de base de datos correctamente, y que tiene una entrada en el tnsnames.ora.

Si usted tiene un archivo SQLNET.ORA, mirar el ajuste para el parámetro NAMES.DEFAULT_DOMAIN.  Si se establece, entonces todas las entradas en el TNSNAMES.ORA deben tener un sufijo de dominio coincidente.


TNS-12545: Connect failed because target host or object does not exist

El host especificado en los archivo TNSNAMES.ORA no puede tocarlo. Compruebe que ha escrito el nombre del  host correctamente. Si es así, intente hacer un ping al host  utilizando el comando ping  '[hostname]'. Si los host desconocido vuelve el ping, hable con su administrador de red. Puede ser que usted tiene un problema de DNS (que podría tratar de usar la dirección IP si lo tiene a la mano). Si se obtiene el 'host inaccesible ", una vez más hablar con la persona de la red, el problema podría deberse a un problema de enrutamiento o un firewall.


TNS-12541: TNS: no listener

El nombre de host es válido, pero el LISTENER no estaba localizable. Cosas a comprobar son que el archivo TNSNAMES.ora tiene la puerta correcta  (y el nombre del servidor) se especifica, y que el LISTENER  se está ejecutando en el servidor y utiliza en la puerta correcto.


Tnsping hangs for a long time

He visto que esto suceda en situaciones donde hay algo escuchando en el host / puerta  - pero no es una escucha de Oracle. Asegúrese de que haya especificado el puerto correcto, y que su interlocutor está corriendo. Si todo se ve bien, trate de ejecutar el comando "netstat     -ap | grep 1521 “ (debe indicar la puerta que está utilizando) para averiguar qué programa está escuchando en ese puerta.


2. Intentar una conexión con el ejemplo


Una vez que haya comprobado que el archivo TNSNAMES.ORA está contactando correctamente con el agente de escucha (LISTENER), el siguiente paso es intentar una conexión permanente a la instancia. Para hacer esto, debe utilizar lo utilitario “SQL*Plus”.

sqlplus [usuario]/[contraseña]@[conexión_tnsnames]


Si funciona correctamente inicie una sesión en la instancia. Si no es así, aquí están algunos errores comunes:

ORA-01017: invalid username/password; logon denied

Esto es en realidad un error de buena en estas circunstancias. A pesar de que no ha utilizado el nombre de usuario o la contraseña correcta, usted debe haber realizado con éxito el contacto con la instancia.


ORA-12505: TNS:listener does not currently know of SID given in connect

El parámetro SID está mal escrito en el archivo TNSNAMES.ORA, o el  LISTENER no está escuchando para ello. Compruebe el parámetro en el archivo TNSNAMES.ORA. Si se ve bien, debe mirar el estado del LISTENER, correr el comando “lsnrctl status” en su servidor, para ver qué bases de datos que el LISTENER está escuchando.


ORA-12514: TNS: listener could not resolve SERVICE_NAME given in connect

Esto es un error común y significa que, mientras que el LISTENER era localizable, la base de datos (el servicio) se especifica en el archivo TNSNAMES.ORA no era una de las cosas que estaba escuchando.

Comience por mirar el archivo TNSNAMES.ORA. En ella, se ponga el parámetro SERVICE_NAME = [nombre_instancia].

Si está ejecutando una base de datos de instancia única (eso es, no RAC), y está seguro de que usted no está utilizando los servicios, podría ser más fácil de cambiar parámetro SERVICE_NAME =[nombre_instancia] en el archivo TNSNAMES.ORA. El uso de nombres de servicio es la forma más moderna de hacer las cosas y que tiene beneficios, pero el parámetro SID sigue funcionando perfectamente (por ahora de todos modos y versiones).

Si prefiere seguir utilizando los nombres de servicio, primero debe verificar que no haya escrito correctamente el nombre del servicio en el archivo TNSNAMES.ORA. Si se ve bien de verificación, al lado de que el LISTENER está escuchando por el servicio. Haga esto mediante la ejecución del comando “lsnrctl services” en su servidor. Si no hay una entrada para el servicio, usted debe asegurarse de que el parámetro SERVICE_NAMES está configurado correctamente en la base de datos.





MSc. Rubens Oliveira
DBA Oracle Consultor
olivert.dba@consultant.com