domingo, enero 31, 2010

Errores Oracle ORA-01033, ORA-01219, ORA-03113


Normalmente el sistema de codificación de errores Oracle ofrece información clara de lo que está ocurriendo. Sin embargo en algunas ocasiones surgen códigos de error que dan información demasiado imprecisa, y también puede ocurrir que depediendo de lo que intentemos salgan errores diferentes.

En una ocasión, una avería en la UPS (Uninterruptible Power Supply) provocó un corte de suministro eléctrico en un servidor Oracle. Se arrancó el servidor, pero cada vez que se intentaba acceder por SQL*Plus, Toad, Aplicaciones, etc. aparecía el error ORA-01033: Oracle initialization or shutdown in progress.

El servicio Oracle se encontraba corriendo sobre un cluster activo-pasivo (Service Guard de HP) y el comando #cmviewcl mostraba que el cluster estaba levantado y el paquete Oracle corriendo.

Por supuesto lo primero fue reiniciar el cluster:

cmhaltpkg oracle_servicio
-> Se para el paquete.

cmhaltcl -> Se para el cluster.

cmviewcl -> Todo aparece Down.

cmruncl -> Cluster levantado, todos los elementos UP.

Pero no resultó. Aunque el paquete parecía estar UP, Oracle no estaba en estado abierto. Daba el mismo error ORA-01033. Así que tocaba ver que estaba ocurriendo.

Desde la misma máquina, iniciando sesión con el usuario "oracle" entramos en sqlplus:

SQL>sqlplus “/as sysdba”

Y al probar ejecutar cualquier sentencia SQL, nos apareció un error similar al anterior, pero diferente...

SQL>select * from user_tables; -> Error ORA-01219. Database not open.

Con esos dos mensajes ya vemos lo que está ocurriendo. Por una parte nos indican que Oracle se está inicializando y por otra que la base de datos no está abierta.

Entoces toca saber cual es el estado de la base de datos...

SQL>select open_mode from v$database; -> MOUNTED.

Si la base de datos está montada lo siguiente sería abrirla. Intentamos levantarla...

SQL>alter database open; -> Error ORA-03113: End-of-file on communication channel.

Vaya, un tercer error diferente, y este ya no hace más que despistar. Lo que ocurre es que ha interrumpido la acción y ha dado por terminada la comunicación.

Probamos a desmontar y montar la base de datos y a ver si arranca de una vez:

SQL> shutdown immediate -> OK

SQL> startup mount -> OK

SQL> alter database open; -> Error ORA-03113: End-of-file on communication channel.

Está claro que necesitamos algo más de información. Vamos al log de Oracle (fichero alert_servicio.log) para ver si ha recogido algún detalle más:

Vemos que cada vez que hemos intentado el ALTER DATABASE OPEN, se registra el mismo error: ORA-00600: Internal error code. Arguments: [kcratr1-lastbwr]

Vaya, un error genérico de los que no dicen nada salvo por el argumento kcratr1-lastbwr.

Bien, pues llegamos al final. En mi caso ese "Internal Error" se solucionó simplemente con una recuperación de la Base de Datos. Esta recuperación consiste en aplicar los cambios almacenados en los ficheros de REDO (redolog files).

Teniendo la base de datos montada, hacemos una recuperación de la base de datos:

SQL> recover database; -> Media recovery complete.

SQL> alter database open; -> Database altered.

De esta forma la base de datos ya se quedó funcionando con normalidad.

Saludos.

21 comentarios:

marcos dijo...

Nos salvaste de una grande maestro..

Digipalka dijo...

Definitivamente me salvaste la visa, que buen dato, mil gracias.

Mikelats dijo...

Me alegra mucho que haya servido a alguien.

Estos comentarios me animan a seguir con este tipo de entradas (error-solución).

Saludos.

Anónimo dijo...

sos un capppppooo loco, me salvaste a mi tambien!!

Anónimo dijo...

ese recoveryª!!

Anónimo dijo...

Gracias por este paso a paso, pero me ha sucedido 3 veces en una semana, cual es la solución permanente?
Es falla des hardware?
En los log de windows no hay nada al respecto.
Mi base esta por 2GB, alguna restriccion, o seteo de manejo de RAM, o algo asi?
JC

Mikelats dijo...

Perdón por el retraso, no había visto el mail que avisaba del comentario.

Además de los logs de Windows tienes que mirar en los logs de Oracle.

Busca errores Oracle en el fichero alert de Oracle. Suele tener como nombre alert_instancia.log

Donde he puesto "instancia" realmente va el nombre de tu propia instancia.

Para buscar en ese fichero errores Oracle busca el texto "ORA-".

De esta forma sabrás lo que está ocurriendo.

Saludos.

Anónimo dijo...

MUCHAS MUCHAS MUCHAS GRACIAS ME AYUDO DEMASIADO TU APUNTE.

Anónimo dijo...

me salvaste también, mi DB no arrancaba, gracias

Francisco dijo...

muchas gracias, me ayudó bastante.

Ing. Carlos Romero dijo...

necsito saber cual es la solucion para el error ora-01219 gracias

Ing. Carlos Romero dijo...

ya encontre la solucion iniciar sin nomount jejeje gracias de todas formas

Shely dijo...

Mil Gracias!!

MACZ dijo...

Gracias muy buen aporte..

Definitivamente me ahorraste mucho tiempo

Juan Castro dijo...

Gracias, me ayudo bastante, tu sabras como solucionar el problema de bad request del apex del oraclexe, tengo instalado el wampserver y tengo problemas con el puerto 8080, gracias.

Mikelats dijo...

Hola Juan,
¿Tienes el Oracle en otra máquina? Comprueba que la petición llega correctamente al listener. Puedes comprobar si deja rastro en listener.log.
Si no llega ¿Hay algún firewall intermedio? Igual el firewall de Windows está cortando la conexión.
Deshabilítalo para hacer una prueba.
¿Si intentas la conexión local en lugar de remota, funciona?
Comprueba el estado del listener (lsnrctl status).
Revisa también si está bien configurado esto.
Saludos,

David Wong Herrera dijo...

Estimado, yo tengo el mismo problema, tengo instalado el Oracle 10g, al intentar hacer lo que nos indicas me sale el error "ORA-01113: file 5 needs media recovery" y el error "ORA-01110: data file 5 = 'c:\Oracle\Product\10.2.0\ORADATA\ORCL\EXAMPLE01_DBF".
Ya si continuo al hacer shutdown immediate me sale el siguiente error "ORA-01109: database no open " Soy nuevo en esto y la verdad que ya me complique con los errores.

Desde ya te agradezco.

Anónimo dijo...

Muchas gracias me salvastes, tengo un examen de esto en unos dias!

Luis Diaz dijo...

Amigo tengo ese problema con el error 1033 aparentemente es un servicio que no levanta no entiendo como ingresar los comandos

Anónimo dijo...

Gracias

Anónimo dijo...

hola, tengo la solucion error-01033 ORA-01033 para oracle database 12c
no se si en las otras versiones funciona, es un problema de la Base de Datos de conexión o nombre de servicio
con sql plus entrar: /as sysdba, despues de conectar ingresas el comando
" alter pluggable databse pdborcl open ; " donde pdborcl es el nombre de servicio o BBDD de conexion
visitar este video, si teneis dudas y comentar, gracias.

https://www.youtube.com/watch?v=CTUej-zHYhc&feature=youtu.be