lunes, 19 de febrero de 2018

Oracle 2- Instalar Oracle 12 c en ubuntu 16.04 LTS

0. Introducción

 Se pretende hacer una prueba para aprender a realizar tareas básicas como realizar copias de seguridad, restaurar y poder consultar los datos de una base de datos grande de prueba en Oracle.

La base de datos a instalar es Oracle 12C R2.0.1

Hay que atenerse a las condiciones de la licencia.

Aquí se enuncian una serie de URLS que nos sirven de gran ayuda



Pero la que mas me ha ayudado ha sido las instrucciones de un usuario chino: 고영
https://www.youtube.com/watch?v=gwW4kl1E8GU

Los ficheros mk.zip están tambien en un google drive de 고영
https://drive.google.com/file/d/1r_neHR-fYl9TAUqBOyM8y5Hjzv96YPLU/view


1. Creación de usuarios y grupos

Se tienen que crear los siguientes grupos:
  1. oinstall
  2. dba
  3. oper
  4. asadmin
Veamos las sentencias necesarias


#1. Crear grupos
sudo groupadd -g 502 oinstall
sudo groupadd -g 503 dba
sudo groupadd -g 504 oper
sudo groupadd -g 505 asmadmin

Además se tiene que crear el usuario oracle. En este caso me he tomado precauciones extra respecto a otras URLs.

Para simplificar queremos que dicho usuario puede hacer un login al sistema, y debe poder hacer "sudo" .


#1. Crear usuario. Nos pide darle una contraseña
sudo adduser oracle 

#2. Asisgnar grupo principal oinstall
sudo usermod -g oinstall oracle

#3. Añadir otros grupos a oracle
sudo usermod -a -G dba,oper,asmadmin oracle

#4. Le permitimos poder hacer sudo. Para ello le asignamos el grupo sudo
sudo usermod -a -G sudo oracle

Otros recomiendan usar esta orden. Pero luego cuesta mucho hacer login al sistema

useradd -u 502 -g oinstall -G dba,asmadmin,oper -s /bin/bash -m oracle

2. Configurar la red (Network)

Vamos a obtener el nombre del ordenador (host) y su IP. En principio vamos a hecer pruebas en local, por tanto sabemos de antemano que la direccion local va a ser 127.0.0.1. También podemos decir por omisión que el nombre del host es localhost. Pero vamos a hacer las cosas bien ya que Ubuntu asigna un nombre al equipo.


#1. Me devuelve eduard-HP-ProDesk-600-G1-SFF
hostname

#2. Devuelve un monton de información ,pero solo interesa la informacion en rojo
/sbin/ifconfig

#eno1      Link encap:Ethernet  HWaddr c4:34:6b:6c:4c:f4
#          inet addr:192.168.10.5  Bcast:192.168.10.255  Mask:255.255.255.0
#          inet6 addr: fe80::6c23:b45d:c2f6:829a/64 Scope:Link
#          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
#          RX packets:120588 errors:0 dropped:0 overruns:0 frame:0
#          TX packets:60451 errors:0 dropped:0 overruns:0 carrier:0
#          collisions:0 txqueuelen:1000
#          RX bytes:158969907 (158.9 MB)  TX bytes:8349759 (8.3 MB)
#          Interrupt:20 Memory:f7c00000-f7c20000
#
#lo        Link encap:Local Loopback              
#          inet addr:127.0.0.1  Mask:255.0.0.0    
#          inet6 addr: ::1/128 Scope:Host         
#          UP LOOPBACK RUNNING  MTU:65536  Metric:1
#          RX packets:2332 errors:0 dropped:0 overruns:0 frame:0
#          TX packets:2332 errors:0 dropped:0 overruns:0 carrier:0
#          collisions:0 txqueuelen:1
#          RX bytes:307994 (307.9 KB)  TX bytes:307994 (307.9 KB)

Vamos a modificar el fichero /etc/hosts


sudo gedit /etc/hosts 

y le añadimos 2 líneas de nombre del equipo:


