Instalacion de Oracle 26ai- Creacion de ASM

Seguimos con la seria de la instalación de un Oracle 26ai , ahora vamos a por el ASM

El appliance en el que estoy usando de laboratorio es bastante raquítico, con un pequeño disco de 100Gb, por lo que habra que apañarse con lo que tenemos,.
Mi configuracion de disco es :

[root@gigabyte u01]# fdisk -l
Disk /dev/sda: 111.79 GiB, 120034123776 bytes, 234441648 sectors
Disk model: KINGSTON SUV400S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x00fde38f

Device     Boot     Start       End   Sectors  Size Id Type
/dev/sda1  *         2048 156250111 156248064 74.5G 83 Linux
/dev/sda2       156250112 181415935  25165824   12G 82 Linux swap / Solaris

Asi que vamos a crear dos discos pequeños de 5 Gb que pondremos en /dev/sda3 y /dev/sda4 para poder hacer ver que tenemos un DATA y FRA , el disco quedará:

[root@gigabyte ~]# fdisk -l
Disk /dev/sda: 111.79 GiB, 120034123776 bytes, 234441648 sectors
Disk model: KINGSTON SUV400S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x00fde38f

Device     Boot     Start       End   Sectors  Size Id Type
/dev/sda1  *         2048 156250111 156248064 74.5G 83 Linux
/dev/sda2       156250112 181415935  25165824   12G 82 Linux swap / Solaris
/dev/sda3       181415936 191180799   9764864  4.7G 83 Linux
/dev/sda4       191180800 200945663   9764864  4.7G 83 Linux

Descargaremos el asmlib desde
https://www.oracle.com/linux/downloads/linux-asmlib-v9-downloads.html e instalaremos los paquetes.
Una vez instalados,configuraremos el orcleasm

[root@gigabyte ~]# oracleasm configure -i
Configuring the Oracle ASM system service.
This will configure the on-boot properties of the Oracle ASM system
service.  The following questions will determine whether the service
is started on boot and what permissions it will have.  The current
values will be shown in brackets ('[]').  Hitting  without
typing an answer will keep that current value.  Ctrl-C will abort.
Default user to own the ASM disk devices []: grid
Default group to own the ASM disk devices []: asmdba
Start Oracle ASM system service on boot (y/n) [y]: y
Scan for Oracle ASM disks when starting the oracleasm service (y/n) [y]: y
Maximum number of ASM disks that can be used on system [2048]:
Enable iofilter if kernel supports it (y/n) [y]: y
Writing Oracle ASM system service configuration: done

Configuration changes only come into effect after the Oracle ASM
system service is restarted.  Please run 'systemctl restart oracleasm'
after making changes.

WARNING: All of your Oracle and ASM instances must be stopped prior
to restarting the oracleasm service.

[root@gigabyte ~]# systemctl stop oracleasm
[root@gigabyte ~]# systemctl start oracleasm
[root@gigabyte ~]# systemctl status oracleasm
● oracleasm.service - Oracle ASM Service
     Loaded: loaded (/usr/lib/systemd/system/oracleasm.service; enabled; preset: disabled)
     Active: active (exited) since Wed 2026-01-28 17:06:33 CET; 4s ago
    Process: 5027 ExecStartPre=/usr/bin/udevadm settle -t 120 (code=exited, status=0/SUCCESS)
    Process: 5028 ExecStart=/usr/sbin/oracleasm.init start (code=exited, status=0/SUCCESS)
   Main PID: 5028 (code=exited, status=0/SUCCESS)
        CPU: 378ms

Jan 28 17:06:33 gigabyte.pamplona.name systemd[1]: Starting Oracle ASM Service...
Jan 28 17:06:33 gigabyte.pamplona.name oracleasm.init[5042]: Mounting oracleasm driver filesystem: Not applicable with UEK8
Jan 28 17:06:33 gigabyte.pamplona.name oracleasm.init[5053]: Reloading disk partitions: done
Jan 28 17:06:33 gigabyte.pamplona.name oracleasm.init[5053]: Cleaning any stale ASM disks...
Jan 28 17:06:33 gigabyte.pamplona.name oracleasm.init[5053]: Setting up iofilter map for ASM disks: done
Jan 28 17:06:33 gigabyte.pamplona.name oracleasm.init[5065]: Scanning system for ASM disks...
Jan 28 17:06:33 gigabyte.pamplona.name oracleasm.init[5081]: Disk scan successful
Jan 28 17:06:33 gigabyte.pamplona.name systemd[1]: Finished Oracle ASM Service.

