martes, 21 de febrero de 2012

El fastidioso ORA-01031 en conexiones remotas como SYSDBA

Las experiencias que nos da la vida, nos permite aprender y encontrar material, para alimentar este blog.

Una situación particular he tenido esta semana, en la cuál he tenido problemas a la hora de conectarme de manera remota con el usuario "SYS" con los privilegios de sistemas SYSDBA a un servidor, desde una máquina remota.

Hay varias notas en MOS ( My Oracle Support  ), así como en Forums abiertos, pero en honor a la verdad, la mayor parte de estas notas son poco precisas y atacan el problema, sólo teóricamente el problema. Ningúna de las notas de los Forums, dice, así se soluciona el problema y me parece, que la gente que lo ha logrado hacer, no se ha tomado la molestia de publicarlo.

Empecemos por el principio:
Síntoma: "Al intentar conectarse con una herramienta cliente/servidor, con el usuario SYS con privilegios SYSDBA, la conexión recibe un ORA-01031 Insuficientes Privilegios para conectarse como SYSDBA. Si se intenta hacer la conexión localmente de la forma: sqlplus sys/@instancia AS SYSDBA, se muestra el mismo error."

Además podría presentarse el siguiente problema: "Al intentar hacer un tnsping al servicio del servidor de la base de datos LISTENER, el mismo responde con un error: TNS-12533. Los usuarios de las aplicaciones están logrando conectarse a la base de datos. El LISTENER responde, pero agrega el error al final del comando."

Vamos por partes, desde el momento que tenemos el TNS-12533, "la cagamos", primero deberíamos obtener sin problemas la respuesta del servicio responsable de atender las solicitudes del cliente. Este problema puede darse por varias razones, pero las menos impensables son:


Verifique que el nombre devuelto por el comando "hostname" es el mismo en el archivo "/etc/hosts" de la configuración del servidor. En Windows, no aplica este punto. Si instaló OEL 5.x o superior o Red Hat Enteprise Server 5.x o superior, recuerde haber deshabilitado el soporte para IPV6. Oracle 11g no soporta aún este protocolo. Aún cuando lo halla hecho en el proceso de instalación, verifique que en el "/etc/hosts" no aparezcan algunas o todas las siguientes entradas:
  • ::1 ip6-localhost ip6-loopback
  • fe00::0 ip6-localnet
  • ff00::0 ip6-mcastprefix
  • ff02::1 ip6-allnodes
  • ff02::2 ip6-allrouters
Si existen elimine las mismas de dicho archivo.

Siguiente paso, verifique que las entradas definidas en el archivo $ORACLE_HOME/network/admin/tnsnames.ora, tenga la sintáxis correcta. En mi caso, la entrada para la conexión definida, tenía un paréntesis de menos.
Le recomiendo reiniciar el servicio de LISTENER.

Verifique que pueda realizar de manera efectiva el comando TNSPING, si pasó esta fase, continuamos con la siguiente.

Ahora ya podemos hacer la conexión con la herramienta o localmente, estando seguros que la configuración de la red local esta 100%.

Cuando intentas utilizar el comando de manera local o remota : sqlplus sys/@instancia AS SYSDBA, obtienes el ORA-1031.


Primero que todo, en Oracle 11gR2, el parámetro REMOTE_LOGIN_PASSWORDFILE tiene como valor de facto "NONE", por tanto, tampoco crea el archivo de password ( orapw ) de validación para sistema operativo y relacionamiento con el grupo ORA_DBA ( dba ), a la hora de la creación de la instancia de la base de datos.

Además, es muy posible que el archivo SQLNET.ORA no exista en la ruta $ORACLE_HOME/network/admin/.

Pasos:
  1. Verifique el archivo "SQLNET.ORA" tenga la línea SQLNET.AUTHENTICATION_SERVICES= ( ALL ), sino existe el archivo crearlo con el usuario "oracle" en el sistema operativo.
  2. Modifique el parámetro de la instancia REMOTE_LOGIN_PASSWORDFILE y proceda a setear su valor a "EXCLUSIVE".
  3. Crear el archivo de password de la instancia. Siga la sintáxis común del utilitario. Nada más le recomiendo que utilice la opción ignorecase=Y, este parámetro es opcional y no se setea por si sólo.
  4. Reinicié la instancia de la base de datos.
  5. Pruebe nuevamente la ejecución de la sentencia local con la herramienta SQLPLUS.
  6. Prueba la conexión desde una máquina remota con el mismo comando ejecutado localmente. Recuerde que la entrada del servicio, debe estar definido en el archivo local TNSNAMES.ORA de la herramienta, para hacer esta conexión de manera remota.
Ahora sí, tiene usted una guía funcional, para solucionar este problema.

Todos los Sábados a las 8:00PM

Optimismo para una vida Mejor

Optimismo para una vida Mejor
Noticias buenas que comentar