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.
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.
Probamos a desmontar y montar la base de datos y a ver si arranca de una vez:
SQL> startup mount -> OK
SQL> alter database open; -> Error ORA-03113: End-of-file on communication channel.
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.
Saludos.