Como formatear los discos

crearemos los discos, en mi caso, al ser un pequeño sistema de prueba,estos han de ser particiones en un disco, en el caso de produccion,creariamos una particion única para cada disco.

[root@gigabyte ~]# oracleasm  createdisk DATA01 /dev/sda3
Writing disk header: done
Instantiating disk: done
[root@gigabyte ~]# oracleasm  createdisk FRA01 /dev/sda4
Writing disk header: done
Instantiating disk: done

[root@gigabyte ~]# oracleasm  scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Setting up iofilter map for ASM disks: done
Scanning system for ASM disks...

[root@gigabyte ~]# oracleasm  listdisks
DATA01
FRA01

Evitar problemas con SElinux

Para evitar problemas en los siguientes pasos con con SeLinux, ejecutaremos :

semanage fcontext -a -e /bin /u01/app/grid/bin
semanage fcontext -a -e /lib /u01/app/grid/lib
semanage fcontext -a -e /etc /etc/oracle/scls_scr

Configurar el CRS/HAS

Una vez tenemos los discos creados, procederemos a configurar el CRS,para eso, como root
ejecutaremos:

[root@gigabyte ~]# export GI_HOME=/u01/app/grid
[root@gigabyte ~]#  $GI_HOME/perl/bin/perl -I $GI_HOME/perl/lib -I $GI_HOME/crs/install $GI_HOME/crs/install/roothas.pl
Using configuration parameter file: /u01/app/grid/crs/install/crsconfig_params
The log of current session can be found at:
  /u01/app/oracle/crsdata/gigabyte/crsconfig/roothas_2026-01-28_05-21-47PM.log
2026/01/28 17:21:52 CLSRSC-363: User ignored prerequisites during installation
LOCAL ADD MODE
Creating OCR keys for user 'grid', privgrp 'oinstall'..
Operation successful.
2026/01/28 17:23:12 CLSRSC-330: Adding Clusterware entries to file 'oracle-ohasd.service'

gigabyte     2026/01/28 17:25:07     /u01/app/oracle/crsdata/gigabyte/olr/backup_20260128_172507.olr     2107015493
2026/01/28 17:25:09 CLSRSC-327: Successfully configured Oracle Restart for a standalone server

configuracion de oracle net

Como usuario grid iremos a $ORACLE_HOME/network/admin y crearemos los ficheros
sqlnet.ora

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
DIAG_ADR_ENABLED=ON
SQLNET.EXPIRE_TIME= 10
SQLNET.INBOUND_CONNECT_TIMEOUT=60

listener.ora

LISTENER =
   (DESCRIPTION_LIST =
    (DESCRIPTION =
       (ADDRESS = (PROTOCOL = TCP)(HOST = gigabyte.pamplona.name)(PORT = 1521))
        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      )
   )
USE_SID_AS_SERVICE_LISTENER=ON
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON
VALID_NODE_CHECKING_REGISTRATION_LISTENER=ON
LOG_FILE_SIZE_LISTENER=50
LOG_FILE_NUM_LISTENER=365

Y despues, crearemos el servicio del listner

grid@gigabyte admin]$ $GI_HOME/bin/srvctl add listener -listener LISTENER -oraclehome  $GI_HOME

grid@gigabyte admin]$ $GI_HOME/bin/srvctl start listener

[grid@gigabyte admin]$ $GI_HOME/bin/crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER.lsnr
               ONLINE  ONLINE       gigabyte                 STABLE
ora.ons
               OFFLINE OFFLINE      gigabyte                 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
      1        OFFLINE OFFLINE                               STABLE
ora.diskmon
      1        OFFLINE OFFLINE                               STABLE
ora.evmd
      1        ONLINE  ONLINE       gigabyte                 STABLE
--------------------------------------------------------------------------------

creacion del ASM

Ahora crearemos el ASM con:

[grid@gigabyte admin]$ $GI_HOME/bin/asmca -silent \
      -configureASM \
      -sysAsmPassword CHANGE.me.26ai \
      -asmsnmpPassword CHANGE.me.26ai \
      -diskString "ORCL:*"  \
      -diskGroupName DATA \
      -disk "ORCL:DATA*" \
      -param ASM_POWER_LIMIT=1 \
      -param DIAGNOSTIC_DEST=$ORACLE_BASE \
      -param AUDIT_SYS_OPERATIONS=TRUE \
      -redundancy EXTERNAL



ASM has been created and started successfully.

