viernes, 3 de mayo de 2013

ORA-01078 ORA-29701


Sintomas:

Al iniciar la instancia de ASM se producen los siguientes errores:
grid>sqlplus / as sysasm
SQL>startup;

ORA-01078: failure in processing system parameters
ORA-29701: unable to connect to Cluster Synchronization Service

Reproducción del problema:

Ambiente:          Base de datos 11.2.0.3 con ASM sobre OEL 6 64 bits.

ps -ef |grep pmon
grid      5893     1  0 11:36 ?        00:00:01 asm_pmon_+ASM
oracle    5973     1  0 11:36 ?        00:00:02 ora_pmon_orcl

oracle>sqlplus / as sysdba
SQL>shutdown immediate;

grid>sqlplus / as sysasm
SQL>shutdown immediate;

-Se reinicia el servidor
root>reboot -f

-post-reinicio los servicios no levantaron automaticamente
grid>sqlplus / as sysasm
SQL>startup;

ORA-01078: failure in processing system parameters
ORA-29701: unable to connect to Cluster Synchronization Service

Explicación:

El CRS tiene la capacidad de conocer el estado en el que los servicios (bd y asm) se encontraban al momento del reinicio, de tal manera que cuando el servidor se reinicie y vuelva a iniciar el CRS, dejará todos los servicios como estaban. Entonces cuando se desea levantar manualmente post-reinicio el servicio de ASM (sqlplus / as sysasm, startup) es cuando se producen los siguientes errores:

ORA-01078: failure in processing system parameters
ORA-29701: unable to connect to Cluster Synchronization Service

La solucion para este caso puntual sería iniciar asm con "srvctl" y con usuario oracle: srvctl start asm;
Más no con sqlplus.

Esto no deberia pasar si modificamos la  propiedad AUTO_START=always dentro del CRS, esto hará que aunque los servicios fueron encontrados abajo al bajar el CRS, los vuelva a levantar una vez iniciado nuevamente el CRS. El valor "always" no es el default de oracle, el default es "restart".

AUTO_START puede tomar uno de los siguientes valores:

always=siempre levantará los servicios
never= nunca levantará los servicios
restore=dejará los servicios en el estado en el que se encontraban antes del reinicio.

Para ver qué valor de AUTO_START tiene cada servicio, ejecutar el siguiente comando:
crsctl status resource ora.orcl.db -p | grep AUTO_START
crsctl status resource ora.asm -p | grep AUTO_START

Soluciones:

1. Dejar que el CRS baje todos los servicios (no bajarlos manualmente):

1.1 logearse con el usuario root
1.2 export ORACLE_HOME=<home_grid>
1.3 export PATH=$ORACLE_HOME/bin:$PATH
1.4 crsctl stop crs
1.5 reiniciar el servidor

2. Cambiar el parametro AUTO_START al valor always, de esta manera aunque se baje manualmente servicio por servicio, cuando reinicie el CRS volverá a levantar todos los servicios.

(Estos pasos solo los tendrán que realizar una vez)
2.1 logearse con el usuario grid
2.2 crsctl modify resource ora.asm -attr AUTO_START=always
2.3 crsctl modify resource ora.orcl.db -attr AUTO_START=always
Siempre que se reinicie el servidor, voverá a levantar todos los servicios.



2 comentarios:

  1. Estimado pero si instalaste un bd stand alone, y te aparece ese error que es mi caso que procedimiento debo seguir???

    ResponderEliminar
  2. Estimado José, podes seguir exactamente el mismo procedimiento que se expone en este articulo. Precisamente este problema me surgió en una BD Stand Alone. A partir de 11g con una instalación basado en roles (GI con usuario grid y BD con usuario oracle), este deberia de ser el procedimiento correcto.

    ResponderEliminar

Oracle ACE Director Award - Deiby Gómez

Thanks #OracleACE Program for this awesome certificate recognizing the work I have done in the community for the last year. Looking forwa...