Actualmente, Docker es una herramienta necesaria para nuestros entornos para exponer servicios por medio de contenedores, hoy vamos a aprender como instalar Oracle 12c 12.1.0.2 SE sobre Docker en Ubuntu 20.04 LTS.
Requerimientos de instalación
- Sistema operativo Ubuntu 20.04 LTS
- Oracle 12c 12.1.0.2 lo puedes descargar desde Oracle Software Delivery, para esto necesitas crear una cuenta de Oracle que es completamente gratis, el paquete que debes de buscar es el siguiente.
Instalación de Docker
para la instalación de Docker te puedes guiar de la documentación oficial de Docker
Creación de imagen para Docker
Para iniciar la creación de Oracle 12c para Docker necesitamos acceder a nuestro servidor Ubuntu y clonar el siguiente repositorio, este repositorio contiene scripts para construir una imagen de Docker para correr una base de datos Oracle.
cd ~
git clone https://github.com/alexandevcwa/docker-images
Creación de imagen Docker
Al tener clonado el repositorio, debemos ir a la ruta siguiente del repositorio clonado.
cd ~/docker-images/OracleDatabase/SingleInstance/dockerfiles/
El directorio dickerfiles
contiene múltiples configuraciones para las diferentes versiones de base de datos Oracle.
ubuntu:~/docker-images/OracleDatabase/SingleInstance/dockerfiles$ ls
11.2.0.2 12.1.0.2 12.2.0.1 18.3.0
18.4.0 19.3.0 21.3.0 23.3.0
buildContainerImage.sh
Ahora vamos a acceder al directorio 12.1.0.2
donde vamos a mover los archivos de instalación de Oracle 12c 12.1.0.2 descargados anteriormente, tienen que ser 2 archivos descargados con los siguientes nombre, V77388-01_1of2.zip
y V77388-01_2of2.zip
en la versión Standard Edition 2 de Oracle 12c, a estos archivos se les debe de cambiar el nombre por los siguientes.
mv V77388-01_1of2.zip linuxamd64_12102_database_se2_1of2.zip
mv V77388-01_2of2.zip linuxamd64_12102_database_se2_2of2.zip
Ahora debemos de mover los archivos al directorio 12.1.0.2
mv linuxamd64_12102_database_se2_1of2.zip V77388-01_2of2.zip linuxamd64_12102_database_se2_2of2.zip ~/docker-images/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/
Ya con los archivos de instalación de la base de datos, el repositorio clonado y Docker Engine instalado en Ubuntu, debemos de construir la imagen corriendo el siguiente script buildContainerImage.sh
que está ubicado en la ruta ~/docker-images/OracleDatabase/SingleInstance/dockerfiles
sudo ./buildContainerImage.sh -d -v 12.1.0.2 -t oracle-12.1.0.2-se -s
Al finalizar el proceso de construcción de la imagen, debe de mostrar el siguiente mensaje.
#########################
DATABASE IS READY TO USE!
#########################
Ahora correremos una instancia de la imagen para construir el contenedor con el siguiente comando, para mayor descripción del comando y adaptarlo a tu entorno, visita el siguiente link
docker run -d --name oracle-12.1.0.2-se-db \
-p 1521:1521 -p 5500:5500 -p 2484:2484 \
--ulimit nofile=1024:65536 --ulimit nproc=2047:16384 \
--ulimit stack=10485760:33554432 --ulimit memlock=3221225472 \
-e ORACLE_SID=orcl -e ORACLE_PDB=orcrlpdb -e ORACLE_PWD=manager1 \
-e INIT_SGA_SIZE=2560M -e INIT_PGA_SIZE=2560M -e ORACLE_EDITION=standard \
-e ORACLE_CHARACTERSET=WE8MSWIN1252 -e ENABLE_ARCHIVELOG=false \
-e ENABLE_TCPS=false \
-v oracle-12.1.0.2-data/opt/oracle/oradata oracle-12.1.0.2-se:latest
Si deseas visualizar el proceso de construcción del contenedor, con el siguiente comando lo puedes ver.
docker longs -f <container_id>
Configuración de archivo de configuración init.ora
Para configurar el archivo de configuración init.ora
debemos de tener la herramienta vi
instalada en el contenedor, con el siguiente comando lo podremos hacer.
docker exec -it -u root <container_id> bash
yum install -y vi
Una vez instalada la herramienta, debemos de ir al directorio donde está ubicado el archivo de configuración y crear una copia del archivo con la siguiente nomenclatura init<nombre_instancia>.ora
cd /opt/oracle/product/12.1.0.2/dbhome_1/dbs
cp init.ora init<nombre_instancia>.ora
Una vez creada la copia del archivo de configuración, debemos acceder al archivo para editarlo con la siguiente configuración.
Esta configuración no es estándar, debes adaptarla a tus recursos del sistema y las necesidades del tamaño de tu base de datos
db_name='nombre_instancia'
*.db_unique_name='nombre_instancia'
processes = 150
audit_file_dest='/opt/oracle/admin/<NOMBRE_INSTANCIA>/adump'
audit_trail ='db'
SGA_TARGET=3G
PGA_AGGREGATE_TARGET=1G
db_block_size=8192
db_domain=''
db_recovery_file_dest='/opt/oracle/fast_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='/opt/oracle'
dispatchers='(PROTOCOL=TCP) (SERVICE=<NOMBRE_INSTANCIA>XDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
control_files = (/opt/oracle/oradata/ORCL/control01.ctl)
compatible ='12.1.0.2.0'
ENABLE_PLUGGABLE_DATABASE=TRUE
Con esta configuración la base de datos debería de arrancar sin problemas.
Errores comunes
- Puede ocurrir que al acceder por medio de
sqlplus
e iniciar la base de datos con startup, muestre un mensaje de tipoORA-01102: cannot mount database in EXCLUSIVE mode
, esto significa que existe ya una instancia de base de datos, para solucionar este error debemos de matar esa instancia de base de datos con el siguiente comando.
Comando para obtener los procesos
ps -ef | grep smon
Salida
[oracle@aff8acd3a125 dbs]$ ps -ef | grep smon
oracle 50 1 0 18:01 ? 00:00:00 ora_smon_ORCL
oracle 1679 1213 0 18:40 pts/0 00:00:00 grep --color=auto smon
Matar instancia de base de datos existente
kill <id_proceso>
Para corregir cualquier problema es recomendable reiniciar el contenedor completamente.
docker restart <container_id>
Verificar que el contenedor y la instancia de base de datos se inició correctamente
docker logs <container_id>
Top comments (0)