sábado, 18 de mayo de 2013

Oracle 11G XE en Debian Wheezy/Squeezy amd64 usando Alien [Actualizado]

Oracle XE es un potente gestor de base de datos de la empresa del mismo nombre. Aunque su relación con el mundo del software libre todavía es gris, muchas personas necesitan instalar este programa en sus servidores. Aquí una guía corta para tenerlo funcionando.

Lo primero es descargar los paquetes que se van a utilizar:
  • oracle-xe-11.2.0-1.0.x86_64.rpm
  • oracle-instantclient11.2-basiclite-11.2.0.3.0-1.x86_64.rpm
  • oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm
  • oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.x86_64.rpm
El servidor se puede encontrar en esta dirección, mientras que los paquetes cliente están en esta otra.

Hay que tener todos los paquetes en una carpeta, que sea ejecutable y con permisos de escritura para root. También hay que asegurarse de tener espacio suficiente para descomprimir y crear el paquete .deb. dentro del directorio usamos el siguiente comando alien -D --scripts *rpm de modo que todos los archivos .rpm sean convertidos a .deb.

Antes de instalar hay que asegurarse de tener la librería aio. Siguiedo las indicaciones de este blog vemos que libaio hace parte de las nuevas versiones de ia32libs, así que instalamos ese paquete y verificamos:
root@localhost# locate -i libaio
/lib/x86_64-linux-gnu/libaio.so.1
/lib/x86_64-linux-gnu/libaio.so.1.0.1
/lib32/libaio.so.1
/lib32/libaio.so.1.0.1
Si no las encuentran miren en la dirección del blog anterior. Ahí dan instrucciones para descargarla manualmente.

También hay que hacer un ajuste que Oracle espera de Redhat:
ln -s /usr/bin/awk /bin/awk

Ahora instalamos los archivos alienados:
dpkg -i *deb

Ahora debemos hacer unos cambios en la configuración del sistema. Según este otro blog y este otro debemos cambiar el enlace simbólico /dev/shm por un sistema de archivos real o aparecerá el error ORA-27101: shared memory realm does not exist. Para ello debemos averiguar cuánta RAM tiene nuestro equipo con el comando free -m que da el dato en MB. Si nos dice que la memoria RAM total es de 2048MB, por ejemplo:
free
             total       used       free     shared    buffers     cached
Mem:          2048       NNNN       NNNN        NNN     NNNN       NNNN
-/+ buffers/cache:       NNNN       NNNN
Swap:         NNNN        NNN       NNNN
Podemos escoger un valor menor que ese y convertirlo en el que usará nuestro espacio shm. Por ahora seguimos como dice el manual:
mkdir /dev/shm
mount -t tmpfs shmfs -o size=2048m /dev/shm
sysctl kernel.shmmax=1073741824
En esta última línea le decimos al sistema que establezca un valor de memoria compartida máxima un poco mayor que el estándar.

También hay que crear el directorio /var/lock/subsys, si es que no existe:
mkdir /var/lock/subsys

El cambio de shmmax se puede hacer permanente editando el archivo /etc/sysctl.d/60-oracle.conf, mientras que el cambio de /dev/shm se hace permanente creando un nuevo script de inicio del sistema en /etc/init.d/S01_load_shm y dándole permisos de ejecución:
### BEGIN INIT INFO
# Provides:          shm_load_PARA_ORACLE
# Required-Start:    $local_fs $syslog $time 
# Required-Stop:     $local_fs $syslog 
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Configura el entorno para Oracle XE
# Description:       Crea el directorio /var/lock/subsys y monta un sistema de archivos de memoria RAM para que Oracle XE pueda arrancar y recibir conexiones
### END INIT INFO

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
. /lib/lsb/init-functions

case "$1" in
start)
        mkdir /var/lock/subsys 2>/dev/null
        touch /var/lock/subsys/listener && log_success_msg "Created subsys listener file" || log_warning "Could not create /var/lock/subsys/listener file. Oracle will not listen for connections"
        rm /dev/shm 2>/dev/null && mkdir /dev/shm 2>/dev/null && mount -t tmpfs shmfs -o size=2048m /dev/shm 
        if [ $? -eq 0 ] 
        then
                log_success_msg "Succesfully created shm environment for Oracle"
                exit 0
        else
                log_failure_msg "Could not create shm environment for Oracle"
                exit 1
        fi
        ;;
stop)
        exit 0        ;;
*) 

        exit 1 
        ;;
esac 

Modificamos también el script de Oracle para que se ajuste al estándar LSB agregando las líneas siguientes justo después del #!/bin/bash:
### BEGIN INIT INFO
# Provides:          oracle-xe
# Required-Start:    shm_load_PARA_ORACLE
# Required-Stop:     shm_load_PARA_ORACLE
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Inicia la instancia de Oracle XE
# Description:       Crea en memoria la instancia de Oracle XE y prepara el entorno para recibir conexiones
### END INIT INFO

Ahora dejamos que el sistema se encargue de crear los enlaces simbólicos para que Oracle inicie al arrancar el sistema y ejecutamos la configuración:
insserv shm_load
insserv oracle-xe
/etc/init.d/oracle-xe configure

Aquí nos pedirá lo siguiente:
  • Un puerto HTTP válido para Oracle Application Express, mejor conocido como Apex
  • Un puerto para la escucha de la base de datos. El predeterminado es 1521 y recomiendo no cambiarlo a menos que tenga una necesidad especial de seguridad o de configuración
  • una contraseña para el usuario SYS y el usuario SYSTEM, las dos cuentas administrativas. Se pueden cambiar luego
  • Confirmar la contraseña anterior
  • Si se desea que la base de datos arranque con el sistema
Ahora se configuran las variables de entorno. Esto se puede hacer en /etc/bash.bashrc:
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
export ORACLE_SID=XE
export NLS_LANG=`$ORACLE_HOME/bin/nls_lang.sh`
export ORACLE_BASE=/u01/app/oracle
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib/oracle/11.2/client64/lib:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:$PATH

Arrancamos el servicio de Oracle:
service oracle-xe start

De ahí podemos ir a la página del Apex, entrando a http://localhost:8080/apex/apex_admin (cambiar 8080 por el puerto que haya configurado) en el navegador. El usuario es admin y la contraseña será la que se especificó al configurar Oracle.

Lo demás es cuestión de carpintería: crear un workspace, nuevos usuarios y schemas se hace a través de Apex. Importar archivos SQL se puede lograr con sqlplus64 en la línea de comandos.



No hay comentarios.:

Buscar entradas