# Servidor Oracle DB + APEX + ORDS + JasperReports desde cero (Parte 3)

En la [publicación anterior](https://blog.jeanomobono.com/servidor-oracle-db-apex-ords-jasperreports-desde-cero-parte-2C) hicimos la instalación del servidor de aplicaciones Tomcat. En esta nueva publicación avanzaremos con la instalación de la base de datos, APEX y ORDS.

## Oracle XE 21c

La guía para realizar esta instalación se puede encontrar [aquí](https://docs.oracle.com/en/database/oracle/oracle-database/21/xeinl/installing-oracle-database-xe.html#GUID-46EA860A-AAC4-453F-8EEE-42CC55A4FAD5). También sugiero la lectura de este [artículo](https://oracle-base.com/articles/21c/oracle-db-21c-xe-rpm-installation-on-oracle-linux-7-and-8)

La primera tarea es descargar el archivo RPM de instalación de XE desde [aquí](https://www.oracle.com/database/technologies/xe-downloads.html) y colocar el archivo descargado en la carpeta `home` del usuario `root`. Allí procedemos a ejecutar el siguiente comando para realizar la instalación (este proceso se debe ejecutar como usuario root)

```
dnf -y localinstall oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm
```

El proceso de instalación creará de manera automática el usuario y grupos así como hará las adecuaciones necesarias a los parámetros del *kernel*.

Una vez terminado el proceso de instalación y continuando como el usuario root ejecutamos el siguiente comando

```
/etc/init.d/oracle-xe-21c configure
```

Se solicitarán las contraseñas para los usuarios `SYS`, `SYSTEM` y `PDBADMIN`. Una vez completada la instalación es posible bajar/subir la base de datos y el listener con los siguientes comandos (como root):

```
/etc/init.d/oracle-xe-21c start
/etc/init.d/oracle-xe-21c stop
```

## Oracle APEX 21.1

La guía oficial para la instalación de APEX se puede encontrar [aquí](https://docs.oracle.com/en/database/oracle/application-express/20.1/htmig/overview.html#GUID-DB8E4B2B-1AEB-4B76-BBA3-31C5876C3F14) sin embargo preferimos usar la versión resumida que se encuentra [aquí](https://oracle-base.com/articles/misc/oracle-application-express-apex-installation).

Creamos un nuevo tablespace para almacenar los objetos de APEX

```sql
CREATE TABLESPACE apex DATAFILE '/opt/oracle/oradata/XE/XEPDB1/apex01.dbf' SIZE 100M AUTOEXTEND ON NEXT 1M;
```

Luego procedemos con la instalación, ingresamos al directorio en el servidor donde descargamos y descomprimimos el software de APEX. Iniciamos sesión con el usuario oracle que fue creado durante la instalación de XE.

Una vez allí nos conectamos a la base de datos usando SQL\*Plus con el usuario SYS y ejecutamos el script de instalacion en el contenedor XEPDB1

```
cd /home/oracle/apex
sqlplus sys@localhost:1521/XEPDB1 as sysdba
```

(en este caso tuve que usar la sintaxis Easy Connect porque tengo otra BD en el servidor y SQL\*Plus trataba de conectarse a esa, en otras circunstancias debería ser tan simple como ejecutar `sqlplus / as sysdba`)

```sql
ALTER SESSION SET CONTAINER=XEPDB1;
@apexins.sql APEX APEX TEMP /i/
```

Una vez completada la instalación cerramos la sesión de SQL\*Plus y volvemos a ingresar con SYS para ejecutar unos comandos finales. Recomiendo cerrar SQL\*Plus al ejecutar cada comando y volver a ingresar, ya que cada script hace cambios en la configuración de la aplicación que podrían afectar la ejecución de los scripts.

Cambiar la contraseña del usuario ADMIN de APEX (la contraseña debe tener caracteres especiales o fallará la creación)

```sql
ALTER SESSION SET CONTAINER=XEPDB1;
@apexchpwd.sql
```

Crear los usuarios APEX_LISTENER y APEX_REST_PUBLIC_USER

```
ALTER SESSION SET CONTAINER=XEPDB1;
@apex_rest_config.sql
```

## ORDS

Para la instalación de ORDS tomaremos como base los pasos de esta [guía](https://oracle-base.com/articles/misc/oracle-rest-data-services-ords-installation-on-tomcat). Descargaremos la última versión de ORDS desde este [enlace](https://download.oracle.com/otn_software/java/ords/ords-latest.zip).

Antes de iniciar la instalación nos conectaremos a base de datos para asegurar que los usuarios de conexión de ORDS están desbloqueados y que conocemos sus contraseñas.

```sql
ALTER SESSION SET CONTAINER = XEPDB1;
ALTER USER APEX_LISTENER IDENTIFIED BY Password01 ACCOUNT UNLOCK;
ALTER USER APEX_PUBLIC_USER IDENTIFIED BY Password01 ACCOUNT UNLOCK;
ALTER USER APEX_REST_PUBLIC_USER IDENTIFIED BY Password01 ACCOUNT UNLOCK;
```

Iniciamos sesión con el usuario tomcat y ejecutamos los siguientes comandos para crear el directorio y descomprimir el archivo que descargamos

```
mkdir /u01/ords
cd /u01/ords
unzip ords-latest.zip
mkdir -p /u01/ords/conf
```

Crearemos un directorio para almacenar la configuración de ORDS

```
mkdir -p /u01/ords/conf
```

Editaremos el archivo `/u01/ords/params/ords_params.properties` para indicar los parametros de la instalación

```
db.hostname=orcl-server.localdomain
db.port=1521
db.servicename=XEPDB1
db.sid=
db.username=APEX_PUBLIC_USER
db.password=Password1
migrate.apex.rest=false
plsql.gateway.add=true
rest.services.apex.add=true
rest.services.ords.add=true
schema.tablespace.default=APEX
schema.tablespace.temp=TEMP
standalone.mode=false
user.tablespace.default=APEX
user.tablespace.temp=TEMP
user.apex.listener.password=Password1
user.apex.restpublic.password=Password1
user.public.password=Password1
sys.user=SYS
sys.password=Password
restEnabledSql.active=true
feature.sdw=true
database.api.enabled=true
```

Indicamos la ubicación del directorio de configuración

```
$JAVA_HOME/bin/java -jar ords.war configdir /u01/ords/conf/
```

Iniciamos el proceso de instalación:

```
$JAVA_HOME/bin/java -jar ords.war
```

Realizamos el despliegue al servidor Tomcat

```bash
mkdir $CATALINA_BASE/webapps/i/
cp -R /tmp/apex/images/* $CATALINA_BASE/webapps/i/
cd /u01/ords
cp ords.war $CATALINA_BASE/webapps/
```

Iniciamos el servicio Tomcat en caso que este detenido. Si todo está bien deberíamos poder ingresar a APEX en `http://ip-servidor:8080/ords`.


![Oracle APEX - Sign In.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1664843929259/Zp3GIXfNf.png align="left")

En la próxima publicación culminaremos con la instalación de la integración con JasperReports.