127.0.0.1 localhost
127.0.1.1 nombre_equipo

Siendo nombre_equipo en mi caso eduard-HP-ProDesk-600-G1-SFF que ha devuelto hostname


3. Creación de la carpeta de instalación y ajustarla

Necesitamos crear una carpeta donde se instalará el software de Oracle. en teoría es aconsejable que pertenezca a al usuario oracle con grupo oinstall. Y los permisos a 775.

La carpeta a crear es :
/u01/app/oracle/product/12.2.0.1/db_1

Esta información debemos guardarla ya que cuando el programa de instalación nos pida una carpeta donde instalar, debemos darle este nombre. También se debe verificar que la variable de entorno $ORACLE_PATH que crearemos mas adelante, apunte también a esta ruta.


#1. Creamos directorio de instalacion de la BD Oracle
sudo mkdir -p /u01/app/oracle/product/12.2.0.1/db_1

#2. Cambiamos propietario
chown -R oracle:oinstall /u01

#3. Cambiamos permisos
chmod -R 775 /u01


4. Parámetros de configuración del fichero /etc/sysctl.conf

4.1 Editar el fichero /etc/sysctl.conf 

sudo gedit /etc/sysctl.conf 

añadiendo las líneas a continuación

#### Oracle 12c Kernel Parameters ####

#### fs.xxx ####
fs.suid_dumpable = 1
fs.aio-max-nr = 1048576
fs.file-max = 6815744

#### kernel.xxx ####
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096

# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128

#### net.xxx ####
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default=4194304
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048586
#### end Oracle 12c Kernel Parameters ####

4.2 Si existen estas líneas, comentarlas. Ya que pueden dar error


#net.bridge.bridge-nf-call-ip6tables = 0
#net.bridge.bridge-nf-call-iptables = 0
#net.bridge.bridge-nf-call-arptables = 0

5. Parámetros de configuración de /etc/security/limits.conf

Editar el fichero /etc/security/limits.conf añadiendo las líneas a continuación
sudo gedit /etc/security/limits.conf 

#### Oracle 12c Settings 4 ####
#### nproc ####
oracle       soft  nproc  2047
oracle       hard  nproc  16384
## nofile ####
oracle       soft  nofile 1024
oracle       hard  nofile 65536
#### stack ####
oracle       soft  stack  10240
oracle       hard  stack  32768
#### memlock ####
oracle       soft  memlock  134217728
oracle       hard  memlock  134217728

6. Instalación de paquetes  adicionales 

Se muestran las órdenes que se deben de teclear. Se hara con usuario privilegiado "su". Es muy importante distinguir cada orden, ya que algunas ocupan más de una línea. Para distinguir cada orden se va pintar de un color de fondo distinto. Por tanto, todo lo que tenga el mismo color deberá ejecutarse de una sola vez ya que es la misma orden.

sudo su

echo 'deb http://cz.archive.ubuntu.com/ubuntu precise main universe' >> /etc/apt/sources.list.d/extra.list

echo 'deb http://cz.archive.ubuntu.com/ubuntu trusty main universe' >> /etc/apt/sources.list.d/extra.list

apt-get update

apt-get install alien autoconf automake autotools-dev binutils doxygen \
elfutils expat gawk gcc gcc-multilib g++-multilib libstdc++6:i386 ksh less libtiff5 \
libtiff5-dev lib32z1 libaio1 libaio-dev libc6-dev libc6-dev-i386 libc6-i386 \
libelf-dev libltdl-dev libmotif4 libodbcinstq4-1 libodbcinstq4-1:i386 \
libpthread-stubs0 libpth-dev libstdc++5 lsb-cxx make \
pdksh openssh-server rlwrap rpm sysstat unixodbc unixodbc-dev x11-utils \
zlibc libglapi-mesa:i386 libglu1-mesa:i386 libqt4-opengl:i386 \
libpthread-workqueue0 libpthread-workqueue-dev libzthread-2.3-2 libzthread-dev \
libpthread-stubs0-dev libaio-dev

