¿Se dañaron los permisos de Oracle Home? Resuélvelo en menos que canta un gallo!

Me encontraba en plena configuración de unos Clusters Oracle 19c para un proyecto de upgrade de Oracle Database Server 11.2 a 19c, cuando al reiniciar uno de los computadores (node2) me percato que los servicios no estaban disponibles, sin razón aparente, ya que este Cluster en particular venía operando normalmente por varias semanas.

El problema

Como parte de los trabajos para copiar usuarios y grupos de Linux desde los Clusters 11.2 hacia estos nuevos Clusters 19c, por accidente se ejecutó una tarea que empezó a modificar el propietario y grupo de los archivos del filesystem /u01, en el que residen todos los binarios de Oracle Grid y Oracle Database Server.

Si bien el proceso fue cancelado casi de inmediato, el daño ya estaba hecho: los contenidos del Oracle Home de Grid 19c, así como los contenidos del Oracle Home de Oracle Database Server 19c y 11.2 estaban alterados y con ello el software Oracle quedó inoperativo.

[oracle@node2 ~]$ ls -la /u01/app/
total 4
drwxr-xr-x.  5 root      oinstall    52 Aug 24 12:46 .
drwxr-xr-x.  3 root      oinstall    17 Aug 24 12:35 ..
drwxr-xr-x.  3 haldaemon haldaemon   20 Aug 24 12:35 grid
drwxr-xr-x. 13 oracle    oinstall  4096 Aug 25 20:07 oracle
drwxrwx---.  5 oracle    oinstall    92 Sep 28 11:25 oraInventory

[oracle@node2 ~]$ ls -la /u01/app/oracle
total 8
drwxr-xr-x. 13 oracle    oinstall  4096 Aug 25 20:07 .
drwxr-xr-x.  5 root      oinstall    52 Aug 24 12:46 ..
drwxr-xr-x.  3 haldaemon haldaemon   18 Aug 24 16:50 11.2.0
drwxr-xr-x.  3 haldaemon haldaemon   18 Aug 24 12:35 19.0.0
drwxr-xr-x.  5 oracle    oinstall    45 Aug 24 19:14 admin
drwxr-x---.  3 oracle    oinstall    21 Aug 24 18:34 audit
drwxrwxr-x.  6 oracle    oinstall    60 Aug 24 18:12 cfgtoollogs

[oracle@node2 ~]$ crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4535: Cannot communicate with Cluster Ready Services
CRS-4530: Communications failure contacting Cluster Synchronization Services daemon
CRS-4534: Cannot communicate with Event Manager

Primer intento

Buscando en My Oracle Support se encuentra este documento:

1931142.1How to check and fix file permissions on Grid Infrastructure environment
Si bien solo aplica para el Oracle Home de Grid Infrastructure, por algo debemos empezar, así que seguimos el procedimiento allí indicado, empezando por detener los procesos de Grid y cambiar el propietario y grupo de los directorios a sus valores por defecto: oracle:oinstall.
[root@node2 ~]# crsctl stop crs -f
CRS-2791: Starting shutdown of Oracle High Availability Services-managed resources on 'node2'
CRS-2673: Attempting to stop 'ora.drivers.acfs' on 'node2'
CRS-2677: Stop of 'ora.drivers.acfs' on 'node2' succeeded
CRS-2793: Shutdown of Oracle High Availability Services-managed resources on 'node2' has completed
CRS-4133: Oracle High Availability Services has been stopped.

[root@node2 ~]# chown -R oracle:oinstall /u01/app

[root@node2 ~]# cd $ORACLE_HOME/crs/install/

[root@node2 install]# ./rootcrs.sh -init
Smartmatch is deprecated at /u01/app/grid/19.0.0/grid_1/crs/install/crsupgrade.pm line 6512.
Using configuration parameter file: /u01/app/grid/19.0.0/grid_1/crs/install/crsconfig_params
The log of current session can be found at:
  /u01/app/oracle/crsdata/node2/crsconfig/crsinit_node2_2024-09-26_03-45-33PM.log

Procedemos a validar el estado del Oracle Home de Grid:

[oracle@node2 ~]$ cluvfy comp software -n node2 -verbose
This software is "184" days old. It is a best practice to update the CRS home by downloading and applying the latest release update. Refer to MOS note 756671.1 for more details.

Performing following verification checks ...

  Software home: /u01/app/grid/19.0.0/grid_1 ...
  Node Name     Status                    Comment
  ------------  ------------------------  ------------------------
  node2         failed                    1256 files verified
  Software home: /u01/app/grid/19.0.0/grid_1 ...FAILED (PRVG-2031, PRVG-11960, PRVH-0147)

Verification of software was unsuccessful on all the specified nodes.

Failures were encountered during execution of CVU verification request "software".

