Oracle 19c sobre CentOS8
Warning: This information may be outdated. Please note the date of the post.
Instalación de oracle en Centos8
Vamos a instalar oracle de la siguiente forma:
- Descargamos la siguiente versión de oracle en la página oficial, en este caso vamos a usar:
Oracle-database-ee-19c-1.0-1.x86_64
Necesitaremos registrarnos para descargarlo y aceptar los términos y condiciones.
- Enviamos el paquete .rpm ya descargado por scp a nuestro CentOS.
scp oracle-database-ee-19c-1.0-1.x86_64.rpm user@192.168.100.167:/home/user/oracle
- Ahora vamos a descargar las dependencias, o prerrequisistos que necesita el sistema para soportar el gestor de base de datos oracle.
sudo dnf install https://yum.oracle.com/repo/OracleLinux/OL8/baseos/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el8.x86_64.rpm
Como vemos carga las dependencias correctamente.
[centos@localhost ~]$ sudo dnf install https://yum.oracle.com/repo/OracleLinux/OL8/baseos/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el8.x86_64.rpm
Última comprobación de caducidad de metadatos hecha hace 0:22:22, el mié 31 mar 2021 16:20:42 CEST.
oracle-database-preinstall-19c-1.0-1.el8.x86_64.rpm 288 kB/s | 24 kB 00:00
Dependencias resueltas.
=========================================================================================================
Paquete Arq. Versión Repositorio Tam.
=========================================================================================================
Instalando:
oracle-database-preinstall-19c x86_64 1.0-1.el8 @commandline 24 k
Instalando dependencias:
glibc-devel x86_64 2.28-127.el8 baseos 1.0 M
glibc-headers x86_64 2.28-127.el8 baseos 475 k
kernel-headers x86_64 4.18.0-240.15.1.el8_3 baseos 5.6 M
ksh x86_64 20120801-254.el8 appstream 926 k
libaio-devel x86_64 0.3.112-1.el8 baseos 19 k
libnsl x86_64 2.28-127.el8 baseos 99 k
libstdc++-devel x86_64 8.3.1-5.1.el8 appstream 2.0 M
libxcrypt-devel x86_64 4.1.1-4.el8 baseos 25 k
lm_sensors-libs x86_64 3.4.0-21.20180522git70f7e08.el8 baseos 59 k
make x86_64 1:4.2.1-10.el8 baseos 498 k
sysstat x86_64 11.7.3-5.el8 appstream 425 k
Resumen de la transacción
=========================================================================================================
Instalar 12 Paquetes
Tamaño total: 11 M
Tamaño total de la descarga: 11 M
Tamaño instalado: 26 M
¿Está de acuerdo [s/N]?: s
- Instalamos el paquete .rpm de esta forma
sudo rpm -Uhv oracle-database-ee-19c-1.0-1.x86_64.rpm
Una vez terminada la Instalación, vamos a comprobar que efectivamente se ha creado el usuario oracle con el que vamos a trabajar y que pertenece a los grupos siguientes.
[centos@localhost oracle]$ grep 'oracle' /etc/passwd
oracle:x:54321:54321::/home/oracle:/bin/bash
[centos@localhost oracle]$ grep 'oracle' /etc/group
oinstall:x:54321:oracle
dba:x:54322:oracle
oper:x:54323:oracle
backupdba:x:54324:oracle
dgdba:x:54325:oracle
kmdba:x:54326:oracle
racdba:x:54330:oracle
[root@localhost ~]# su - oracle
[oracle@localhost ~]$ groups
oinstall dba oper backupdba dgdba kmdba racdba
Cambiamos la contraseña de oracle
passwd oracle
En principio vamos a ejecutar un script que viene por defecto al instalar oracle que crea una base de datos de prueba, lo hacemos de la siguiente forma.
Este proceso se demora unos minutos, hay que ser paciente ;)
[root@localhost ~]# /etc/init.d/oracledb_ORCLCDB-19c configure
Configuring Oracle Database ORCLCDB.
Preparar para funcionamiento de base de datos
8% finalizado
Copiando archivos de base de datos
31% finalizado
Creando e iniciando instancia Oracle
32% finalizado
36% finalizado
40% finalizado
43% finalizado
46% finalizado
Terminando creación de base de datos
51% finalizado
54% finalizado
Creando Bases de Datos de Conexión
58% finalizado
77% finalizado
Ejecutando acciones posteriores a la configuración
100% finalizado
Creación de la base de datos terminada. Consulte los archivos log de /opt/oracle/cfgtoollogs/dbca/ORCLCDB
para obtener más información.
Información de Base de Datos:
Nombre de la Base de Datos Global:ORCLCDB
Identificador del Sistema (SID):ORCLCDB
Para obtener información detallada, consulte el archivo log "/opt/oracle/cfgtoollogs/dbca/ORCLCDB/ORCLCDB.log".
Database configuration completed successfully. The passwords were auto generated, you must change them by connecting to the database using 'sqlplus / as sysdba' as the oracle user.
Para usar el intérprete de comandos mysqlplus necesitaremos tener configuradas las variables de entorno pertinentes para que su ejecución sea más fácil y rápida. Para ello modificamos el fichero de configuración .bash_profile desde el usuario ‘oracle’.
[oracle@localhost ~]$ nano .bash_profile
# Añadimos la siguiente información
umask 022
export ORACLE_SID=ORCLCDB
export ORACLE_BASE=/opt/oracle/oradata
export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
export PATH=$PATH:$ORACLE_HOME/bin
La activamos
[oracle@localhost ~]$ source .bash_profile
Ahora sí podemos acceder al intérprete
[oracle@localhost ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Apr 1 18:36:20 2021
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Conectado a:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL>
Crear usuario con contraseña
Se debe saber que desde la versión de Oracle 12c, hay un modo de instalación en el que se crea un CDB (contenedor) y varias PDB (Bases de datos conectables). Para crear un usuario en el contenedor tiene que tener la estructura ‘c##xxxxx’, estos usuarios no se suelen crear para tratar con la aplicación que vamos a desarrollar, son para gestionar el contenedor como tal, entre otras cosas.
Para crear una base de datos conectable podemos seguir los siguientes pasos:
- Primero consultamos de esta forma el path de la base de datos conectable que tenemos.
SQL> select FILE_NAME from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
/opt/oracle/oradata/ORCLCDB/system01.dbf
/opt/oracle/oradata/ORCLCDB/sysaux01.dbf
/opt/oracle/oradata/ORCLCDB/undotbs01.dbf
/opt/oracle/oradata/ORCLCDB/users01.dbf
- Ahora creamos con el siguiente comando una base de datos conectable de forma que le indicamos la ruta donde vamos a crearla/convertirla.
SQL> CREATE PLUGGABLE DATABASE academia ADMIN USER oracle IDENTIFIED BY oracle FILE_NAME_CONVERT=('/opt/oracle/oradata/ORCLCDB/','/opt/oracle/oradata/academia/');
Base de datos de conexion creada.
Una vez creada vamos conectarnos a ella de la siguiente forma, alterando la sesión entrando como administrador.
[oracle@localhost ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Apr 1 19:30:28 2021
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Conectado a:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> show con_name;
CON_NAME
------------------------------
CDB$ROOT
SQL> ALTER SESSION SET CONTAINER=academia
2 ;
Sesion modificada.
SQL> show con_name;
CON_NAME
------------------------------
ACADEMIA
SQL> select * from cat;
select * from cat
*
ERROR en linea 1:
ORA-01219: base de datos o base de datos de conexion no abierta: solo se
permiten consultas en tablas o vistas fijas
Como podemos ver no tenemos los permisos necesarios para crear tablas o hacer consultas. Pero en esta entrada no vamos hablar de ello.
Ahora si vamos a crear el usuario ‘celia’ con la contraseña ‘celia’. Con la estructura antes mencionada de forma que será un usuario que podamos usar de forma general. También le vamos a dar los privilegios necesarios.
SQL> CREATE USER c##celia IDENTIFIED BY celia;
Usuario creado.
SQL> GRANT ALL PRIVILEGES TO c##celia;
Concesion terminada correctamente.
Nos desconectamos y conectamos con nuestro usuario nuevo
SQL> connect c##celia
Introduzca la contrase?a:
Conectado.
Poblar la base de datos
Creamos unas tablas de prueba
CREATE TABLE alumnos (dni VARCHAR2(4),nombre VARCHAR2(10), CONSTRAINT pk_alumnos PRIMARY KEY (dni));
INSERT INTO alumnos (dni, nombre) VALUES('1111','Carlos');
INSERT INTO alumnos (dni, nombre) VALUES('2222','Celia');
INSERT INTO alumnos (dni, nombre) VALUES('3333','Lucía');
CREATE TABLE cursos (codigocurso VARCHAR2(2),nombrecurso VARCHAR2(5), CONSTRAINT pk_cursos PRIMARY KEY (codigocurso));
INSERT INTO cursos (codigocurso, nombrecurso) VALUES('11','1');
INSERT INTO cursos (codigocurso, nombrecurso) VALUES('22','2');
INSERT INTO cursos (codigocurso, nombrecurso) VALUES('33','3');
CREATE TABLE matriculas (codigo VARCHAR2(10),dni VARCHAR2(4), codigocurso VARCHAR2(2), CONSTRAINT pk_mat PRIMARY KEY (codigo), CONSTRAINT fk_mat FOREIGN KEY (dni) REFERENCES alumnos (dni), CONSTRAINT fk_matcurso FOREIGN KEY (codigocurso) REFERENCES cursos (codigocurso));
INSERT INTO matriculas (codigo, dni, codigocurso) VALUES('1234','1111','11');
INSERT INTO matriculas (codigo, dni, codigocurso) VALUES('167','2222','22');
INSERT INTO matriculas (codigo, dni, codigocurso) VALUES('891','3333','33');
Comprobamos que se han creado
SQL> select * from cat;
TABLE_NAME
--------------------------------------------------------------------------------
TABLE_TYPE
-----------
ALUMNOS
TABLE
CURSOS
TABLE
MATRICULAS
TABLE
SQL> select * from alumnos;
DNI NOMBRE
--------------- ----------
1111 Carlos
2222 Celia
3333 Luc??a