mv /etc/apt/sources.list.d/extra.list /etc/apt/sources.list.d/extra.list.backup 

7. Instalación de versiones antiguas de gcc y cpp

Se deben tener las versiones 4.9 de gcc y cpp. Primero instalaremos las versiones requeridas y luego comprobaremos que se han instalado. Verificar que estamos en usuario "su"

#Instalar gcc 4.9
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 50

#Instalar cpp 4.9
update-alternatives --install /usr/bin/cpp cpp /usr/bin/cpp-4.9 50

#Verificar versiones instaladas es 4.9.3. 
# En la última línea debe aparecer "gcc version 4.9.3 (Ubuntu 4.9.3-13ubuntuu2)"
cc -v 

8. Ajustar las variables de entorno del usuario oracle

El fichero a modificar es /home/oracle/.bashrc y se le añadirán estas líneas




sudo gedit /home/oracle/.bashrc



TMP=/tmp;
export TMP 

TMPDIR=$TMP;
export TMPDIR 

ORACLE_HOSTNAME=127.0.0.1;
export ORACLE_HOSTNAME

ORACLE_UNQNAME=DB12C;
export ORACLE_UNQNAME

ORACLE_BASE=/u01/app/oracle;
export ORACLE_BASE

ORACLE_HOME=$ORACLE_BASE/product/12.2.0.1/db_1;
export ORACLE_HOME

ORACLE_SID=orcl;
export ORACLE_SID

PATH=/usr/sbin:$PATH;
export PATH

PATH=$ORACLE_HOME/bin:$PATH;
export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/lib64;
export LD_LIBRARY_PATH

CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
export CLASSPATH


Hay que indicar que $ORACLE_PATH debe de coincidir con la carpeta indicada punto 3
.

9. Descargar el fichero de instalación de Oracle 12C R2.1 

1. Crear el directorio Installer dentro de /home/oracle y situarse dentro.



sudo mkdir /home/oracle/Installer
cd /home/oracle/Installer

2. Descargar el fichero indicado de la web de Oracle en /home/oracle/Installer 


