Instalando Oracle 11g R2 en Debian 7 Wheezy

Oracle Preguntadlo por ahí y, posiblemente, cualquier administrador de sistemas coincidirá conmigo en que una instalación de Oracle en Linux es una de las cosas más desagradables e ingratasque puedes querer hacer en estos temas. Máxime si pretendes realizarla en una distribución de Linux no soportada directamente por Oracle (Solaris, Red Hat, Suse y alguna mas…). Pero de vez en cuando toca hacerla, que remedio. En esta entrada vamos a ver de forma guiada y paso a paso una instalación de Oracle 11g R2 (11.2.0.1.0) en una Debian Wheezy (7.7) de 32 bits (haciendo pequeñas anotaciones para que también sirva para una de 64) de forma tan «masticada» que es imposible que te falle nada. ¡Manos a la obra!

Los requisitos hardware iniciales no son demasiado exigentes. Oracle funcionará sin problemas en una máquina con 1,5Gbytes de RAM y 20 Gbytes de disco duro (que son las características de la máquina virtual que voy a usar en este ejemplo). Pero cuidado: la partición de swap debería de ser de aproximadamente 1,5 veces el tamaño de la RAM (algo más de 2Gbytes en este caso), debemos de tener al menos 2Gbytes libres en el directorio /tmp durante el proceso de instalación y los binarios de Oracle ocuparan en su ubicación final algo más de 5 Gbytes, así que si tu disco usa diferentes particiones para estos directorios has de cuidar que el reparto de espacio entre ellos sea el adecuado.

En cuanto al software, partiremos de una Debian recien instalada y sólo con el sistema base aunque, durante el proceso, instalaremos algunos paquetes adicionales y un entorno de ventanas ligero para realizar la instalación desde un entorno gráfico.

Empezaremos por instalar los paquetes de dependencias necesarias que son estos:

apt-get install build-essential sysstat unzip libstdc++5 pdksh numactl expat libaio-dev  unixodbc-dev  lesstif2-dev elfutils libelf-dev

Además, como acabamos de decir instalaremos un entorno de ventanas ligero para realizar la instalación desde el entorno gráfico y un navegador para posteriormente poder acceder a la consola de administración:

apt-get install xfce4 chromium

Vamos ahora a modificar algunos de los parámetros de configuración del kernel editando el fichero /etc/sysctl.conf y añadiendo al final del mismo las siguientes líneas:

kernel.shmmax=536870912
kernel.shmall=2097152
fs.file-max=6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
fs.aio-max-nr = 1048576
kernel.sem = 250 32000 100 128

Para que tomen efecto las modificaciones en este fichero sin necesidad de reiniciar ejecutamos ahora lo siguiente:

sysctl -p

El instalador de Oracle también nos pedirá que lo ejecutemos desde un runlevel entre el 3 y el 5 mientras que Debian usar el 2 por defecto. Para evitar esta advertencia editaremos el fichero /etc/inittab y, en una de las primeras líneas, hacemos el cambio para usar, por ejemplo, el 3:

id:3:initdefault:

Para modificarlo también en la sesión actual sin necesidad de reiniciar ejecutamos lo siguiente:

telinit 3

Y ahora una pequeña «trampa». Para que Oracle no se de cuenta demasiado de que estamos haciendo la instalación en una distribución no soportada crearemos unos enlaces en el sistema de ficheros de forma que se encuentre determinados archivos y librerías donde espearía encontrarselos si la instalación se estuviera realizando, por ejemplo, en una Red Hat:

ln -s /usr/bin/basename /bin/basename
ln -s /usr/bin/awk /bin/awk
ln -s /usr/lib/i386-linux-gnu/libpthread_nonshared.a /usr/lib
ln -s /usr/lib/i386-linux-gnu/libc_nonshared.a /usr/lib
ln -s /lib/i386-linux-gnu/libgcc_s.so.1 /lib
ln -s /usr/lib/i386-linux-gnu/libstdc++.so.6 /usr/lib
NOTA: Si estamos instalando sobre una Debian de 64 bits sustituiremos los últimos cuatro enlaces por los siguientes:

ln -s /usr/lib/x86_64-linux-gnu/libpthread_nonshared.a /usr/lib64/
ln -s /usr/lib/x86_64-linux-gnu/libc_nonshared.a /usr/lib64/
ln -s /lib/x86_64-linux-gnu/libgcc_s.so.1 /lib
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/lib64/

