/ HOWTO

Servidor Oracle en Docker.


Aunque pienso que cada año que pasa se una un poco menos, sigue siendo uno de los grandes motores de datos y teníamos que probarlo, hablamos de Oracle Database Server. En este caso de la versión reducida llamada XE corriendo con Ubuntu en un contenedor.

Es un servidor XE 11.2 (Express) y solo puede funcionar en un CORE, con 1 gb de RAM y hasta 11 gb de datos, una configuración que “ayuda” corriendo en Docker para no saturar los recursos del equipo real.

Bajamos una imágen preconfigurada muy completa y con varias opciones. Existen muchas en internet, pero nos quedamos con esta por las opciones admitidas.

# docker pull wnameless/oracle-xe-11g

La imágen ocupa 2.23 GB en disco, que no es poco.

# docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
wnameless/oracle-xe-11g        latest              f794779ccdb9        7 weeks ago         2.23GB

Arrancaremos un contenedor con varias opciones activadas, acceso por SSH (22), acceso al motor desde fuera (1521), permitiremos que se conecten al servidor desde otros equipos de la red, solicitará clave para gestionarlo, desactivamos el I/O Asincrónico de disco y activamos el usuario XDB.

# docker run -d --name ora11 -p 49160:22 -p 49161:1521  -p 8080:8080 \
-e ORACLE_ALLOW_REMOTE=true  \
-e ORACLE_PASSWORD_VERIFY=true \
-e ORACLE_DISABLE_ASYNCH_IO=true \
-e ORACLE_ENABLE_XDB=true \
wnameless/oracle-xe-11g

Verificamos los puertos abiertos.

# nmap 172.17.0.2

Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-28 09:09 CET
Nmap scan report for 172.17.0.2
Host is up (0.0000090s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
1521/tcp open  oracle
8080/tcp open  http-proxy
MAC Address: 02:42:AC:11:00:02 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.35 seconds

GRAFICO1: ora1

Nos conectamos mediante SSh y verificamos que estamos usando un Ubuntu Linux. (la clave de root es admin)

# ssh 172.17.0.2
The authenticity of host '172.17.0.2 (172.17.0.2)' can't be established.
root@172.17.0.2's password:

Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.9.65-1-MANJARO x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

Cambiamos la clave de root.

# passwd

Y actualizamos el sistema operativo

# apt upgrade
The following packages will be upgraded:
  gcc-5-base libdb5.3 libssl1.0.0 libstdc++6 libsystemd0 libudev1 openssl perl-base systemd systemd-sysv wget

Verificamos que está corriendo el Motor Oracle.

# ps -A | grep oracle
  152 ?        00:00:00 oracle
  154 ?        00:00:00 oracle
  156 ?        00:00:00 oracle
  160 ?        00:00:00 oracle
  162 ?        00:00:00 oracle
  164 ?        00:00:00 oracle
  166 ?        00:00:00 oracle
  168 ?        00:00:00 oracle
  170 ?        00:00:00 oracle
  172 ?        00:00:00 oracle
  174 ?        00:00:00 oracle
  176 ?        00:00:00 oracle
  178 ?        00:00:00 oracle
  180 ?        00:00:00 oracle
  182 ?        00:00:00 oracle
  184 ?        00:00:00 oracle
  186 ?        00:00:00 oracle
  188 ?        00:00:00 oracle
  190 ?        00:00:00 oracle
  192 ?        00:00:00 oracle
  200 ?        00:00:01 oracle
  202 ?        00:00:00 oracle
  218 ?        00:00:00 oracle
  228 ?        00:00:00 oracle
  230 ?        00:00:00 oracle
  736 ?        00:00:00 oracle
  740 ?        00:00:00 oracle

Ahora desde un navegador en nuestro equipo real

  http://172.17.0.2:8080/

Usuario y clave de la interfaz web: XDB / xdb.

Luego dentro para comunicarnos con el motor debemos usar Usuario y clave del motor: sys / oracle y system/oracle

Usamos DBeaver como cliente GUI para ver los objetos dentro del motor.

GRAFICO2: ora2

Desde nuestro equipo real podemos conectarnos al contenedor y luego al motor Oracle.

# ssh 172.17.0.2
root@172.17.0.2's password:
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.9.65-1-MANJARO x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
Last login: Tue Nov 28 08:11:21 2017 from 172.17.0.1
root@46a4d1de6867:~# sqlplus
SQL*Plus: Release 11.2.0.2.0 Production on Tue Nov 28 08:25:08 2017
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Enter user-name: system
Enter password:
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

Ahora creamos un tablespace con su correspondiente datafile. (10mb para pruebas)

SQL> create tablespace dockertips datafile 'datafile1.dbf' size 10M;
Tablespace created.

Creamos un nuevo usuario indicando su clave y el tablespace temporal.

SQL> create user dockeruser identified by user1234 temporary tablespace TEMP;
User created.

Le damos permisos de acceso al motor.

SQL> grant connect to dockeruser;
Grant succeeded.

GRAFICO3: ora3

Ahora definimos que su tablespace standard es dockertips, le damos permisos de uso en el tablespace y permisos de crear tablas.

SQL> alter user dockeruser default tablespace dockertips;
User altered.

SQL> alter user dockeruser quota unlimited on dockertips;
User altered.

SQL> grant create table to dockeruser;
Grant succeeded.

Ahora nos conectamos como el usuario “dockeruser”, creamos una tabla e insertamos un registro en ella.

# sqlplus dockeruser
SQL*Plus: Release 11.2.0.2.0 Production on Tue Nov 28 08:48:48 2017
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Enter password:
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL> create table t1 (id int, data varchar(20));
Table created.

SQL> insert into t1 values (1, 'abc');
1 row created.

SQL> select * from t1;
	ID DATA
---------- --------------------
	 1 abc

Aunque la performance no es la mejor, nos sirve para realizar pruebas de concepto, demos usando Oracle como motor de datos, probar scripts de actualización de datos, procesos batch…

GRAFICO4: ora4

Subscríbete y recibirás los últimos artículos semanalmente en tu email.