Instalando APEX
Tags: apex, oracle, spanish
Published: 2021-02-16 21:31:03

En un artículo anterior expliqué como hacer la instalación de APEX en sus equipos locales usando VirtualBox y Vagrant, y esto funciona muy bien para hacer desarrollos sencillos de manera local o en ambientes de desarrollo. Sin embargo, lo más probable es que en ambientes productivos encuentren que APEX se encuentra desplegado sobre algún servidor de aplicaciones (como Tomcat o WebLogic) junto con [ORDS](https://www.oracle.com/database/technologies/appdev/rest.html). En esta publicación vamos a hacer la instalación de una instancia de Tomcat en una VM en la que también desplegaremos ORDS y lo configuraremos en una base de datos XE 18c en otra VM (tecnicamente es posible hacer la instalación en una sola VM, pero por temas de seguridad se separa siempre la base de datos del servidor de aplicaciones).
# Instalación de XE/APEX
Ya la instalación de XE la cubrimos en este [artículo](https://dev.to/jeanomobono/oracle-xe-con-vagrant-151b) sin embargo necesitamos agregar un paso más, que es la instalación de APEX.

Lo primero que haremos será [descargar](https://www.oracle.com/tools/downloads/apex-downloads.html) la última versión de APEX desde la página de Oracle; este archivo lo dejaremos en el directorio desde donde arrancamos la VM, ya que este directorio está visible para el sistema operativo de dicha VM en el directorio `/vagrant`.
```
 ~/vagrant/oracle/vagrant-projects/OracleDatabase/18.4.0-XE> ls -l 
total 160780
-rwxrwxr-x 1 jean jean 164603415 feb 11 17:04 apex_20.1.zip
drwxr-xr-x 2 jean jean      4096 jul 29  2020 ora-response
-rw-r--r-- 1 jean jean      5713 jul 29  2020 README.md
drwxr-xr-x 2 jean jean      4096 jul 29  2020 scripts
drwxr-xr-x 2 jean jean      4096 jul 29  2020 userscripts
-rw-r--r-- 1 jean jean      4826 feb 11 15:54 Vagrantfile
```

Asi se ve cuando vemos el directorio desde la VM (en mi caso tenía disponible el archivo de la versión 20.1, podría ser diferente cuando lean esta publicación)
```
~/vagrant/oracle/vagrant-projects/OracleDatabase/18.4.0-XE> vagrant ssh
Last login: Tue Feb 16 12:56:08 2021 from 10.0.2.2

Welcome to Oracle Linux Server release 7.9 (GNU/Linux 5.4.17-2036.102.0.2.el7uek.x86_64)

The Oracle Linux End-User License Agreement can be viewed here:

  * /usr/share/eula/eula.en_US

For additional packages, updates, documentation and community help, see:

  * https://yum.oracle.com/
  
[vagrant@localhost ~]$ cd /vagrant
[vagrant@localhost vagrant]$ ls -l
total 160780
-rwxrwxr-x. 1 vagrant vagrant 164603415 Feb 11 17:04 apex_20.1.zip
drwxr-xr-x. 1 vagrant vagrant      4096 Jul 29  2020 ora-response
-rw-r--r--. 1 vagrant vagrant      5713 Jul 29  2020 README.md
drwxr-xr-x. 1 vagrant vagrant      4096 Jul 29  2020 scripts
drwxr-xr-x. 1 vagrant vagrant      4096 Jul 29  2020 userscripts
-rw-r--r--. 1 vagrant vagrant      4826 Feb 11 15:54 Vagrantfile
```
Vamos a copiar al archivo que descargamos al directorio *home* del usuario oracle y a descomprimirlo
```sh
[vagrant@localhost vagrant]$ sudo su - oracle
Last login: Tue Feb 16 14:42:14 -06 2021 on pts/0
[oracle@localhost ~]$ cp /vagrant/apex_20.1.zip .
[oracle@localhost ~]$ unzip apex_20.1.zip 
```
Finalmente tendremos al menos estos archivos y directorios
```
[oracle@localhost ~]$ ls -l
total 160756
drwxr-xr-x. 6 oracle oinstall      4096 Apr 17  2020 apex
-rwxr-xr-x. 1 oracle oinstall 164603415 Feb 16 14:43 apex_20.1.zip
-rwxr--r--. 1 oracle oinstall       758 Feb 16 10:57 setPassword.sh
```
Ahora que ya tenemos el instalador en nuestra VM, procedamos a preparar la base de datos y a hacer la instalación. Lo primero será ir al directorio que acabamos de descomprimir y allí iniciaremos SQL\*Plus como SYSDBA
```
[oracle@localhost ~]$ cd apex
[oracle@localhost apex]$ sqlplus / as sysdba

SQL*Plus: Release 18.0.0.0.0 - Production on Tue Feb 16 14:47:38 2021
Version 18.4.0.0.0

Copyright (c) 1982, 2018, Oracle.  All rights reserved.


Connected to:
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0

SQL> 
```
Para mantener los objetos de APEX organizados en la base de datos, vamos a crear un nuevo tablespace donde almacenarlos (este paso es opcional, es posible almacenar los objetos de APEX en el tablespace SYSAUX).
```sql
SQL> ALTER SESSION SET CONTAINER=XEPDB1;
SQL> CREATE TABLESPACE apex DATAFILE '/opt/oracle/oradata/XE/XEPDB1/apex01.dbf' SIZE 100M AUTOEXTEND ON NEXT 1M;
```
El primer comando cambia el contenedor sobre el que voy a trabajar. Recuerden que a partir de 12c Oracle introdujo el concepto de [multitenant](https://docs.oracle.com/en/database/oracle/oracle-database/21/multi/introduction-to-the-multitenant-architecture.html#GUID-AB84D6C9-4BBE-4D36-992F-2BB85739329F) en la que es posible tener varias BD "virtuales" dentro de una gran instancia. Les recomiendo su lectura ya que será el estándar de las base de datos Oracle de ahora en adelante.

Seguidamente ejecutaremos el instalador de APEX
```
SQL> @apexins.sql APEX APEX TEMP /i/
```
Si decidieron no crear otra tablespace simplemente cambien APEX por SYSAUX o el nombre del tablespace que hayan creado. El proceso de instalación puede durar unos minutos dependiendo de la capacidad de su equipo.

Si finalmente la instalación no dio ningún error pueden proceder a crear el usuario ADMIN para administrar la instancia de APEX. Para esto ejecutaremos:
```
SQL> @apxchpwd.sql
```
El script les solicitará el nombre del usuario, correo y contraseña, esta última debe cumplir con los estándares básicos de seguridad o no será aceptada por la base de datos (al menos una mayúscula, números y simbolos especiales).

Y finalmente ejecutamos el script para la creacion de los usuarios APEX_LISTENER y APEX_REST_USER, estos son necesarios para la conexión entre ORDS y la base de datos. El script les solicitará las contraseñas para estos nuevos usuarios.
```
SQL> @apex_rest_config.sql
```
## Configuración del servidor de base de datos
Más arriba había indicado que hacía falta solo instalar APEX a la instalación de XE que ya teníamos, sin embargo nos falta un paso más, este tiene más que ver con la configuración de la red de las VM.

Esto lo explicaré en la próxima publicación de esta serie.