Vamos ahora a crear un usuario llamado oracle y un grupo llamado dba. Este será el usuario que usaremos para la instalación y posterior administración de nuestra base de datos. Para hacerlo ejecutamos lo siguiente:

groupadd dba
useradd -d /home/oracle -m -g dba -G dba -s /bin/bash oracle

Para asignarle contraseña a este nuevo usuario:

passwd oracle

Ahora creamos los directorios donde realizaremos nuestra instalación:

mkdir -p /opt/oracle/product/11.2.0.1
mkdir /opt/oraInventory
mkdir /opt/oradata

Y asignamos como propietario y grupo los que acabamos de crear unos instantes antes:

chown oracle:dba -R /opt/oracle /opt/oraInventory /opt/oradata

Alteramos ahora algunas de las limitaciones impuestas a este nuevo usuario que hemos creado editando el fichero /etc/security/limits.conf y añadiendo las siguientes líneas al final del mismo:

oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240

Y por último, en lo que a este nuevo usuario se refiere, editamos el fichero /home/oracle/.profile y añadimos sl final las siguientes variables de entorno:

export ORACLE_HOSTNAME=localhost
export ORACLE_OWNER=oracle
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=/opt/oracle/product/11.2.0.1
export ORACLE_UNQNAME=orcl
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/i386-linux-gnu:/bin/lib:/lib/i386-linux-gnu/:/usr/lib
NOTA: Si en lugar de estar haciendo la instalación sobre una debian de 32 bits lo estuviéramos haciendo sobre una de 64 tendríamos que modificar la última variable de entorno por la siguiente:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu:/bin/lib:/lib/x86_64-linux-gnu/:/usr/lib64

Y ya casi casi tenemos todos los preparativos listos. Ahora copiamos los archivos de instalación de Oracle de su página de Training Eval y los dejamos en el directorio /tmp de la máquina.

IMPORTANTE: ¡Asegúrate de descargarte los archivos adecuados! Recuerda que en este ejemplo estamos usando la versión 11.2.0.1.0 de 32 o de 64 bits.

Descomprimimos los dos archivos que nos hemos bajado sobre el directorio /home del usuario oracle:

unzip /tmp/linux_11gR2_database_1of2.zip -d /home/oracle
unzip /tmp/linux_11gR2_database_2of2.zip -d /home/oracle

Y luego borramos los .zip para que no nos ocupen espacio:

rm /tmp/linux_11gR2_database*.zip

Ahora ya si cambiamos al usuario oracle para realizar la instalación:

su - oracle

Y entramos en el entorno gráfico:

startx

Ya en las xfce y desde un terminal ejecutamos el instalador de Oracle:

/home/oracle/database/runInstaller

Tomaremos casi siempre los valores por defecto de la instalación a menos que te manejes bien con los conceptos de esta base de datos y sepas lo que estás haciendo. Además, muchos de los valores básicos los tomará de las variables de entorno que hemos creado anteriormente en el profile del usuario oracle.
En el tercer pantallazo tendremos que introducir la contraseña del administrador: la del usuario SYS. No la olvides aunque luego, en uno de los pasos finales, tendremos la opción de cambiarla y/o modificarla.

Oracle

Posteriormente en la comprobación de requisitos nos marcará varios fallos relativos a programas que parece no encontrar pero que, sin embargo, hemos instalado previamente. Esto es normal debido a las diferencias de rutas entre Debian y Red Hat. Estos deberían de ser los únicos errores que se nos presentarán si hemos hecho correctamente todo el proceso anterior. Nos aseguramos de ello y, si es así, marcamos el check de Ignorar todo y proseguimos la instalación.

Oracle

A mitad de la instalación nos aparecerá un error como el del pantallazo siguiente. No pulses ningún botón aún y no te pongas nervioso que tiene solución 😉

Oracle

Abrimos un terminal y editamos uno de los scripts que está usando el instalador. Este: /opt/oracle/product/11.2.0.1/sysman/lib/env_emagent.mk . En torno a la línea 2764 nos encontraremos algo así:

NMEFET_STACKLIBS_LINK=$(LDPATHFLAG)$(ORACLE_HOME)/$(LIBDIR)  $(LDPATHFLAG)$(PRODLIBHOME) $(LLIBNMEMSO) $(LLIBCORE) -Wl,-rpath,$(AGENTRPATH):$(JAVA_RTLINK_PATH) $(LIB_JVM_LINK) -Wl,--allow-shlib-undefined

Debemos de añadir el argumento -lnnz11 de forma que quede así:

