Cómo crear un tablespace con su fichero de datos (datafile) en el motor de base de datos Oracle 21c sobre Docker (dockerizado). Cómo crear un usuario para nuestras aplicaciones de producción y para que guarde los datos (tablas, vistas, etc.) en el tablespace creado. De esta forma los datos quedarán almacenados y persistentes en el host que alberga el contenedor Oracle con Docker.

Requisitos para crear tablespace y usuario en Oracle 21c sobre Docker (dockerizado)

Necesitaremos disponer de un equipo con Docker Desktop. En los siguientes enlaces mostramos tutoriales para desplegar Docker en Windows y Linux:

Para que los datos de Oracle en el contenedor sean persistentes (no se eliminen al detener el contenedor), seguiremos las instrucciones de este tutorial:

Y, por supuesto, dispondremos de un contenedor Docker iniciado con la imagen de Oracle 21c, con persistencia de datos y acceso externo activado. Indicamos todos los pasos en el tutorial anterior.

Deberemos conocer el nombre del contenedor desplegado en el equipo Linux o Windows host (anfitrión) con Docker Desktop, para poder acceder a él. Ejecutando el siguiente comando mostrará un listado de los contenedores iniciados:

En el tutorial usaremos el contenedor «bdproyectoaext» con Oracle 21c:

Acceso a equipo Oracle 21c en Docker desde shell de host anfitrión y acceso a Oracle con SQL Plus

Desde el equipo con Docker Desktop (bien sea Linux o Windows) en el que tengamos iniciado el contenedor con Oracle 21c, ejecutaremos el siguiente comando para acceder al shell del contenedor «bdproyectoaext»:

Una vez que hayamos accedido al shell del equipo contenedor, crearemos la variable de entorno ORACLE_SID, con el SID de la base de datos Oracle (deberemos conocerlo, el SID por defecto para Oracle 21c en Docker es «ORCLCDB»):

Iniciaremos la herramienta SQL Plus de Oracle, con el comando:

Para conectar con la base de datos en modo SYSDBA (lo necesitaremos para crear usuarios y tablespaces), ejecutaremos el comando:

Si la conexión es correcta mostrará el mensaje:

Connected.

Listaremos la ruta de los ficheros de datos actuales de Oracle para crear el fichero de datos de nuestro tablespace en la misma ubicación. Para ello, ejecutaremos la siguiente sentencia SQL en la línea de comandos de SQL Plus:

Para Oracle 21c en Docker, por defecto, nos mostrará estos ficheros de datos (para los tablespaces de SYTEM, SYSAUX, UNDOTBS Y USERS):

Crear tablespace para producción en Oracle 21c en Docker

En bases de datos Oracle lo recomendable es crear un tablespace para las aplicaciones de nuestra organización, en lugar de usar alguno de los tablespaces que se crean por defecto (SYSTEM, SYSAUX, UNDOTBS, USERS).

En este ejemplo, crearemos el tablespace «facturacion» para nuestra aplicación de Facturación. Le asignaremos un espacio de 100MB de partida y lo haremos autoextensible (se irá incrementando automáticamente cuando lo necesite), hasta un máximo de 2GB. Crearemos el tablespace en el fichero /opt/oracle/oradata/ORCLCDB/facturacion01.dbf:

Si la creación del tablespace es correcta, nos mostrará el mensaje:

Tablespace created.

Si volvemos a listar los ficheros de datos, con el comando:

Nos aparecerá el nuevo fichero de datos facturacion01.dbf:

Crear usuario Oracle para aplicaciones de producción

Para la conexión de las aplicaciones de la organización con el servidor de base de datos Oracle crearemos un usuario que, además, almacenará los datos en el tablespace creado anteriormente.

Para poder crear usuarios y asignarles roles, activaremos el modo de ejecución de scripts en el equipo Oracle con Docker. Para ello, desde SQL Plus (como hemos indicando anteriormente), conectados a Oracle, ejecutaremos el comando:

Nos devolverá el mensaje:

Session altered.

Para crear el usuario «usrfacturas» en Oracle dockerizado, desde SQL Plus, ejecutaremos el siguiente comando:

Nos devolverá el mensaje:

User created.

Asignaremos permisos de uso del tablespace «facturacion»:

En caso de no asignar el privilegio anterior, al insertar registros en una tabla puede que nos devuelva el siguiente error:

Se ha producido un error al guardar los cambios en la tabla «USRFACTURAS».»FACTURAS»:
Fila 1: ORA-01950: no existen privilegios en tablespace ‘FACTURACION’
ORA-06512: en línea 1

Le asignaremos los roles que queramos (de inicio de sesión, de creación de tablas, de select, insert, update y delete):

Desactivaremos el modo de ejecución de script para finalizar con:

Crear tabla e insertar registros para probar usuario en Oracle con SQL Developer

Conectaremos al servidor de Oracle 21c en Docker con SQL Developer, introduciendo los datos de conexión:

  • Usuario: en este caso «usrfacturas», el usuario creado anteriormente.
  • Contraseña: la contraseña asignada al usuario anterior.
  • Nombre del Host: si estamos ejecutando SQL Developer en el equipo host anfitrión con Docker Desktop, introduciremos aquí «localhost». En caso de estar en un equipo externo, introduciremos la IP o nombre DNS del equipo con Docker Desktop.
  • Puerto: el puerto asignado al contenedor Docker, en nuestro caso «1521».
  • SID: el SID de nuestra base de datos Oracle, en el caso de Oracle 21c en Docker, el de defecto «ORCLCDB».

Pulsando en «Probar» nos debe mostrar el mensaje «Estado: Correcto». De ser así, pulsaremos en «Conectar»:

Comprobaremos que el usuario «usrfacturas» no tiene tablas creadas aún:

Crearemos una tabla de ejemplo:

Insertaremos algunos registros en la tabla FACTURAS:

De esta forma, tendremos preparado Oracle 21c en Docker para trabajar en producción. Según las aplicaciones de que dispongamos y el volumen de datos, así como la seguridad, decidiremos crear un tablespace por cada aplicación, con su usuario correspondiente. O bien, un único tablespace con usuarios diferentes para cada aplicación (por seguridad).