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.