Instalación y configuración de base de datos oracle local

2021/05/04

Durante la creación de aplicaciones que utilicen una base de datos oracle, es cómodo tener una instancia local para realizar pruebas.

En el caso de que otra persona u equipo se encargue luego del mantenimiento de la aplicación, es necesario tener documentados los pasos a seguir para la instalación y configuración de la instancia local.

Aprovechando que oracle disponibilizó una container image de Oracle Database 12c en dockerhub, decidí crear dos archivos sql script para realizar la configuración y que estén autodocumentados:

Como se detalla más adelante, debe tenerse instalado podman y sqlcl.

A continuación los sql scripts con las instrucciones.

00-initialize-db.sql:

-- Pasos para descarga y configuración de base de datos oracle 12c local.
--
-- 1. Loguearse en [dockerhub](https://hub.docker.com/).
-- 2. Ir a la página de la imagen
--     [Oracle Database Enterprise Edition](https://hub.docker.com/_/oracle-database-enterprise-edition)
--     y presionar el botón *Proceed to Checkout* para llenar el formulario y
--     poder obtener acceso a la imagen luego de presionar el botón
--     *Get Content*.
-- 3. Loguearse a dockerhub con [podman](https://podman.io/) y descargar la
--     imagen:
--     ```
--     $ podman login docker.io
--     $ podman pull docker.io/store/oracle/database-enterprise:12.2.0.1-slim
--     ```
-- 4. Ejecutar la imagen
--     ```
--     $ podman run --detach --interactive --tty \
--         --publish 1521:1521/tcp --publish 5500:5500/tcp \
--         --env DB_MEMORY=1GB \
--         --name oracledb \
--         docker.io/store/oracle/database-enterprise:12.2.0.1-slim
--     ```
-- 5. Utilizando el cliente [sqlcl](https://www.oracle.com/database/technologies/appdev/sqlcl.html)
--     conectarse a la *multitenant container database (CDB)*
--     ```
--     $ sql sys/Oradoc_db1@localhost:1521:ORCLCDB as sysdba
--     ```
-- 6. Ejecutar las sentencias sql de este archivo para crear usuario
--     administrador para conectarse a la *pluggable database (PDB)* PDB1:
--     ```
--     SQL> @00-initialize-db.sql;
--     ```

-- *Nota*: La base de datos oracle está funcionando como una multitenant
-- container database (CDB).
-- Ver: https://docs.oracle.com/database/121/CNCPT/cdbovrvw.htm

-- TODO: para acceder a la PDB debe utilizarse `/ORCLPDB1.localdomain`; queda
--       pendiente la configuración para utilizar `:ORCLPDB1`

alter session set container=ORCLPDB1;

-- Crear usuario local utilizado para definir el esquema.
--
-- NOTE: Al crear las tablas deben darse permiso de acceso al usuario de la
--       aplicación.
create user myschema identified by "password";
grant all privileges to myschema;

-- Crear usuario local utilizado por la aplicación para conectarse
create user myapp identified by "password";
grant connect to myapp;

01-create-tables.sql:

-- Creación de tablas para aplicación `myapp` en esquema `myschema`
--
-- 1. Conectarse a la base de datos con usuario `myschema`
--     ```
--     $ sql myschema/password@localhost:1521/ORCLPDB1.localdomain
--     ```
-- 2. Ejecutar sentencias sql de este archivo
--     ```
--     SQL> @01-create-tables.sql;
--     ```

-- NOTE: Realizar la creación de objetos en una misma transacción
-- NOTE: Dar permisos de acceso y modificación al usuario `myapp`