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.