3. Descomprimir el fichero (suponiendo que se llame linuxx64_12201_database.zip


sudo unzip linuxx64_12201_database.zip

Se observa que ha creado una carpeta llamada "database"

10. Descargar los fichero ".mk" correctos 

1. Crear el directorio mk dentro de /home/oracle y situarse dentro.

sudo mkdir /home/oracle/mk
cd /home/oracle/mk

2. Descargar el fichero de google drive de 고영 en /home/oracle/mk 

3. Descomprimir el fichero (suponiendo que se llame mk.zip

sudo unzip mk.zip
4. Cambiar de usuario y permisos al directorio Installer del usuario oracle

cd /home/oracle
sudo chown -R oracle:oinstall Installer/


11. Reiniciar el sistema 

1. Apacar y arrancar el sistema para que el usuario oracle recoja la configuración.

2. Entrar con el login del usuario oracle

12. Ejecutar el instalador de Oracle

1. Ir al directorio /home/oracle/Installer/database y ejecutar el instalador

cd /home/oracle/Installer/database
./runInstaller

2. Aparecen las pantallitas que te van guiando
3. La primera se queja del sistema operativo que no está soportado, pero
decimos a continuar.
4. La siguiente pantalla dejamos todos los datos en blanco.
4. Y se queja pero le decimos que continue.
5. Seleccionamos la primera opción
6. Para lo que lo quiero yo, me sobra con la primera opción de Clase Escritorio.
7. Mucho cuidado aqui: a.Comprobar que los 3 primeros puntos ("Directorio Base de Oracle",
"Ubicación del Software" y "Ubicación de Archivos de Base de Datos")
coincidan con la rutas parciales descritas en el punto 3 y las variables
de entorno $ORACLE_BASE y $ORACLE_HOME
b.Edición de la Base de Datos, yo he seleccionado la Enterprise.
Funcionaría igual con la Standard Edition
c.Grupo de OSDA: dba
d.Nombre de la Base de Datos Global: orcl (este dato debe de coincidir con
la variable de entorno $ORACLE_SID, en caso contrario no nos podremos conectar
con sqldeveloper)
e.La contraseña le he puesto la misma que al usuario oracle, para evitarme
memorizar tantas contraseñas
8. Y se queja de la contraseña. Pero no hacemos caso y continuamos
9. Tenemos que verificar algunas cosas:
a. Nombre de la base de datos global y Identificador del Sistema Oracle (SID)
deben ser el mismo orcl y coincidir con la variable de entorno $ORACLE_SID,
b. Verificar otra vez que las rutas de los ficheros y ubicaciones de la base de
datos coincidan parcialmente con las variables de entorno
$ORACLE_BASE y $ORACLE_HOME

13. Problema previsto con el enlazador de binarios

1. Este problema se debe a que algunos ficheros con extensión ".mk" no funcionan 
   bien, por tanto tenemos guardados en la recámara los del directorio 
   /home/oracle/mk
2. Abrimos 2 terminales. El primero con el usuario su (sudo su) y el segundo
se aprovecha el que hemos ejecutado el instalador (que está con el usuario oracle)
3. Introducir en cada terminal # (TERMINAL-1-su) creamos links simbólicos ln -s /usr/bin/awk /bin/awk
ln -s /usr/bin/rpm /bin/rpm
ln -s /usr/bin/basename /bin/basename
ln -s /usr/lib/x86_64-linux-gnu /usr/lib64
cd /lib64
ln -s /lib/x86_64-linux-gnu/libgcc_s.so.1 . # (TERMINAL-2-oracle)  cd $ORACLE_HOME    cd plsql/lib cp ~/Installer/mk/ins_plsql.mk ./ cp ~/Installer/mk/env_plsql.mk ./ cd ../.. 4. Ahora nos aprece la segunda pantalla de error de link
Tecleamos en el terminal de oracle # (TERMINAL-2-oracle)  cd rdbms/lib cp ~/Installer/mk/ins_rdbms.mk ./ cp ~/Installer/mk/env_rdbms.mk ./ cd ../..  3. Le damos a reintentar y nos sale la tercera pantalla de error
Tecleamos en el terminal de oracle # (TERMINAL-2-oracle)  cd sqlplus/lib cp ~/Installer/mk/env_sqlplus.mk ./ cd ../.. Le damos a reintentar y sale la cuarta pantalla de error
Tecleamos en el terminal de oracle # (TERMINAL-2-oracle)  cd network/libcp ~/Installer/mk/env_network.mk ./ cp ~/Installer/mk/ins_net_server.mk ./ cd ../..  Le damos a reintentar y

14. Ejecutar los comandos que nos pide como su

ahora nos pide que ejecutemos 1 o 2 scripts como usuario "su".
En mi caso cuando lo instalé por primera vez me pidió 2, y ahora
solo me ha pedido uno. El primero se ha comentado
# (TERMINAL-1-su) #/u01/app/oraInventory/orainstRoot.sh /u01/app/oracle/product/12.2.0.1/db_1/root.sh
y nos pide ciertos datos y contestamos con "enter" para aceptar los valores
predeterminados
le damos a aceptar y nos dice que
Installation successful y Oracle Enterprise Manager Database Express URL: https://localhost:5500/em Hacemos caso y en el navegador (que tiene que tener el plugin "flash" instalado)
metemos esta dirección y se queja que no es una dirección segura, pero añadiendo
la excepción de seguridad nos sale esta pantalla.
Le damos como usuario system y la contraseña que le hayamos definido
Y nos ha dejado entrar
Entramos en sql developer que lo hemos instalado en una entrada anterio siguiendo
las instrucciones de Dizwell Informatics
Y creamos una conexion nueva.
OJO: El puerto es normalmente 1521 y no 1523 como se indica la imagen
El usuario es SYSTEM y la contraseña adecuada
El SID es orcl sobre el cual hemos insistido mucho
El nombre del host es 127.0.0.1, que hemos insistido mucho con las variables de
entorno e instalación

Vemos que el usuariuo hr (que oracle confunde usuarios y bases de datos!!!),
contiene tablas de prueba para hacer test


15. Problemas que me han surgido

1. No acepta el usuario y contraseña con el navegador en https://localhost:5500/em
Solución: Desmacarcar el cuadro de "como sysdba" 2. Da problemas de error de conexion al crear la conexión en el sql developer
Solución: Este proceso es mas laborioso. Para ello se tienen que hacer las
siguientes comprobaciones:
a. Verificar que se puede entrar en sqlplus.
Teclear
sqlplus / as sysdba
y debe poder entrar en el programa   SQL> b. Si funciona el sqlplus teclerar lsnrctl status 
y saldrá esta ratahila LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 21-FEB-2018 20:47:37 Copyright (c) 1991, 2016, Oracle.  All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1523))) STATUS of the LISTENER ------------------------ Alias                     LISTENER Version                   TNSLSNR for Linux: Version 12.2.0.1.0 - Production Start Date                21-FEB-2018 20:26:29 Uptime                    0 days 0 hr. 21 min. 8 sec Trace Level               off Security                  ON: Local OS Authentication SNMP                      OFF Listener Parameter File   /u01/app/oracle/product/12.2.0.1/db_1/network/admin/listener.ora Listener Log File         /u01/app/oracle/diag/tnslsnr/eduard-HP-ProDesk-600-G1-SFF/listener/alert/log.xml Listening Endpoints Summary...   (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1523)))   (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1523)))   (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=eduard-HP-ProDesk-600-G1-SFF)
(PORT=5500))(Security=(my_wallet_directory=/u01/app/oracle/admin/orcl/xdb_wallet))
(Presentation=HTTP)(Session=RAW)) Services Summary... Service "65bf11d470e032b9e0530101007f7d9c" has 1 instance(s).   Instance "orcl", status READY, has 1 handler(s) for this service... Service "orcl" has 1 instance(s).   Instance "orcl", status READY, has 1 handler(s) for this service... Service "orclXDB" has 1 instance(s).   Instance "orcl", status READY, has 1 handler(s) for this service... Service "orclpdb" has 1 instance(s).   Instance "orcl", status READY, has 1 handler(s) for this service... The command completed successfully El port debe salir PORT=1521 (que en este caso salió 1523 ya que habian 2
instalaciones anteriores) y debe coincidir con el port que se le da cuando se crea
la conexión con el sql developer
Si no sale con el comando lsnrctl status que los anteriores servicios:
orcl, orclXDB, orclpdb .. estan READY, tenemos mal el asunto. 3. Puede ocurrir que tampoco funciona. hay que ver el fichero etc/oratab , donde se
guardan los SID de las distintas instalaciones anteriores.
Este fichero contiene este formato (2 campos separados por ":")
NOMBRE_SID:ruta:ficheros_instalación
En mi caso
ORCL:u01/app/oracle/product/12.2.0.1/db_1:N Si hay mas entradas diferentes a estas se deben borrar.
4. Si falla algo mas, ahí me habeis dado !!!

1 comentario :

  1. Buenas tardes, les comento que seguí toda la guía y al finalizar punto 14, da un error de la red.

    "ADVERTENCIA: oracle.server:Class oracle.install.config.common.NetCAInternalPlugIn was loaded by a parent class loader, provided classpath (/u01/app/oracle/product/12.2.0.1/db_1/install/jlib/instcommon.jar:/u01/app/oracle/product/12.2.0.1/db_1/install/jlib/installcommons_1.0.0b.jar) will not be available from this class
    INFORMACIÓN: oracle.server:The plug-in Oracle Net Configuration Assistant has failed its perform method "
    pero ya dio el error y no se como corregirlo
    Agradezco cualquier ayuda
    Atentamente Eladio
    elpicoco@gmail.com

    ResponderEliminar