[DBT-30001] Disk groups created successfully. Check /u01/app/oracle/cfgtoollogs/asmca/asmca-260128PM053656.log for details.

Luego, craremos los otros diskgroups al estilo de

$GI_HOME/bin/asmca -silent \
      -createDiskGroup \
      -sysAsmPassword CHANGE.me.26ai \
      -asmsnmpPassword CHANGE.me.26ai \
      -diskString "ORCL:*"  \
      -diskGroupName FRA \
      -disk "ORCL:FRA*" \
      -param ASM_POWER_LIMIT=1 \
      -param DIAGNOSTIC_DEST=$ORACLE_BASE \
      -param AUDIT_SYS_OPERATIONS=TRUE \
      -redundancy EXTERNAL
[DBT-30001] Disk groups created successfully. Check /u01/app/oracle/cfgtoollogs/asmca/asmca-260128PM053938.log for details.

Con esto, ya tendremos el asm creado e instalado en nuestra versio

[grid@gigabyte admin]$ crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
               ONLINE  ONLINE       gigabyte                 STABLE
ora.FRA.dg
               ONLINE  ONLINE       gigabyte                 STABLE
ora.LISTENER.lsnr
               ONLINE  ONLINE       gigabyte                 STABLE
ora.asm
               ONLINE  ONLINE       gigabyte                 Started,STABLE
ora.ons
               OFFLINE OFFLINE      gigabyte                 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
      1        ONLINE  ONLINE       gigabyte                 STABLE
ora.diskmon
      1        OFFLINE OFFLINE                               STABLE
ora.evmd
      1        ONLINE  ONLINE       gigabyte                 STABLE
--------------------------------------------------------------------------------
[grid@gigabyte admin]$ asmcmd lsdg
State    Type    Rebal  Sector  Logical_Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Voting_files  Name
MOUNTED  EXTERN  N         512             512   4096  1048576      4768     4701                0            4701              0             N  DATA/
MOUNTED  EXTERN  N         512             512   4096  1048576      4768     4704                0            4704              0             N  FRA/

Siguiente paso.. creación de una base de datos 26ai

Procesos background de ACFS

Una vez tenemos un dispositivo bajo /dev/asm/ podemos trabajar con el como si de un disco normal fuera, pero, para poder trabajar en un sistema en cluster necesitaremos ACFS o una solución de terceros.

Procesos background de ACFS

Oracle lanza nuevos procesos para las instancias de ASM que tienen asociados filesystems ACFS
Estos procesos son :

00:00:04 asm_vdbg_+ASM1
00:00:00 asm_vmb0_+ASM1
00:00:00 asm_vbg0_+ASM1
00:00:43 asm_acfs_+ASM1

VDBG.- Volume driver background (asm_vdbg_+ASM1)

Este proceso es el encargado de pasarlas peticiones del ASM al driver de ASDM.
Es tan importante que si muriera de manera no planificada tiraría abajo la instancia ASM

VBGn Volume background process (asm_vmb0_+ASM1)

Es un pool de procesos worker que son los que se encargan de las peticiones entre ASM y ADVM
El nombre es muy similar al anterior,, pero el otro acaba en G y estos en numero

ACFS background process (asm_acfs_+ASM1)

Gestionan todas las transiciones del estado de los miembros del cluster en el ACFS

ACFS background process (asm_acfs_+ASM1)

Gestionan todas las transiciones del estado de los miembros del cluster en el ACFS

Volume Menbership background process (asm_vmb0+ASM1)

The Volume Membership Background processes (VMB0) plays the role of an I/O barrier and I/O fencing function. Interestingly, during an ASM instance failure, this process continues to exist until the ADVM driver has had a chance to write out pending I/O. +ASM_vmb_.trc

Instalación de ADVM

Los binarios necesarios para la generación de los volúmenes se encuentran bajo el árbol de directorios el $GRID_HOME.
Para comprobar el estado de los binarios (soportado,instalado,cargado) usaremos el binario $GRID_HOME/bin/acfsdriverstate

acfsdriverstate [-orahome ORACLE_HOME ]{ installed | loaded | version | supported }

En caso de tenerlo soportado e instalado, puede dares el caso de que no esté cargado, para eso se usa otro binario de la rama que es: $GRID_HOME/bin/acfsload

acfsload { start | stop  } [ -s ]

Donde la –s es el “silent mode”
No existe un /etc/init.d/acfsload por lo que para cargar el módulo en el arranque es necesario el crearlo y ejecutarlo.
Cuando ADVM está cargado, tenemos los siguientes módulos en el kernel