Software home: /u01/app/grid/19.0.0/grid_1 ...FAILED
node2: PRVG-2031 : Owner of file
       "/u01/app/grid/19.0.0/grid_1/lib/liboramysql19.so" did not match the
       expected value on node "node2". [Expected = "root(0)" ; Found =
       "oracle(54321)"]
node2: PRVG-2031 : Owner of file "/u01/app/grid/19.0.0/grid_1/bin/expdp" did
       not match the expected value on node "node2". [Expected = "root(0)" ;
       Found = "oracle(54321)"]
node2: PRVG-2031 : Owner of file "/u01/app/grid/19.0.0/grid_1/bin/sqlldr" did
       not match the expected value on node "node2". [Expected = "root(0)" ;
       Found = "oracle(54321)"]
. . .
node2: PRVG-2031 : Owner of file "/u01/app/grid/19.0.0/grid_1/bin/okdstry" did
       not match the expected value on node "node2". [Expected = "root(0)" ;
       Found = "oracle(54321)"]
node2: PRVG-2031 : Owner of file "/u01/app/grid/19.0.0/grid_1/bin/okinit" did
       not match the expected value on node "node2". [Expected = "root(0)" ;
       Found = "oracle(54321)"]
node2: PRVG-2031 : Owner of file "/u01/app/grid/19.0.0/grid_1/bin/oklist" did
       not match the expected value on node "node2". [Expected = "root(0)" ;
       Found = "oracle(54321)"]
node2: PRVG-2031 : Owner of file
       "/u01/app/grid/19.0.0/grid_1/bin/oradaemonagent" did not match the
       expected value on node "node2". [Expected = "root(0)" ; Found =
       "oracle(54321)"]

La misma nota indica que si la ejecución de rootcrs.sh -init es insuficiente, se debe recurrir a un cambio manual apoyándose con la información contenida en los archivo crsconfig_fileperms y crsconfig_dirs, pero eso resulta largo y sujeto a errores.

Afortunadamente en My Oracle Support existe este documento:

1515018.1Script to capture and restore file permission in a directory (for eg. ORACLE_HOME)

En la nota se indica que el primer paso es descargar un programa en Perl, llamado permission.pl.

Este programa requiere como único parámetro el directorio que deseamos procesar, y como resultado generará un archivo con los comandos de Linux para reconstruir el propietario, grupo y permisos de todos y cada uno de los archivos de ese directorio!

Parece ser la solución definitiva, ¿pero será cierto? Veamos.

Segundo intento

Empezamos por ejecutar el programa permission.pl en el node1, ya que este no fue afectado y opera sin problemas. Ojo: se debe ejecutar como usuario root.
[root@node1 ~]# ./permission.pl /u01/app
Following log files are generated
logfile      : permission-Thu-Sep-26-16-58-50-2024
Command file : restore-perm-Thu-Sep-26-16-58-50-2024.cmd
Linecount : 147029

Culminó en menos de 10 segundos y el archivo «.cmd» efectivamente contiene los comandos prometidos.

[root@node1 ~]# more restore-perm-Thu-Sep-26-16-58-50-2024.cmd
chown  root:oinstall "/u01/app"
chmod  755 "/u01/app"
chown  root:oinstall "/u01/app/grid"
chmod  755 "/u01/app/grid"
chown  root:oinstall "/u01/app/grid/19.0.0"
chmod  755 "/u01/app/grid/19.0.0"
chown  root:oinstall "/u01/app/grid/19.0.0/grid_1"
chmod  755 "/u01/app/grid/19.0.0/grid_1"
chown  oracle:oinstall "/u01/app/grid/19.0.0/grid_1/env.ora"
chmod  644 "/u01/app/grid/19.0.0/grid_1/env.ora"
chown  root:oinstall "/u01/app/grid/19.0.0/grid_1/root.sh"
chmod  755 "/u01/app/grid/19.0.0/grid_1/root.sh"
chown  oracle:oinstall "/u01/app/grid/19.0.0/grid_1/welcome.html"
chmod  640 "/u01/app/grid/19.0.0/grid_1/welcome.html"
chown  oracle:oinstall "/u01/app/grid/19.0.0/grid_1/gridSetup.sh"
chmod  750 "/u01/app/grid/19.0.0/grid_1/gridSetup.sh"
chown  oracle:oinstall "/u01/app/grid/19.0.0/grid_1/runcluvfy.sh"
chmod  750 "/u01/app/grid/19.0.0/grid_1/runcluvfy.sh"
chown  oracle:oinstall "/u01/app/grid/19.0.0/grid_1/gridSetup.rsp"
chmod  644 "/u01/app/grid/19.0.0/grid_1/gridSetup.rsp"

Copiamos el archivo al computador afectado, pero debemos tomar en cuenta que el nombre del computador y el nombre de la instancia ASM son distintos, por los que debemos adecuarlos en el script antes de ejecutarlo.

