12 jul 2009

Preparación de RedHat Enterprise Linux 4 para instalar Oracle

En Internet pueden encontrar un montón de guías acerca de como instalar Oracle en Linux, entonces ¿para qué hacer otra más? pues simplemente para poner en un solo set de pasos, la que me ha resultado como mejor práctica para la implementación del motor de base de datos, a través de la experiencia práctica y la experimentación.

Como primer paso tendremos que tener un equipo (físico o virtual) con RedHat Enterprise Linux 4 instalado, la instalación de esta distribución está fuera del alcance de esta mini-guía, pero como referencia podemos decir que, básicamente necesitamos:

- Instalación mínima
- SWAP calculado de acuerdo a la siguiente lista:
  • RAM < 4gb =" 2*RAM
  • RAM >= 4GB < 8gb =" 1,5*RAM
  • RAM >= 8GB = RAM
- LVM como capa de soporte a los filesystems si es standalone (1 solo server), para clusters es tema de otra entrada.

Una vez que tenemos instalado el sistema, debemos hacer algunos ajustes.

Hostname: El hostname de la máquina debe estar asignado de forma estática. En el archivo /etc/hosts no debe estar asociado al localhost, es bastante común tener una entrada como la siguiente:

"127.0.0.1 localhost.localdomain localhost miservidor"

Esta debe quedar:

"127.0.0.1 localhost.localdomain localhost
1.2.3.4 miservidor.midominio.tld miservidor"

Respecto a la dirección IP, esta debe estar asignada de forma estática, Oracle no soporte configuraciones con DHCP

Paquetes del Sistema Operativo: Como se imaginarán Oracle tiene un set de pre-requisitos para la instalación del motor, pues bien, a través de la experimentación, he ido depurando un listado menor de paquetes, e incluyendo algunos extras a fin de hacer nuestras tareas administrativas un poco más simples.

Deben instalar:
  • cpp
  • gcc
  • gcc-c++
  • binutils
  • libstdc++
  • libstdc++-devel
  • compat-libstdc++-296
  • compat-libstdc++-33
  • make
  • pdksh
  • compat-db
  • sysstat
  • libaio
  • openmotif21
  • xorg-x11-xauth
  • strace (muy útil para hacer debug)
  • ntp (sincronización de tiempo)
  • popt (pre-requisito de ntp)
Parámetros de kernel

Los siguientes parámetros deben estar configurados como mínimo, todos están en la sintaxis que necesitan poner en el archivo /etc/sysctl.conf

kernel.shmmax = (RAM en bytes/2) - 1, en 32 bits que no exceda los 4GB - 1 bytes
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_max = 262144

Una vez modificados los parámetros en el archivo /etc/sysctl.conf, basta con ejecutar sysctl -p para activarlos. Cabe notar, que si algún parámetro de ese archivo es mayor a los anotados más arriba, se debe dejar el mayor.

Cuentas de usuario y grupos

Ahora debemos crear el grupo "dba", y el usuario "oracle". En los documentos de Oracle, se recomienda crear el grupo "oinstall" para ser dueño del inventario de software de Oracle, en la generalidad, no he visto instalaciones productivas donde se lleven a cabo más tareas que tener el motor de datos, por tanto el grupo "oinstall" se vuelve irrelevante.

Primero creamos el grupo con "groupadd dba", y luego el usuario oracle con "useradd -g dba oracle".

Límites para el usuario oracle

Debemos configurar los límites para el usuario oracle, para esto, modificamos el archivo /etc/security/limits.conf, y agregamos

oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384

8 jul 2009

Oracle Gridcontrol Agent y HP-UX

Durante la implantación de los agentes de GridControl (10.2.0.5) para HP-UX, se genera un script que participa de la secuencia de inicio y apagado del servidor.

Este script hace una llamada al script agentstup, el cual asume ciertas cosas que no son correctas en HP-UX, al parecer fue desarrollado en Linux y no se tomaron las precauciones necesarias para validar que funcionara en un ambiente HP-UX que no necesariamente tiene utilitarios de Linux instalados, como sudo o bash.

Luego de reiniciar el servidor, teniendo ya el agente instalado, notarán que aparece un mensaje diciendo que falló un servicio y debemos revisar /etc/rc.log. Al revisarlo, notaremos que el script de inicialización de los agentes de gridcontrol no se ejecutó con éxito.

Para reparar el script hay que hacer los siguientes cambios.

- Ir al ORACLE_HOME del agente, por ejemplo: /u01/app/oracle/product/11.1.0/agent10g
- Luego entrar al directorio install/unix/scripts
- Copiar el archivo agentstup (cp agentstup agentstup.orig)
- Realizar las siguientes ediciones:

* En la línea 7, cambiar
executingUser=$USER
por
executingUser=$LOGNAME


Puesto que el script es llamado desde /sbin/init.d/gcstartup vía "su", el usuario que está ejecutando el script no es almacenado en la variable $USER

* En la línea 8, cambiar
SU=/usr/local/bin/sudo

por
SU=/usr/bin/su


En HP-UX, "sudo" no es instalado por default, para tenerlo disponible se debe instalar HP-UX RBAC (Role-Based Access Control)

* En las líneas 20 y 27, cambiar
if [ $executingUser = $installUser ] ; then

por
if [ "$executingUser" = "$installUser" ] ; then


Sin encerrar las variables, no se efectua la comparación de forma efectiva.

* En la línea 23, cambiar
$SU -u $installUser $ORACLE_HOME/bin/emctl start agent

por
$SU - $installUser -c "$ORACLE_HOME/bin/emctl start agent"


De esta forma, utilizamos el comando "su" directamente, de forma análoga, se debe hacer el cambio en la línea 30, pero esta vez el parámetro será "stop".

Para probarlo ejecuten /sbin/init.d/gcstartup start o /sbin/init.d/gcstartup stop

Con esto, ahora tendremos un agente funcional luego del reinicio de los servidores.