alvaro.gonzalezsotillo@educa.madrid.org

Instalación de Oracle

Álvaro González Sotillo

Created: 2024-09-28 sáb 18:11

1. Instalación del software de base de datos

1.1. Prerequisitos

  • Será una máquina virtual de VirtualBox
    • En clase puede bajarse desde el NAS (más rápido)
  • El fichero OVA del profesor ya tiene:
    • Oracle Linux 9 instalado instalado (inglés)
  • Se debe bajar también el ZIP de instalación: LINUX.X64.213000_db_home.zip
  • Se necesita java
    • sudo yum install java-11-openjdk

1.2. Resolver el propio nombre

  • Cambiar el nombre de la máquina
    • Por ejemplo nombrealumnoASGBD
    • Fichero /etc/hostname
    • Fichero /etc/hosts: Hay que añadir el nombre de la máquina en
      • 127.0.0.1
      • ::1
  • Reiniciar la máquina
  • Después de eso, se debería encontrar por nombre: ping nombrealumnoASGBD.local

(referencia em https://oracle-base.com/blog/2015/03/26/oracle-linux-7-1-preinstall-packages-available-for-11gr2-and-12cr1/)

1.3. Entorno gráfico

  • El instalador más cómodo de Oracle necesita un sistema de ventanas
  • Hay varias opciones:
    • Arrancar el modo gráfico en la máquina virtual

          startx
      
    • Conexión ssh con redirección de protocolo X11

          ssh -X alumno@servidor
      
    • Arrancar un servidor vnc

          sudo yum install tigervnc-server
          vncserver :0
      

1.4. Oracle 21c

1.4.1. Descomprimir el instalador

  • Descomprimiremos sus ficheros en el directorio /opt/oracle-install
    • Sugerencia: línea de comandos unzip
    • Directorio /opt/oracle-install/
  • Para hacer sitio, podemos borrar los ficheros zip una vez descomprimidos

1.4.2. Arrancar el instalador

  1. Se arranca con ./runInstaller
    • Puede que falte una librería: sudo yum install libnsl
  2. Instalar sólo el software de la base de datos
  3. Elegir Single instance database
  4. Edición Enterprise

1.4.3. Directorios de Oracle

Dejamos los directorios por defecto:

  • Oracle Base: /opt/app/alumno
  • Software en /opt/oracle-install
  • Inventory en /opt/app/oraInventory
    • Dejamos el grupo a alumno

1.4.4. Grupos de Linux

  • Elegir wheel
    • Es un grupo administrador en Centos
    • El usuario alumno ya pertenece a él

1.4.5. Ejecución de scripts como root

  • La instalación necesitará modificar el sistema, pero se ha lanzado como alumno
  • No dejaremos que el instalador ejecute nada como root, lo haremos manualmente

1.4.6. Comprobaciones

  • Ignoramos la falta de memoria
  • El instalador detectará algunos errores, pero genera unos scripts de fix
    • Son parámetros del kernel de Linux
    • Los scripts se ejecutan como administrador
    • sudo bash runfixup.sh
  • Se necesitan instalar varios paquetes de software
    • sudo yum install paquete
    • Es necesario que la máquina virtual tenga acceso a internet (debería estar en Bridged, pero también funciona NAT)

1.4.7. Resumen

  • Se debe grabar la información de la hoja de resumen

1.4.8. scripts de configuración

  • /opt/home/alumno//oraInventory/orainstRoot.sh
[alumno@centos7 oraInventory]$ sudo ./orainstRoot.sh 
[sudo] password for alumno: 
Changing permissions of /home/alumno/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /home/alumno/oraInventory to alumno.
The execution of the script is complete.
  • /home/alumno/oracle-install/root.sh
[alumno@centos7 oracle-install-18c]$ sudo ./root.sh
Performing root user operation.

The following environment variables are set as:
    ORACLE_OWNER= alumno
    ORACLE_HOME=  /opt/oracle-install

Enter the full pathname of the local bin directory: [/usr/local/bin]: 
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Do you want to setup Oracle Trace File Analyzer (TFA) now ? yes|[no] : 

Oracle Trace File Analyzer (TFA - Non Daemon Mode) is available at :
    /opt//oracle-install/suptools/tfa/release/tfa_home/bin/tfactl

Note :
1. tfactl will use TFA Daemon Mode if TFA already running in Daemon Mode and user has access to TFA
2. tfactl will configure TFA Non Daemon Mode only if user has no access to TFA Daemon mode or TFA Daemon mode is not installed

OR

Oracle Trace File Analyzer (TFA - Daemon Mode) can be installed by running this script :
    /opt//oracle-install/suptools/tfa/release/tfa_home/install/roottfa.sh

1.4.9. Finalización

  • Necesitamos definir algunas variables de entorno (ficheros ~/.profile, ~/.bash_profile, ~/.bashrc)
    • ORACLE_HOME: /opt/oracle-install
    • Incluir $ORACLE_HOME/bin en el PATH
  • También se puede usar el comando oraenv para definir estas variables

1.4.10. Relación entre ficheros de inicio de shell

%3 ~/.bash_profile ~/.bash_profile ~/.bashrc ~/.bashrc ~/.bash_profile->~/.bashrc ~/.bash_login ~/.bash_login ~/.profile ~/.profile ~/.bash_logout ~/.bash_logout /etc/bash.bashrc /etc/bash.bashrc /etc/bashrc /etc/bashrc ~/.bashrc->/etc/bashrc /etc/profile /etc/profile BASH LOGIN BASH LOGIN BASH LOGIN->~/.bash_logout exit BASH LOGIN->/etc/profile Primero de: Primero de: BASH LOGIN->Primero de: Primero de:->~/.bash_profile Primero de:->~/.bash_login Primero de:->~/.profile BASH INTERACTIVO BASH INTERACTIVO BASH INTERACTIVO->/etc/bash.bashrc BASH INTERACTIVO->~/.bashrc SH INTERACTIVO SH INTERACTIVO SH INTERACTIVO->~/.profile SH INTERACTIVO->/etc/profile

1.4.11. Reiniciar

  • En un servidor real no se hace, pero aquí es lo más cómodo para que funcionen las nuevas variables de entorno
  • Después, podemos ver que los programas están, pero no hacen nada
 [alumno@fedora-64-26 ~]$ sqlplus / as sysdba

 SQL*Plus: Release 12.1.0.2.0 Production on Thu Sep 14 11:58:09 2017

 Copyright (c) 1982, 2014, Oracle.  All rights reserved.

 ERROR:
 ORA-12162: TNS:net service name is incorrectly specified


 Enter user-name: 

2. Creación de una instancia de base de datos

  • Comando dbca
  • No estará en el PATH si no se ha incluido (por ejemplo, con oraenv)
  • Utilizad la configuración típica
    • Nombre: asir
    • Es obligatorio que sea una container database
    • Pluggable database: pdasir
    • Recordad la contraseña
  • Guardad la información de la página de resumen (por si acaso)

2.1. Password management

  • Lista de usuarios
  • Se puede
    • Bloquearse o desbloquearse
    • Cambiar su contraseña

2.2. ¡Ya se puede conectar!

  • Es necesario informar a sqlplus del SID
  • Pero solo se puede conectar desde la máquina local
[alumno@oraclelinux-r8 ~]$ ORACLE_SID=asir sqlplus / as sysdba                            

SQL*Plus: Release 21.0.0.0.0 - Production on Thu Sep 7 13:48:47 2023                                       
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.                                                    


Connected to:
Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production                                     
Version 21.3.0.0.0

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED                                            
---------- ------------------------------ ---------- ----------                                            
         2 PDB$SEED                       READ ONLY  NO                                                    
         3 PDASIR                         READ WRITE NO                                                    
SQL> alter session set container=PDASIR
  2  ;

Session altered.

SQL> select * from dual;

D
-
X

SQL>

3. Instancia / listener / base de datos

  • Instancia:
    • Varios procesos funcionando
    • Permite manipular una o varias base de datos (En Oracle solo una)
  • Base de datos
    • Varios ficheros
    • Contienen datos, índices, esquema,…
  • Listener
    • Proceso que admite conexiones de clientes
    • En otros SGBD (MySQL) la instancia es su propio listener
    • Conecta los clientes con la instancia pedida

3.1. Instancias y bases de DATOS

3.2. Ejemplo (I) de listener

3.3. Ejemplo (II) de listener

3.4. Pluggable databases de Oracle

  • Desde la versión ¿21?, la base de datos de Oracle es obligatoriamente Container database
    • Es el ORACLE_SID
    • Se pueden definir usuarios globales
    • Pero los datos deben estar en pluggable databases
  • Una pluggable database
    • Depende de una Container database
    • Tiene sus propios usuarios y tablas
    • No es un SID, es un servicio
  • Nombre oficial: Oracle multitenant

Fuente

3.5. Cambiar de pluggable database

ALTER SESSION SET container=CDB$ROOT;
ALTER SESSION SET container=NOMBREDEPLUGGABLEDATABASE;

4. Creación de un listener

  • Permiten las conexiones de clientes remotos
  • Comando netca
    • Listener configuration
    • Nombre del listener: LISTENER
    • Protocolo TCP
    • Puerto 1521
  • Comprobar la configuración creada en el fichero listener.ora
    • Si luego falla, revisar ADR_BASE_LISTENER

4.1. Arrancar y parar el listener

  • Arrancar:

      lsnrctl start
    
  • Parar:

      lsnrctl stop
    
  • Comprobar si la instancia se ha conectado

      lsnrctl status
    

5. Conexión remota

5.1. Acceso por redes

  • Es necesario conocer la IP de nuestro servidor
    • ifconfig
    • hostname -I
  • Es necesario que el ordenador cliente pueda acceder al servidor
    • Tipo de conexión de la máquina virtual: mejor bridged
    • ping
    • Firewall:
      • systemctl disable firewalld
      • sudo firewall-cmd --permanent --add-port=1521/tcp

5.1.1. Conexión remota

  • Es necesario conocer la IP o el nombre del ordenador remoto
  • Si nos fiamos de DHCP, cada día puede ser una IP distinta
  • Es mejor usar un nombre
    • DNS: muy difícil
    • Nombres netbios de Windows
    • Nombres zeroconf/avahi de Linux/Mac (preferido)

5.2. Configuración de las conexiones (sqlplus)

  • El cliente sqlplus utiliza las conexiones definidas en el fichero tnsnames.ora
  • Con el comando netca
    • Elegir los nombres locales (Local net service name configuration)
  • Se puede usar también una cadena de conexión

        sqlplus username/password@host:port/service
    
        sqlplus sys/alumno@centosprofe.local/asir as sysdba
    
        sqlplus sys@\"host:port/service\" as sysdba
    

5.3. Instalación de sqlplus

6. Dirección IP

  • Pondremos IP estática
    • etc/sysconfig/network-scripts/ifcfg-enp0s3

          BOOTPROTO=none
          PREFIX=16
          IPADDR=10.1.35.xxx
      
    • Lista de direcciones
  • También se puede usar sudo nmtui

7. Arrancar y parar la base de datos

  • Se necesitan las variables ORACLE_HOME, ORACLE_SID, PATH, ORACLE_BASE.

    • Se definen manualmente con ayuda del script oraenv:
      source oraenv
    
  • Arrancar y parar la base de datos

      dbstart $ORACLE_HOME
      dbshut $ORACLE_HOME
    
  • Arrancar y parar el listener. Comprobar que se admiten conexiones

      lsnrctl start
      lsnrctl stop
      lsnrctl status
    

7.1. A mí dbstart y dbshut no me funcionan

Se puede hacer a mano. Lo veremos en el próximo tema.

[alumno@centos7 ~]$ export ORACLE_SID=asir
[alumno@centos7 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Tue Sep 19 10:40:54 2017

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup open
ORACLE instance started.

Total System Global Area 1207959552 bytes
Fixed Size                  2923776 bytes
Variable Size             822084352 bytes
Database Buffers          369098752 bytes
Redo Buffers               13852672 bytes
Database mounted.
Database opened.
SQL> 

8. Cosas que hemos aprendido de pasada

  • Variables de entorno
    • Variable PATH
  • Conexiones remotas
    • ssh con redirección del Xserver
    • Con vnc
  • Edición de ficheros de texto
  • Instalación de paquetes en Centos
  • Conexiones de red (bridged, NAT)
  • Elevación de permisos con sudo
  • Descompresión de ficheros zip

Nada de esto es directamente bases de datos…

… pero ha sido necesario para instalar Oracle

8.1. Comandos

cd Cambia el directorio actual
echo Escribe los parámetros pasados
df Espacio de disco usado
unzip Descomprime un zip
updatedb Actualiza la lista de ficheros del disco para locate
locate, whereis Busca un fichero por nombre
ssh Conexión remota
grep Busca líneas con un texto
nano Editor de ficheros
netstat Ver conexiones de red
nc Conectarse por TCP o UDP
systemctl Activa y desactiva servicios (firewall)
nmtui Control de conexiones de red

8.2. Comandos, shell y variables

$variable Valor de una variable (de export y env )
| Manda la salida de un programa a la entrada de otro
$HOME/.bashrc script de inicio del usuario
source Ejecuta un script dentro de la shell actual
export Define una variable
env Lista de variables
PATH Lista de directorios donde se buscan comandos
history Lista de comandos introducidos en la shell

9. Diagrama resumen

%3 Descomprimir Descomprimir Instalar Instalar Descomprimir->Instalar Paquetes_como_root Paquetes_como_root Instalar->Paquetes_como_root Scripts_como_root Scripts_como_root Instalar->Scripts_como_root Software_instalado Software_instalado Paquetes_como_root->Software_instalado Scripts_como_root->Software_instalado Variables_en_bash Variables_en_bash Software_instalado->Variables_en_bash dbca dbca Software_instalado->dbca netca netca Software_instalado->netca Variables_en_bash->dbca Variables_en_bash->netca Instancia_creada Instancia_creada dbca->Instancia_creada Listener_creado Listener_creado netca->Listener_creado Listener_levantado Listener_levantado Listener_creado->Listener_levantado lsnrctl start Instancia_conectada Instancia_conectada Listener_levantado->Instancia_conectada Instancia_levantada Instancia_levantada Instancia_creada->Instancia_levantada startup open Instancia_levantada->Instancia_conectada Automático Conectar_cliente_remoto Conectar_cliente_remoto Instancia_conectada->Conectar_cliente_remoto Conseguido Conseguido Instancia_conectada->Conseguido lsnrctl status Instalar_cliente_remoto Instalar_cliente_remoto Instalar_cliente_remoto->Conectar_cliente_remoto Conectar_cliente_remoto->Conseguido Quitar_firewall Quitar_firewall Quitar_firewall->Conectar_cliente_remoto

10. Referencias