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

Introducción al ADVM

ASM Dynamic volumen manager (ADVM) permite crear dispositivos para acceder a los sistemas de ficheros de Oracle.

Oracle Automatic Storage Management Cluster File System (Oracle ACFS) es un sistema de ficheros multiplataforma, escalable que extiende el ASM para ficheros de fuera de la base de datos.
http://docs.oracle.com/cd/E11882_01/server.112/e18951/asmfilesystem.htm#OSTMG94162
Captura de pantalla 2015-11-21 a las 19.49.43
Entre sus características están:

  • Requiere que el ASM tenga el atributo de ASM y ADVM a 11.2 o mayor
  • Permite redimensionamiento dinámico del FS
  • Maximiza el rendimiento mediante las ventajas de ASM
  • Mejora del IO mediante las ventajas del ASM
  • Mejora de seguridad ante fallos con las mejoras del asm
  • Desde la 11gr2 (11.2.0.3) permite backups de RMAN,ARCHIVELOG y DataPump
  • Oracle ACFS does not support files for the Oracle Grid Infrastructure home.
  • Oracle ACFS does not support Oracle Cluster Registry (OCR) and voting files.
  • Oracle recomienda que se monte bajo $ORACLE_BASE/acfsmounts
Publicado en 11g

Acciones comunes sobre el ASM

Hoy vamos a ver un ejemplo de los comando seas habituales que solemos hacer en un ASM

Nombre de los diskgroups

ASMCMD

ASMCMD> lsdg

SQLPLUS

SQL> column name format a20;
SQL>  select NAME,ALLOCATION_UNIT_SIZE,STATE,TYPE,TOTAL_MB,FREE_MB from v$asm_diskgroup
NAME           ALLOCATION_UNIT_SIZE STATE      TYPE     TOTAL_MB    FREE_MB
---------- -------------------- ---------- ------ ---------- ----------
ASMFS             1048576 	  MOUNTED    EXTERN    1019       403
DATA01_PRUEBA     1048576	  MOUNTED    EXTERN    2246       267
OCRVOTING         1048576	  MOUNTED    EXTERN    1019       623
REDO              1048576	  MOUNTED    EXTERN     499       404

Discos en un diskgroup

ASMCMD

ASMCMD> lsdsk -p -G DATA01_PRUEBA
Group_Num  Disk_Num      Incarn  Mount_Stat  Header_Stat  Mode_Stat  State   Path
       2         1  3915953579  CACHED      MEMBER       ONLINE     NORMAL  /dev/oracleasm/disks/ASM01
       2         0  3915953576  CACHED      MEMBER       ONLINE     NORMAL  /dev/oracleasm/disks/DATA_PRUEBA
ASMCMD> lsdsk -G DATA01_PRUEBA
Path
/dev/oracleasm/disks/ASM01
/dev/oracleasm/disks/DATA_PRUEBA

SQLPLUS

SQL> select PATH,STATE,NAME from v$asm_disk where name like '%PRUEBA%';
PATH                		    STATE       NAME
---------------------------------------- ---------- --------------------
/dev/oracleasm/disks/DATA_PRUEBA    NORMAL     DATA01_PRUEBA_0000
/dev/oracleasm/disks/ASM01          NORMAL     DATA01_PRUEBA_0001

Discos candidatos

ASMCMD

ASMCMD> lsdsk --candidate -p
Group_Num  Disk_Num      Incarn  Mount_Stat  Header_Stat  Mode_Stat  State   Path
       0         5  3915953571  CLOSED      FORMER       ONLINE     NORMAL  /dev/oracleasm/disks/ASM02
       0         4  3915953570  CLOSED      FORMER       ONLINE     NORMAL  /dev/oracleasm/disks/ASM03
       0         1  3915953567  CLOSED      PROVISIONED  ONLINE     NORMAL  /dev/oracleasm/disks/ASM04
       0         0  3915953566  CLOSED      PROVISIONED  ONLINE     NORMAL /dev/oracleasm/disks/ASM05

SQLPLUS

