ORA-15025: could not open disk / ORA-27041: unable to open file

ORA-15025: could not open disk / ORA-27041: unable to open file

A la hora de realizar las distintas alertas de mantenimiento en una base de datos, se estaba repitiendo el siguiente error en el alertlog de manera diaria en una de las monitorizaciones que tengo activas

2024-09-16T23:32:43.966732+02:00
Errors in file /u01/app/oracle/diag/rdbms/xxxx/xxxxx/trace/xxxx_ora_76583.trc:
ORA-00202: control file: '+RECO/XXXXX/CONTROLFILE/current.256.1152553023'
ORA-15081: failed to submit an I/O operation to a disk
ORA-15062: ASM disk is globally closed
2024-09-16T23:32:44.320010+02:00
Errors in file /u01/app/oracle/diag/rdbms/xxxx/xxxxx/trace/xxxx_ora_76583.trc:
ORA-15025: could not open disk "/dev/RECODISK5"
ORA-27041: unable to open file
Linux-x86_64 Error: 13: Permission denied
Additional information: 3

Parece que todos los ORA% que aparecen ahí están relacionados, pero para asegurarnos vamos a mirar el trc.

Leyendo el trc vemos la siguiente información:

WARNING: failed to open a disk[/dev/RECODISK5]
ORA-15025: could not open disk "/dev/RECODISK5"
ORA-27041: unable to open file
Linux-x86_64 Error: 13: Permission denied
Additional information: 3
<error barrier> at 0x7ffd30ba9380 placed kfksubs.c@5299
kfk_debug_get_user_groups: uid:39123, euid:101, gid:1001, egid:1004
WARNING: disk locally closed resulting in I/O error [0x434c5344]
DDE rules only execution for: ORA 202

Permission denied“ para el usuario 39123, ¿Pero quien es ese usuario?

Para mirar quien es el usuario, tendremos que ir al fichero passwd, que ahí tenemos el usuario dados de alta y que tienen acceso a la máquina

[oracle@~]$ grep 39123 /etc/passwd
orarom:x:39123:1001::/home/orarom:/bin/bash

Un vez que sabemos quien es el usuario, miramos que grupos tiene asociado mediante el comando id.

[oracle@~]$ id orarom
uid=39123(orarom) gid=1001(oinstall) groups=1001(oinstall),1003(dba)

Ahí esta el problema, el usuario no esta dentro del grupo asmadmin. En una base de datos hay que tener en cuenta lo siguiente:

  • ASM home: propietario es grid:asmadmin

  • DB Home: propietario es oracle:oinstall

Editamos el fichero /etc/group para incluir el usuario orarom en el grupo asmadmin, quedando de la siguiente manera

[oracle@~]$ id orarom
uid=39123(orarom) gid=1001(oinstall) groups=1001(oinstall),1004(asmadmin),1003(dba)

Listo. Las alertas ya no aparecen en el alertlog. ¡Espero que os sirva!