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:

Instalacion básica para Oracle 11

Repasando la entrada
Creación de una plataforma de pruebas RAC con VirtualBox veo como partimos de la base de una instalación de linux ya hecha.

Hoy vamos a hacer una entrada rápida con los pasos y paquetes que hay que preparar para una instalación básica de Oracle en un Oracle Linux 6.

Partiremos de la base de que tenemos una instalación mínima.

Los pasos serán

Deshabilitar SELinux

Editaremos el fichero vi /etc/selinux/config
dejándolo como

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

Deshabilitar iptables y postfix

No necesitaremos estos servicios, por lo que podemos quitamos del arranque

root@plantilla rc3.d]# rm /etc/rc3.d/S08iptables 
rm: ¿borrar el enlace simbólico «/etc/rc3.d/S08iptables»? (s/n) s
[root@plantilla rc3.d]# rm /etc/rc3.d/S80postfix 
rm: ¿borrar el enlace simbólico «/etc/rc3.d/S80postfix»? (s/n) s

Actualizamos y metemos los paquetes básicos

Necesitaremos algunos paquetes para la BBDD, así pues, ejecutaremos

yum update 
yum install kernel-devel
yum  groupinstall "Development Tools"
yum install oracle-validated

Instalamos las X para los accesos remotos

Para poder lanzar las herramientas gráficas necesitaremos unos pocos paquetes,la manera mas sencilla de obtenerlos es con el paquete xeyes que es el testador definitivo de las Windows y aceptando las dependencias.

yum install xeyes xauth 

Instalamos Utilidades básicas

Hay una serie de utilidades que seguramente usaremos y que no estaban en la instalacion mínima, estas son

yum install unzip atop  yum-utils ntp parted  oracleasm-support kmod-oracleasm oracleasmlib oracleasm-`uname -r` 
yum install compat-libcap1 compat-libstdc++-33 sysstat libaio-devel ksh libaio bind-utils smartmontools cvuqdisk redhat-lsb-core

Con esto, tenemos un Oracle Linux instalado listo para servir de plantilla para la instalación de nuestra base de datos

Purgando diag con adrci

Hoy vamos a ver una entrada sencillita en la que haremos un bash-script que nos limpie de manera ordenada el contenido del diag

El comando ADRCi permite la ejecución de comandos batch bien sea mediante la cláusula exec o bien contenidos en un fichero de texto separados por punto y coma.
Lo que vamos ha hacer es ejecutar para cada uno de los homes del la base de datos, asm y listener, el comando purge para cada uno de los tipos de elementos que guarda el diagnostics_dest

En nuestro caso, usaremos el modo script pero podíamos haber puesto todos los comandos en una línea separada por puntos y coma y el funcionamiento sería el mismo.

El script que vacia el diagnostics_dest para todo lo anterior a X días es:

#!/bin/bash
#
# Script que purga del ADRCLI  para  $1 DIAS
#
#
#
#
export ORAENV_ASK=NO
. oraenv  1>/dev/null
# Salida de debug
DEBUG=0

 #Comprobamos que se ha llamado de manera correcta
if  [ $# -ne 1 ]; then
echo "Uso Purgar_logs DIAS "
exit 3;
fi

# Inicializamos valores para el script
export TEMPORAL=/var/tmp/purgar_temporal_$$.log
export DIAS=$(($1*1440))

## Comenzamos la ejecucion
if [ $DEBUG -eq 1 ]; then
        echo "DEBUG: ORACLE_BASE=$ORACLE_BASE"
        echo "DEBUG: TEMPORAL= ${TEMPORAL} "
        echo "DEBUG: Dias= $2   en min $DIAS"
fi
# Comenzamos las iteraciones
adrci_homes=( $(adrci exec="show homes" | grep -e rdbms -e asm -e tnslsnr))
   for adrci_home in ${adrci_homes[@]}
   do
          #Generamos el fichero de comandos
         echo "set home ${adrci_home} ;" > ${TEMPORAL}
         echo "echo \"Purgamos en  ${adrci_home} \""  >> ${TEMPORAL}
         echo "purge -age ${DIAS} -type ALERT ;" >> ${TEMPORAL}
         echo "purge -age ${DIAS} -type TRACE ;" >> ${TEMPORAL}
         echo "purge -age ${DIAS} -type INCIDENT ;" >> ${TEMPORAL}
         echo "purge -age ${DIAS} -type HM ;" >> ${TEMPORAL}
         echo "purge -age ${DIAS} -type  utscdmp;" >> ${TEMPORAL}
         echo "purge -age ${DIAS} -type  cdump;" >> ${TEMPORAL}
         echo "exit; " >> ${TEMPORAL}

       if [ $DEBUG -eq 1 ]; then
        echo "DEBUG: "
        echo "DEBUG:  adrci SCRIPT=${TEMPORAL}"
        echo "DEBUG: EL etemporal es "
        echo "DEBUG: -inicio temporal-"
         cat ${TEMPORAL}
         echo "DEBUG: -fin temporal-"
        fi
        adrci  SCRIPT=${TEMPORAL}
         rm ${TEMPORAL}
    done #Fin del bucle

Como véis, es extremadamente sencillo, y bastante mas limpio que hacer el borrado a mano

Limpiando kernels antiguos (vaciar /boot)

Hoy vamos a ver una entrada muy rápida sobre como vaciar el /boot en Oracle Linux.

A medida que vamos actualizando nuestro servidor puede darse el caso de que tengamos varias versiones antiguas del kernel y se nos llene la particion dedicada /boot
Como solucionamos esto?
Con una utilidad muy sencilla llamada package-cleanup

Si queremos mantener 2 kernels en el /boot solo habremos de ejeutar

[root@server ~]#  package-cleanup --oldkernels --count=2
--> Running transaction check
---> Package kernel.x86_64 0:2.6.32-504.1.3.el6 will be erased
--> Finished Dependency Resolution

Dependencies Resolved
.
.

Remove        1 Package(s)

Installed size: 124 M
Is this ok [y/N]: Y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Erasing    : kernel-2.6.32-504.1.3.el6.x86_64                                                                                                                                                                                          1/1
  Verifying  : kernel-2.6.32-504.1.3.el6.x86_64                                                                                                                                                                                          1/1

Removed:
  kernel.x86_64 0:2.6.32-504.1.3.el6

Complete!

Como véis, rápido y sencillo