column state format a10;
column HEADER_STATUS format a20;
column path format a30;
SQL> select STATE,PATH,HEADER_STATUS from v$asm_disk where header_status !='MEMBER';
STATE    PATH                          	 HEADER_STATUS
-------- -------------------------------------------------- ------------
NORMAL    /dev/oracleasm/disks/ASM05               PROVISIONED
NORMAL    /dev/oracleasm/disks/ASM02               FORMER
NORMAL    /dev/oracleasm/disks/ASM03               FORMER
NORMAL    /dev/oracleasm/disks/ASM04               PROVISIONED

Eliminar un Diskgroup

Para poder eliminar un diskgroup este debe de estar montado.
En caso de querer eliminarlo desmontado deberemos de ponerel flag “forcé”

SQL> drop diskgroup FSARCHPRUEBA force including contents;
Diskgroup dropped.

Creación de Diskgroup

En este caso creamos un grupo de redundancia HIGH, por lo que necesitamos 3 failure groups
SQLPLUS

CREATE DISKGROUP DATA HIGH REDUNDANCY
 FAILGROUP controller1 DISK
   '/dev/oracleasm/disks/ASM01' NAME ASM01,
   '/dev/oracleasm/disks/ASM02' NAME ASM02
FAILGROUP controller2 DISK
   '/dev/oracleasm/disks/ASM03' NAME ASM03,
   '/dev/oracleasm/disks/ASM04' NAME ASM04
FAILGROUP controller3 DISK
   '/dev/oracleasm/disks/ASM05' NAME ASM05
 ATTRIBUTE 'au_size'='4M',
   'compatible.asm' = '11.2',
   'compatible.rdbms' = '11.2';

Ahora creamos un grupo con external

CREATE DISKGROUP REDO EXTERNAL REDUNDANCY
DISK  '/dev/oracleasm/disks/REDO01' NAME REDO01
ATTRIBUTE 'au_size'='4M',
  'compatible.asm' = '11.2',
  'compatible.rdbms' = '11.2';

ASMCMD
En asmcmd la creación del diskgroup se hace mediante el comando mkdg, pero los parámetros han de ser pasados en un fichero xml

Añadir un disco

ASMCMD (Se hace mediante la sintaxsis en xml)
Chdg fichero-cambios.xml
SQLPLUS

SQL> alter diskgroup DATA01_PRUEBA add disk '/dev/oracleasm/disks/ASM05';
Diskgroup altered.
SQL> select PATH,STATE,NAME from v$asm_disk where name like '%PRUEBA%';
PATH                        		  STATE    NAME
-------------------------------------------------- -------- ------------------------------
/dev/oracleasm/disks/DATA_PRUEBA        NORMAL   DATA01_PRUEBA_0000
/dev/oracleasm/disks/ASM05              NORMAL   DATA01_PRUEBA_0002
/dev/oracleasm/disks/ASM01              NORMAL   DATA01_PRUEBA_0001
Quitamos un disco 

ASMCMD (Se hace mediante la sintaxsis en xml)
chdg fichero-cambios.xml
SQLPLUS
Para eliminarse se usa la columna NAME y no PATH


SQL> alter diskgroup DATA01_PRUEBA drop disk DATA01_PRUEBA_0001;
Diskgroup altered.

Comprobar ficheros abiertos de en ASM

ASMCMD> lsof
DB_Name  Instance_Name  Path                                                     
+ASM     +ASM2          +ocrvoting.255.4294967295                                
asmvol   +ASM2          +asmfs/ADVMFS1.256.888838797                             
prueba   prueba2        +data01_prueba/prueba/controlfile/current.256.888313451  
prueba   prueba2        +data01_prueba/prueba/datafile/sysaux.260.888313489      
prueba   prueba2        +data01_prueba/prueba/datafile/system.259.888313463      
prueba   prueba2        +data01_prueba/prueba/datafile/undotbs1.261.888313519    
prueba   prueba2        +data01_prueba/prueba/datafile/undotbs2.267.888578953    
prueba   prueba2        +data01_prueba/prueba/datafile/users.263.888313549       
prueba   prueba2        +data01_prueba/prueba/onlinelog/group_1.257.888313455    
prueba   prueba2        +data01_prueba/prueba/onlinelog/group_2.258.888313459    
prueba   prueba2        +data01_prueba/prueba/onlinelog/group_3.264.888315899    
prueba   prueba2        +data01_prueba/prueba/onlinelog/group_4.265.888315903    
prueba   prueba2        +data01_prueba/prueba/tempfile/temp.262.888313531  

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: