viernes, marzo 27, 2009

Pool de conexiones en websphere - Connection reset

Me tope con el problema, de que en una aplicación habia un proceso que funcionaba y al rato dejaba de funcionar...

Leyendo logs encontré este error:
com.ibm.websphere.ce.cm.StaleConnectionException: Io exception: Connection reset
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:67)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

Pero si entraba a probar la conexion funcionaba...

No estoy seguro si la conexión fue cerrada por el servidor de base de datos o por caídas de conexión, pero la conexión fue cerrada.

Cambie las propiedades del pool de conexiones para forzarlo a verificar si la conexion esta activa antes de utilizarla. Esto es ponerle un sobrecosto al ejecutar conexiones, pero nos asegura que el pool tenga conexiones disponibles y funcionales.

En propiedades avanzadas del origen de datos:Cambio la propiedad para que se prueben las conexiones:

Esto suena util si la base de datos te cierra las conexiones inactivas por cierto tiempo o si la conexion entre el servidor de aplicaciones y el servidor de base de datos es inestable.

saludos!

lunes, marzo 23, 2009

Error ORA-27102 al modificar el sga_max_size en oracle

El sabado me topé con un error en una base de datos. Un error que me complicó un poco más de la cuenta.

Necesitabamos modificar los parámetros de memoria asignada al SGA de una base de datos. Lo que hicieron fue modificar el sga_max_size de Oracle para que consumiera más memoria de la que se tenía.

El problema fue que luego de hecho el cambio y reiniciada la base de datos, la misma no levantaba.

Revisando logs encontré que me daba un mensaje:
ORA-27102: Out of memory
OSD-00022: aditional error information
O/S-Error: (OS 8) Not enough storage avaible

Resulta que la maquina donde estaba instalado el oracle era un nodo de un VMWARE y al tratar de asignar la memoria no se encontró espacio de memoria suficiente.

Hasta aca todo normal, sería solo de modificar de nuevo los parámetros y reiniciar.

Ingrese al sqlplus:
sqlplus /nolog
connect / as sysdba

trate de subir el pfile al spfile y levantar la base de datos:
CREATE spfile FROM pfile='c:/initORCL.ora';
startup

Y me dio un error:
ORA-27100 shared memory realm already exists

mmm.... la base esta levantada? probe bajarla
shutdown immediate
ORA-27101 shared memory realm does not exists

Y entonces.. ni esta arriba ni esta abajo ???! Buscando en internet encontre un par de paginas que habia una especie de bug de oracle que te dejaba la base de datos asi...

Que hice?

* baje el servicio de oracle
* baje la base con linea de comando oradim -shutdown -sid ORCL -shuttype srvc,inst
* me conecte al sqlplus
* sqlplus /nolog
* connect / as sysdba
* Cambie el pfile
* CREATE spfile FROM pfile='c:/initORCL.ora';
* Levante la base usando el nuevo pfile
*

oradim -startup -sid ORCL -starttype srvc -pfile c:/initORCL.ora

Ahi ya me pude conectar.. pero la base no levantaba automaticamente. Lo siguiente es lo que creo que hay que hacer.. pero no quise hacerlo porque ya eran las 4:00am... y debiamos estar con la base levantada en produccion.. (ohh... fue en una base de datos en produccion).-

* Borrar el servicio de oracle oradim -delete -sid ORCL
* Recrear el servicio de oracle oradim -new -sid ORCL -pfile c:/initORCL.ora

y ya....

Saludos!

Ref.
http://www.dba-oracle.com/t_ora_27100_shared_memory_realm_already_exists.htm


http://newsgroups.derkeiler.com/Archive/Comp/comp.databases.oracle.server/2005-10/msg01447.html