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).
- Acceso a equipo Oracle 21c en Docker desde shell de host anfitrión y acceso a Oracle con SQL Plus.
- Crear tablespace para producción en Oracle 21c en Docker.
- Crear usuario Oracle para aplicaciones de producción.
- Crear tabla e insertar registros para probar usuario en Oracle con SQL Developer.
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:
- Instalar Docker Desktop en Windows mi primer contenedor Hola Mundo.
- Instalar Docker y Docker Compose en Linux Debian 11.
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:
1 |
docker ps |
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»:
1 |
docker exec -t -i bdproyectoaext /bin/bash |
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»):
1 |
export ORACLE_SID=ORCLCDB |
Iniciaremos la herramienta SQL Plus de Oracle, con el comando:
1 |
sqlplus /nolog |
Para conectar con la base de datos en modo SYSDBA (lo necesitaremos para crear usuarios y tablespaces), ejecutaremos el comando:
1 |
conn / as sysdba |
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:
1 |
select file_name from dba_data_files; |
Para Oracle 21c en Docker, por defecto, nos mostrará estos ficheros de datos (para los tablespaces de SYTEM, SYSAUX, UNDOTBS Y USERS):
1 2 3 4 |
/opt/oracle/oradata/ORCLCDB/system01.dbf /opt/oracle/oradata/ORCLCDB/sysaux01.dbf /opt/oracle/oradata/ORCLCDB/undotbs01.dbf /opt/oracle/oradata/ORCLCDB/users01.dbf |
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:
1 |
create tablespace facturacion datafile '/opt/oracle/oradata/ORCLCDB/facturacion01.dbf' size 100M autoextend on maxsize 2000M; |
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:
1 |
select file_name from dba_data_files; |
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:
1 |
alter session set "_ORACLE_SCRIPT" = true; |
Nos devolverá el mensaje:
Session altered.
Para crear el usuario «usrfacturas» en Oracle dockerizado, desde SQL Plus, ejecutaremos el siguiente comando:
1 |
create user usrfacturas identified by "aaaAAA999" default tablespace facturacion; |
Nos devolverá el mensaje:
User created.
Asignaremos permisos de uso del tablespace «facturacion»:
1 |
alter user usrfacturas quota unlimited on 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):
1 2 3 4 5 6 |
grant create session to usrfacturas; grant create table to usrfacturas; grant select any table to usrfacturas; grant update any table to usrfacturas; grant insert any table to usrfacturas; grant delete any table to usrfacturas; |
Desactivaremos el modo de ejecución de script para finalizar con:
1 |
alter session set "_ORACLE_SCRIPT" = false; |
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:
1 2 3 4 5 6 7 8 9 |
CREATE TABLE FACTURAS ( CODIGO INTEGER NOT NULL, CLIENTE VARCHAR2(150), FECHA DATE, IMPORTE DECIMAL(12,2), OBSERVACION VARCHAR(500) ); CREATE UNIQUE INDEX FACTURAS_CODIGO ON FACTURAS (CODIGO); |
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).