ORA-15186: ASMLIB error function

Oracle Automatic Storage Management Storage Layers
Image by Fenng(dbanotes) via Flickr

ORA-15186: ASMLIB error function = [asm_open],  error = [1],  mesg = [Operation not permitted]

Una tarde en un cliente estabamos realizando una tarea de mantenimiento de los server de bases de datos. La tarea por si misma requeria agregar un disco al diskgroup y el reinicio del server por una actualizacion del firmware de las placas. Agrego el disco y procedo a bajar todo prolijamente todo ya que era una base en RAC.

$ srvctl stop database -d PROJV
$ srvctl stop asm -n srprod01
$ srvctl stop asm -n srprod02
$ srvctl stop nodeapps -n srprod01
$ srvctl stop nodeapps -n srprod02

Cuando finaliza el rebooteo observo que las instancias no levantaron.
La primer instancia que reviso es la de ASM para ver que ocurria y revisando el alert me encuentro con el error ORA-15186.

SQL> ALTER DISKGROUP ALL MOUNT
Wed Aug 12 16:00:20 2009
ORA-15186: ASMLIB error function = [asm_open],  error = [1],  mesg = [Operation not permitted]
Wed Aug 12 16:33:06 2009
ORA-15186: ASMLIB error function = [asm_open],  error = [1],  mesg = [Operation not permitted]
Wed Aug 12 16:33:17 2009
ORA-15186: ASMLIB error function = [asm_open],  error = [1],  mesg = [Operation not permitted]
Wed Aug 12 16:38:21 2009
SQL> ALTER DISKGROUP SRPROD_DG1 MOUNT
Wed Aug 12 16:38:21 2009
NOTE: cache registered group SRPROD_DG1 number=1 incarn=0x8c49b76f
Wed Aug 12 16:38:21 2009
ORA-15186: ASMLIB error function = [asm_open],  error = [1],  mesg = [Operation not permitted]
Wed Aug 12 16:38:21 2009
ERROR: no PST quorum in group 1: required 2, found 0
Wed Aug 12 16:38:21 2009
NOTE: cache dismounting group 1/0x8C49B76F (SRPROD_DG1)
NOTE: dbwr not being msg'd to dismount
ERROR: diskgroup SRPROD_DG1 was not mounted
Wed Aug 12 16:54:52 2009
SQL> alter diskgroup SRPROD_DG1 mount
Wed Aug 12 16:54:54 2009
NOTE: cache registered group SRPROD_DG1 number=1 incarn=0xc9e9b771
Wed Aug 12 16:54:54 2009
ORA-15186: ASMLIB error function = [asm_open],  error = [1],  mesg = [Operation not permitted]

Busco informacion en metalink y me encuentro con la nota 398622.1

La nota me informaba que este error ocurria generalmente ante dos eventos:

 1) Que el parametro asm_diskstring no este seteado.
 2) Que el aparmetro asm_diskstring fue seteado en un path donde no tenemos privilegios.

Generalmente , cuando trabajo con ASM en los clientes me encuentro con que los discos son provistos por LUNS, donde el kernel ve estas luns como dispositivos de blockes , no importa si es SATA, SCSI, etc. Esos dispositivos podemos encontrarlos en el /dev/mapper.

Por defecto este parametro no viene seteado, y utilizan el valor default ‘*’. Es asi que la instancia ASM busca en los directorios /dev/raw y /dev/oracleasm/disks. Si no existiese discos en esos paths o no tenemos privilegios, causa el error ORA-15186.

Revisando el parametro veo que no contiene nada, entonces aplico el seteo correspondiente.

alter system set asm_diskstring='/dev/oracleasm/disks/*' scope=both sid='*';

SQL>  show parameter asm_diskstring

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
asm_diskstring			     string	 /dev/oracleasm/disks/*

Bajo la instancia y la vuelvo a subir. Pero a pesar del seteo correcto el error seguia figurando en el alert.

Que podría estar ocurriendo ?

Sigo investigando en metalink y la nota 391136.1 me dice que el error ORA-15186 tambien aparece cuando agregamos un nuevo disco o una nueva configuracion en el archivo oracleasm fue realizada.

Las Causas ?

 1) El archivo /etc/sysconfig/oracleasm no esta configurado para multipathing
 2) El parametro asm_diskstring contiene el valor "/dev/raw/raw/"

La segunda opcion quedo toralmente descartada, pero al revisar el archivo /etc/sysconfig/oracleasm efectivamente no estaba configurado.
Es muy importante que cuando realizamos una instalacion , lo hagamos de la manera mas prolija posible, sigueindo las recomendacion de instalacion de los documentos oficiales de oracle y que documentemos. Por que este problema no aparecio hasta que se tuvo que reiniciar todo y en un ambiente productivo por mas que se haya planificado una ventana de mantenimiento, el tiempo apremia hasta en el minimo error.

Agrego la configuracion correspondiente a la caja de discos que poseemos, en este caso una EVA de HP.

# vi /etc/sysconfig/oracleasm

# ORACLEASM_SCANORDER: Matching patterns to order disk scanning
ORACLEASM_SCANORDER=dm

# ORACLEASM_SCANEXCLUDE: Matching patterns to exclude disks from scan
ORACLEASM_SCANEXCLUDE="sd"

Reinicio nuevamente la instancia para observar si el problema definitivamente se soluciono y efectivamente puedo abrir la instancia. Esto permitio montar los discos y a su vez abrir el resto de las instancias.

$ srvctl start asm -n srprod01
$ srvctl start asm -n srprod02
$ srvctl start database -d PROJV

Asi fue que di por finalizado el problema y pude retirarme tranquilo a estudiar, nos estamos viendo.