root@rac1 ~] lsmod |grep ora
oracleacfs           1990406  0 
oracleadvm            250040  0 
oracleoks             427672  2 oracleacfs,oracleadvm
oracleasm              54297  1 
  • oracleacfs: gestiona las opciones de sistema de ficheros l ACFS
  • oacleavdm: gestiona las opciones de interfaz del ADVM con el S.O
  • oracleoks: Gestiona la gestión de memoria , y la sincronización y bloqueos de disco

ADVM Creación de un volumen

Para la ceración de un volumen debemos de tener antes un DISKGROUP de ASM
Captura de pantalla 2015-11-21 a las 20.03.02

Vamos a crear un volumen de 500 M llamado ADVMFS1 en el diskgroup ASMFS

ASMCMD> volcreate -G ASMFS -s 500M ADVMFS1
ASMCMD> volinfo -a
Diskgroup Name: ASMFS
	 Volume Name: ADVMFS1
	 Volume Device: /dev/asm/advmfs1-491
	 State: ENABLED
	 Size (MB): 512
	 Resize Unit (MB): 32
	 Redundancy: UNPROT
	 Stripe Columns: 4
	 Stripe Width (K): 128
	 Usage: 
	 Mountpath:

Si miramos el dispositivo que nos ha dicho, vemos como si que existe. ¡!En ambos nodos!!

[grid@rac1 ~]$ ls -l /dev/asm/advmfs1-491
brwxrwx--- 1 root asmadmin 252, 251393 Aug 27 11:39 /dev/asm/advmfs1-491
[grid@rac2 ~]$ ls -l /dev/asm/advmfs1-491
brwxrwx--- 1 root asmadmin 252, 251393 Aug 27 11:39 /dev/asm/advmfs1-491

Borrado de un volumen

Se lleva a cabo mediante el comando voldelete , necesita el Diskgroup y el volumen

ASMCMD> volinfo -a
Diskgroup Name: ASMFS
    Volume Name: ADVMFS1
    Volume Device: /dev/asm/advmfs1-491
    State: ENABLED
    Size (MB): 512
    Resize Unit (MB): 32
    Redundancy: UNPROT
    Stripe Columns: 4
    Stripe Width (K): 128
    Usage: ACFS
    Mountpath: /app/oracle/acfsmounts/prueba/ 
ASMCMD> voldelete -G ASMFS ADVMFS1 

Al igual que en la creación, elimina el dispositivo en todos los equipos.

ADVM comandos

Los comandos de ADVM son bastante básicos y se ejecutan desde el ASMCMD (o desde el asmca)
Los comandos básicos son:

  • Volcreate: Creación de volumen
  • Voldelete: Elimina el volumen NO es necesario que esté deshabilitado
  • Voldisable: Lo habilita o deshabilita (debe de estar inactivo) “ in mounted disk groups”
  • Volenable: Hablita el dispositivo “ in mounted disk groups”
  • Volinfo: Ofrece información del volumen, con la opción –a da de todos.
  • Volresize: Redimensiona el volume, si está montado un filesystem oracleACFS no se puede hacer un resize, es necesario hacerlo con el comando propio de ACFS acfsutil size 
  • Volset: Sirve para dar/modificar atributos
    Captura de pantalla 2015-11-21 a las 20.05.23

  • Volstat: Da información del I/O del volumen

Script de arranque de ACFS

Hoy vamos a ver como llevar a cabo de manera automática la carga de los módulos de ACFS en un OEL6

Como vimos en la entrada anterior, no hay un script de arranque del ACFS, además de esto, los binarios están bajo la rama de directorios del GRID_HOME, por lo que es muy probable que no se encuentren si no se cargan las variables de entorno correctas.

Así pues, que vamos ha hacer nosotros es crear un script de inicio que arranque el ACFS.
El scritpt lo llamaremos acfsload y lo dejaremos bajo /etc/init.d.
El contenido será

#!/bin/sh

# chkconfig: 2345 30 21
# description: Load Oracle ACFS drivers at system boot
export GRID_HOME=/app/grid/11.2.0
export PATH=$PATH:$GRID_HOME/bin

case "$1" in
  start)
	$GRID_HOME/bin/acfsload start -s
	;;
 stop)
        $GRID_HOME/bin/acfsload stop -s
        ;;