[root@node1 ~]# sed -i 's/ASM1/ASM2/g' restore-perm-Thu-Sep-26-16-58-50-2024.cmd
[root@node1 ~]# sed -i 's/asm1/asm2/g' restore-perm-Thu-Sep-26-16-58-50-2024.cmd
[root@node1 ~]# sed -i 's/node1/node2/g' restore-perm-Thu-Sep-26-16-58-50-2024.cmd

[root@node1 ~]# sh restore-perm-Thu-Sep-26-16-58-50-2024.cmd
chown: cannot access ‘/u01/app/grid/19.0.0/grid_1/gpnp/gpnp_bcp__2024_8_24_175252’: No such file or directory
chmod: cannot access ‘/u01/app/grid/19.0.0/grid_1/gpnp/gpnp_bcp__2024_8_24_175252’: No such file or directory
chown: cannot access ‘/u01/app/grid/19.0.0/grid_1/gpnp/gpnp_bcp__2024_8_24_175252/stg__node2’: No such file or directory
chmod: cannot access ‘/u01/app/grid/19.0.0/grid_1/gpnp/gpnp_bcp__2024_8_24_175252/stg__node2’: No such file or directory
. . .
chmod: cannot access ‘/u01/app/grid/19.0.0/grid_1/cfgtoollogs/oui/GridSetupActions2024-08-24_05-56-29PM/time2024-08-24_05-56-29PM.log’: No such file or directory
chown: cannot access ‘/u01/app/grid/19.0.0/grid_1/crf/admin/run/crfmond/snode2.pid’: No such file or directory
chmod: cannot access ‘/u01/app/grid/19.0.0/grid_1/crf/admin/run/crfmond/snode2.pid’: No such file or directory

Luego de algunos minutos, finalmente culmina. Si bien se muestran varios mensajes de error, pueden ser ignorados por cuanto se tratan de archivos de logs y traces, que no afectan la operación del software Oracle.

Procedemos a validar nuevamente el estado del Oracle Home de Grid:

[oracle@node2 ~]$ cluvfy comp software -n node2 -verbose
This software is "184" days old. It is a best practice to update the CRS home by downloading and applying the latest release update. Refer to MOS note 756671.1 for more details.

Performing following verification checks ...

  Software home: /u01/app/grid/19.0.0/grid_1 ...
  Node Name     Status                    Comment
  ------------  ------------------------  ------------------------
  node2         passed                    1256 files verified
  Software home: /u01/app/grid/19.0.0/grid_1 ...PASSED

Verification of software was successful.

CVU operation performed:      software
Date:                         Sep 26, 2024 17:15:11 PM
CVU version:                  19.23.0.0.0 (032824x8664)
Clusterware version:          19.0.0.0.0
CVU home:                     /u01/app/grid/19.0.0/grid_1
Grid home:                    /u01/app/grid/19.0.0/grid_1
User:                         oracle
Operating system:             Linux5.4.17-2136.330.7.1.el7uek.x86_64

Excelente! Todo parece estar en orden, pero la prueba de fuego es ver si inicia el Clusterware y si levantan las bases de datos dbrac (Oracle Database 11.2) y orcl (Oracle Database 19c).

[root@node2 ~]# crsctl start crs
CRS-4123: Oracle High Availability Services has been started.

[root@node2 ~]# crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online

[root@node2 ~]# olsnodes -s
node1  Active
node2  Active
node3  Active

[root@node2 ~]# ps -ef | grep pmon
oracle   16125     1  0 17:24 ?        00:00:00 asm_pmon_+ASM2
oracle   16380     1  0 17:24 ?        00:00:00 ora_pmon_dbrac1_2
oracle   16503     1  0 17:24 ?        00:00:00 ora_pmon_orcl1_2

Confirmado: todo opera normalmente y podemos dar el caso por cerrado y continuar con la agenda de tareas del día.

Sí que nos dimos un susto, pero afortunadamente se encontró una solución que nos evitó tener que reinstalar el software, que dicho sea de paso no es algo tan complicado si estás acostumbrado a usar Golden Images.

¿Que no sabes qué son? Pues, ¡qué esperas para aprender sobre el tema! Tengo toda una serie de artículos que puedes empezar a leer ahora mismo.

¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues déjame tus comentarios o ¡contáctame ahora mismo!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Posts Relacionados

Aprenda a identificar la fila involucrada en la ocurrencia del evento de espera "enq: TX - row lock contention"
Aprenda a resolver el error CRS-2304 GPnP profile signature verification failed al iniciar una base de datos 11.2 en un cluster 19c.
Aprenda a mejorar la seguridad de sus aplicaciones usando Oracle Wallet / Secure External Password Store.

¿Necesitas Ayuda?

Completa estos datos y estaré en contacto a la brevedad.