Error de Perl: warning: Setting locale failed al ejecutar ASMCMD
Como contaba en la entrada anterior «Error «clientSupportedOSCheck» al instalar Oracle en Red Hat 8«, me encuentro actualmente instalando nuevos clúster (GRID Infrastructure) donde posteriormente migraremos bases de datos en versión 19c que ahora mismo prestan servicio en otras distribuciones Linux o en Red Hat 7.
Me he encontrado con múltiples errores y problemas con estos nuevos servidores, y este que os cuento a continuación es otro de ellos.
Tampoco es un error como tal, es un warning. Pero es incómodo, que cada vez que ejecutas un comando o entras a la consola de ASMCMD, aparezcan esas líneas. Seguramente, de no haberlo corregido, más adelante me habría supuesto algún error o problema más grave.
El Error
El mensaje de salida es muy claro, pero al principio me costó un poco verlo
Estaba tratando de etiquetar e iniciar un disco en ASM. Lanzo el comando, y me devuelve unas cuantas líneas que no había visto anteriormente. Incluso llegué a pensar que no había ejecutado la acción de etiquetar e iniciar el disco, pero sí, mostró los mensajes, y completó la acción correctamente.
[root@servidor1 bin]# ./asmcmd afd_label GRID_DISK1 /dev/sdc --init
ASMCMD-9463: [/var/tmp/.oracle]
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Análisis del error
Vamos por partes.
Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "en_US.UTF-8"
Revisemos qué valores tenemos en estas variables.
[root@servidor1 tmp]# echo $LANGUAGE
[root@servidor1 tmp]# echo $LC_ALL
[root@servidor1 tmp]# echo $LANG
es_ES.UTF-8
En un primer vistazo pensé: Está correcto.
Las variables $LANGUAGE y $LC_ALL no contienen nada, están «unset». Por otro lado, la variable $LANG está seteada en español. Mi sistema está en español, he instalado el clúster con idioma español, y con esto no debería haber ningún problema. Incluso creo que al principio, ni me fijé que en el warning estaba pidiendo el idioma en_US.
Esto es un tema más del propio sistema operativo que de la base de datos. No recuerdo haber visto en los requisitos de instalación de Oracle 19c ni de GRID Infrastructure que el idioma Inglés tenga que estar instalado en el sistema operativo.
(Me gustaría darle las gracias a mi compi Pablo Barragán, que sé que me lee. Ha estado al pie del cañón con este y todos los contratiempos que me he encontrado en este clúster)
Analizamos otra línea del warning, y aquí, especial hincapié en la parte final.
are supported and installed on your system.
Empiezo a entender que el warning con el idioma no es por lo que esté cargado en la variable. Realmente se queja de que no está instalado en el sistema.
Causa del error
Vamos a comprobar en el sistema operativo que idiomas están instalados. Lo podemos consultar con el comando ‘locale -a’ o ‘localectl list-locales’
[root@servidor1 ~]# locale -a
C
C.utf8
es_AR
es_AR.utf8
es_BO
es_BO.utf8
es_CL
es_CL.utf8
es_CO
es_CO.utf8
es_CR
es_CR.utf8
es_CU
es_DO
es_DO.utf8
es_EC
es_EC.utf8
es_ES
es_ES@euro
es_ES.utf8
es_GT
es_GT.utf8
es_HN
es_HN.utf8
es_MX
es_MX.utf8
es_NI
es_NI.utf8
es_PA
es_PA.utf8
es_PE
es_PE.utf8
es_PR
es_PR.utf8
es_PY
es_PY.utf8
es_SV
es_SV.utf8
es_US
es_US.utf8
es_UY
es_UY.utf8
es_VE
es_VE.utf8
Como se puede ver claramente, no hay ningún idioma instalado que no sea español.
Solución
Instalemos el paquete correspondiente para que el idioma que nos solicita el warning de perl quede añadido en nuestro sistema operativo.
yum install glibc-langpack-en.x86_64
Tras la instalación, comprobamos de nuevo la lista de idiomas:
[root@servidor1 ~]# locale -a
C
C.utf8
en_AG
en_AU
en_AU.utf8
en_BW
en_BW.utf8
en_CA
en_CA.utf8
en_DK
en_DK.utf8
en_GB
en_GB.iso885915
en_GB.utf8
en_HK
en_HK.utf8
en_IE
en_IE@euro
en_IE.utf8
en_IL
en_IN
en_NG
en_NZ
en_NZ.utf8
en_PH
en_PH.utf8
en_SC.utf8
en_SG
en_SG.utf8
en_US
en_US@ampm
en_US.iso885915
en_US.utf8
en_US.utf8@ampm
en_ZA
en_ZA.utf8
en_ZM
en_ZW
en_ZW.utf8
es_AR
es_AR.utf8
es_BO
es_BO.utf8
es_CL
es_CL.utf8
es_CO
es_CO.utf8
es_CR
es_CR.utf8
es_CU
es_DO
es_DO.utf8
es_EC
es_EC.utf8
es_ES
es_ES@euro
es_ES.utf8
es_GT
es_GT.utf8
es_HN
es_HN.utf8
es_MX
es_MX.utf8
es_NI
es_NI.utf8
es_PA
es_PA.utf8
es_PE
es_PE.utf8
es_PR
es_PR.utf8
es_PY
es_PY.utf8
es_SV
es_SV.utf8
es_US
es_US.utf8
es_UY
es_UY.utf8
es_VE
es_VE.utf8
POSIX
Instalado el idioma, volvemos a realizar la misma acción del principio con otro disco
[root@servidor1 bin]# ./asmcmd afd_label GRID_DISK2 /dev/sdd --init
ASMCMD-9463: [/var/tmp/.oracle]
[root@servidor1 bin]#
¡Maravilloso! Pero solo a medias. Los errores de perl ya no aparecen, pero nos sigue mostrando una línea de error de ASMCMD.
Lo veremos en otro artículo. Es bastante extenso y merece dedicarle tiempo para conocer la solución correcta.