NMEFET_STACKLIBS_LINK=$(LDPATHFLAG)$(ORACLE_HOME)/$(LIBDIR)  $(LDPATHFLAG)$(PRODLIBHOME) $(LLIBNMEMSO) $(LLIBCORE) -lnnz11 -Wl,-rpath,$(AGENTRPATH):$(JAVA_RTLINK_PATH) $(LIB_JVM_LINK) -Wl,--allow-shlib-undefined

Salvamos el fichero y, ahora así, volvemos a la ventana de advertencia anterior y pulsamos el botón de Reintentar. La instalación debería de proseguir ahora ya sin problemas.

NOTA: Gracias a Gaius por este «truco de magia» así como por otras importantes referencias que me han ayudado a confeccionar esta chuleta.

En unos minutos accederemos a la ventana final del instalador donde se nos mostrará un resumen y se nos permitirá modificar bloquear y desbloquear usuarios por defecto y/o modificar las contraseñas de los mismos:

Oracle
Oracle

Y, ahora ya si por último, el instalador nos pedirá que lancemos un par de scripts adicionales de forma manual como usuario root (recuerda que toda la instalación desde el entorno gráfico la estamos haciendo con el usuario oracle que hemos creado previamente).

Oracle

Abrimos otro terminal distinto al que estamos usando para el instalador y ejecutamos lo que se nos pide:

su
/opt/oraInventory/orainstRoot.sh
/opt/oracle/product/11.2.0.1/root.sh

Y ya hemos terminado. Ahora para acceder a la base de datos puedes usar SQL*Plus desde la línea de comandos o la consola de administración gráfica desde el navegador a través de la URL https://localhost:1158/em y usando la contraseña del usuario SYS (conectando como SYSDBA) que has proporcionado durante la instalación.

Oracle
Oracle

Unas notas para terminar. La instalación no configura a Oracle para que arranque por defecto tras un reinicio del sistema. Es decir, cada vez que hagamos un reboot de la máquina tendremos que volver a levantar los servicios manualmente. Tres son los componentes básicos a considerar: el llamado «listener» de Oracle (el proceso principal que proporciona la conectividad con las bases de datos), la consola de administración y la propia base de datos en si. Para levantar el primero tenemos disponible un script llamado dbstart en el directorio /opt/oracle/product/11.2.0.1/bin. Habiendo hecho logon con el usuario oracle ejecutamos lo siguiente:

dbstart $ORACLE_HOME

Y para detenerlo:

dbshut $ORACLE_HOME

Para arrancar y parar manualmente la consola de administración tenemos que abrir el script de arranque (en el fichero /opt/oracle/product/11.2.0.1/bin/emctl ) y modificar el shebang para indicar que usaremos bash, que es el shell por defecto que hemos elegido para el usuario oracle:

#!/bin/bash -f

Salvamos el fichero y, ahora si, para arrancar la consola usamos este comando:

emctl start dbconsole

Y para detenerla:

emctl stop dbconsole

Para levantar la base de datos podemos usar SQL*Plus como se nos indica aquí o entrar en el entorno gráfico y hacerlo desde la consola de administración. Si entramos en la consola nos advertirá de que la base de datos no está levantada:

Oracle

Pulsamos el botón de Startup (arriba a la derecha) y en la ventana resultante nos autenticamos usando las credenciales del usuario oracle del sistema operativo:

Oracle

Se nos pedirá confirmación de la operación y, si la damos, la base de datos se levantará y estará ya lista para su uso.

13 comentarios

  1. Hola me gustaria q me dijeran si alguien ha instalado oracle 11g en debian 8, he intentado hacerlo pero parece q me falta algo del wheezy, yo incluso le inclui el lesstif2-dev en el repo y aun da error en el proceso de instalarcion. Si alguien logra resolver esto por favor digame q hacer.

  2. Hola,
    Ante todo buen tutorial y muy claro.
    Pero a pasado un año, tengo Debian 8.2 (32 b) y al instalar surgen algunos problemas además de los conocidos.
    En la instalación de los paquetes no encuentra lesstif2-dev y al ejecutar la instlación oracle con runInstaller da un error del tipo:

    error in invoking target ‘links proc gen pcscfg’ of makefile.

    No se si conoces alguna solución.

    Gracias anticipadas y un saludo.

    1. jose: en el segundo trimestre volveré a hacer esta práctica con mis alumnos usando las versiones actuales. Para entonces haré una actualización. Si por el camino te enteras de como solucionar estas cosillas avisa y, si no, por aquí te espero 😉

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información

ACEPTAR
Aviso de cookies