status)
	echo " ACFS Soportado"
        $GRID_HOME/bin/acfsdriverstate  -orahome $GRID_HOME supported
	echo " ACFS Instalado"
        $GRID_HOME/bin/acfsdriverstate  -orahome $GRID_HOME installed
 	echo " ACFS Cargado"
        $GRID_HOME/bin/acfsdriverstate  -orahome $GRID_HOME loaded
       echo " ACFS Version"
        $GRID_HOME/bin/acfsdriverstate  -orahome $GRID_HOME version
	echo " Módulos cargados"
	lsmod|grep oracle
        ;;
 *)
	echo "Usage: $0 start|stop|status"
	                exit 1
	;;
esac

Y lo cargaremos :

 cd /etc/rc3.d/
 ln -s ../init.d/acfsload S99acfsload

Comprobación de la instalación de ACFS

Hoy vamos a ver la instalación de ACFS en Linux.

Lo primero de todo es que hay que tener en cuenta que ACFS no está soportada por defecto para todos los kernels, la manera de saber si tu kernel esta soportado por defecto o has de instalar algun tipo de parche es consultando la nota ACFS Support On OS Platforms (Certification Matrix). (Doc ID 1369107.1)

ACFS ( Oracle ASM Cluster File System ) es como el propio nombre indica una nueva funcionalidad de Oracle que nos va a permitir montar sistemas de ficheros sobre discos ASM. Esta nueva funcionalidad nos va a permitir entre otras cosas el beneficiarnos de todas las características de ASM ( redundancia,stripping,mirroring ) para los sistemas de ficheros compartidos en red.

La documentación de Oracle dice que está disponible para todos los sistemas operativos habituales (AIX,SOLARIS,Linux…) , pero nosotros nos centraremos en su instalación en Linux.

Lo primero que llama la atención es que la instalación no crea ficheros de arranque, incluso puede darse el caso de una instalación correcta del grid control en la que no se haya instalado el ADVM/ACFS y no lo sepamos.

La manera de comprobar el estado del ACFS es mediante el comando acfsdriverstate

[root@rac1 ~]# acfsdriverstate 
ACFS-9211: usage: acfsdriverstate [-h] [-orahome ] {installed | loaded | version | supported} [-s]

Ejecutaremos

En este caso podemos ver como si que tenemos un kernel soportado y lo tenemos cargado e instalado, pero ,veamos los siguientes casos con los que nos podemos encontrar:

ACFS no soportado

Puede darse el caso de que la version que tenemos de kernel no esté soportado para el ACFS.
En este caso obtendremos el error ACFS-9459

ACFS-9459: ADVM/ACFS is not supported on this OS version: '3.8.13-98.el6uek.x86_64'

Esto se puede probar también con el comando

[root@rac1 ~]# cd $GRID_HOME/bin/
[root@rac1 ~]# ./acfsdriverstate  -orahome $GRID_HOME supported

Y la solución a este problema será seguir las indicaciones de ACFS Support On OS Platforms (Certification Matrix). (Doc ID 1369107.1)

ACFS no instalado

Puede darse el caso de que tengamos una version correcta, pero no tengamos instalado los binarios en la distribución.

Esto podemos comprobarlo con

[root@rac1 ~]# cd $GRID_HOME/bin/
[root@rac1 ~]# ./acfsdriverstate  -orahome $GRID_HOME installed
ACFS-9204: false

En este caso deberemos de proceder a la instalacion mediante el comando:

[root@rac1 ~]# cd $GRID_HOME/bin/
./acfsload install

ACFS no cargado

Este es posiblemente el caso mas común que nos podamos encontrar, que es que esté instalado, pero que no haya arrancado con el sistema.

Esto lo comprobaremos con :

[root@rac1 ~]# cd $GRID_HOME/bin/
[root@rac1 ~]# ./acfsdriverstate  -orahome $GRID_HOME loaded
ACFS-9204: false

Y la carga es algo tan sencillo como el comando acfsload start -s
Podremos ver si está cargado mirando los moódulos del sistema operativo

root@rac1 ~]# lsmod |grep ora
oracleacfs           1990406  0 
oracleadvm            250040  0 
oracleoks             427672  2 oracleacfs,oracleadvm
oracleasm              54297  1 

Comprobacion de la version que tenemos

Si tenemos el AFS instalado y cargado, que menos que poder saber la version que tenemos, para ello usaremos la único flag que no hemos visto hasta ahora

[root@rac1 ~]# ./acfsdriverstate  -orahome $GRID_HOME version
ACFS-9325:     Driver OS kernel version = 2.6.32-279.el6.x86_64(x86_64).
ACFS-9326:     Driver Oracle version = 130707.

Hasta aquí lo más básico del ACFS, que es tenerlo listo en el sistema .

Más información en: