Usando Linux para muchas cosas y disfrutando de videojuegos, en dispositivos moviles, consolas y pc. Using Linux for many things and enjoying video games, mobile devices, consoles and pc

Como instalar Instant Client Oracle en Centos 7

Como instalar Instant Client Oracle en Centos 7

A veces debemos realizar trabajos donde mezclamos herramientas de código abierto con otras licenciadas y se nos viene el problema. Mientras para el opensource hay muchísima información disponible en internet, para las herramientas licenciadas, generalmente no es así. Hoy te hablare de como instalar los drivers de conexión a db's Oracle en Linux Centos 7 ademas de su modulo Oci8 para php.

Esto que te mostrare en las lineas mas abajo fueron varias noches de no dormir y pruebas y mas pruebas ya que la información es escasa y dividida por internet lo que me tomo tiempo resolver. Pero bueno, aquí va, comenzamos?

Que es Oracle Instant Client?

Las Oracle Instant Client son un grupo de herramientas, apis, módulos. Todos gratuitos para conectar nuestras aplicaciones a bases de datos Oracle, ya sea de forma local o remota.
Una forma común es por medio de aplicaciones PHP y el modulo Oci8 que veremos en nuestro articulo hoy.

Requerimientos para Oracle Instant Client en Centos

  • Linux Centos 7 (aunque funciona en Centos 6, nos centraremos en la versión 7) actualizado
  • Conectividad a internet
  • Si la db Oracle no es local, debemos tener conectividad a su servidor desde Centos

Configurando Instant Client Oracle en Linux Centos 7

-Abrimos un browser en nuestro equipo de trabajo y navegamos al URL oficial Oracle para crear una cuenta gratuita y descargar los rpms. No te asustes por la cantidad de datos solicitados, es gratuito (aunque casi que se nos pedirá hasta el RH, jejeje). Solo ten cuidado en descargar los que sirvan para tu equipo, de 32 o de 64bits. Transferimos los rpm descargados a nuestro Linux Centos 7

-Instalamos dependencias en nuestro servidor Centos
yum install libaio
yum groupinstall "Development tools"

-Te muestro los archivos descargados para este articulo
oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm
oracle-instantclient12.1-jdbc-12.1.0.2.0-1.x86_64.rpm
oracle-instantclient12.1-odbc-12.1.0.2.0-1.x86_64.rpm
oracle-instantclient12.1-sqlplus-12.1.0.2.0-1.x86_64.rpm
oracle-instantclient12.1-tools-12.1.0.2.0-1.x86_64.rpm

-Instalamos los rpm's
rpm -vi oracle*

-Verificamos su instalación
rpm -qa|grep oracle
oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64
oracle-instantclient12.1-sqlplus-12.1.0.2.0-1.x86_64
oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64
oracle-instantclient12.1-odbc-12.1.0.2.0-1.x86_64
oracle-instantclient12.1-tools-12.1.0.2.0-1.x86_64
oracle-instantclient12.1-jdbc-12.1.0.2.0-1.x86_64

-Verificamos la instalación de librerías y demás archivos (en caso de tu instalación ser de 32 bits, el path cambiaría)
ls -la /usr/lib/oracle/12.1/client64/lib/
total 199296
drwxr-xr-x 2 root root      4096 mar 27 18:56 .
drwxr-xr-x 5 root root        43 mar 27 19:00 ..
-rw-r--r-- 1 root root       342 jul  7  2014 glogin.sql
lrwxrwxrwx 1 root root        21 mar 27 18:56 libclntshcore.so -> libclntshcore.so.12.1
-rw-r--r-- 1 root root   6990875 jul  7  2014 libclntshcore.so.12.1
lrwxrwxrwx 1 root root        17 mar 27 18:56 libclntsh.so -> libclntsh.so.12.1
-rw-r--r-- 1 root root  58793741 jul  7  2014 libclntsh.so.12.1
-rw-r--r-- 1 root root     18027 jul  7  2014 libheteroxa12.so
-rw-r--r-- 1 root root   1768370 jul  7  2014 libipc1.so
-rw-r--r-- 1 root root    544150 jul  7  2014 libmql1.so
-rw-r--r-- 1 root root   6213011 jul  7  2014 libnnz12.so
lrwxrwxrwx 1 root root        15 mar 27 18:56 libocci.so -> libocci.so.12.1
-rw-r--r-- 1 root root   2576030 jul  7  2014 libocci.so.12.1
-rw-r--r-- 1 root root 109549133 jul  7  2014 libociei.so
-rw-r--r-- 1 root root    156353 jul  7  2014 libocijdbc12.so
-rw-r--r-- 1 root root    337137 jul  7  2014 libons.so
-rw-r--r-- 1 root root    118491 jul  7  2014 liboramysql12.so
-rw-r--r-- 1 root root   1564082 jul  7  2014 libsqlplusic.so
-rw-r--r-- 1 root root   1546540 jul  7  2014 libsqlplus.so
-rw-r--r-- 1 root root   4421284 jul  7  2014 libsqora.so.12.1
-rw-r--r-- 1 root root   3670975 jul  7  2014 ojdbc6.jar
-rw-r--r-- 1 root root   3677511 jul  7  2014 ojdbc7.jar
-rw-r--r-- 1 root root   1657951 jul  7  2014 orai18n.jar
-rw-r--r-- 1 root root     86899 jul  7  2014 orai18n-mapping.jar
-rw-r--r-- 1 root root    311555 jul  7  2014 ottclasses.zip
-rw-r--r-- 1 root root     35925 jul  7  2014 xstreams.jar

-Creamos un conf para cargar las librerías dinámicas. Prestamos mucha atención a escribir bien el path
sh -c "echo /usr/lib/oracle/12.1/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf"

-Aunque ya lo hicimos en el paso anterior con un conf, también escribimos el path en el conf principal de librerías dinámicas ademas de donde estarán los módulos php
vi /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/lib64/php/modules/
/usr/lib/oracle/12.1/client64/lib/

-Creamos directorio para tnsnames.ora. Ya el directorio base esta creado, solo es agregarle network/admin
mkdir -p /usr/lib/oracle/12.1/client64/network/admin

-Creamos el archivo tnsnames.ora. Importante tomar nota del tns, ip-servidor-oracle, puerto y servicio-a-conectar
vi /usr/lib/oracle/12.1/client64/network/admin/tnsnames.ora
tns = "(DESCRIPTION =
      (ADDRESS_LIST =
         (ADDRESS = (PROTOCOL = TCP)(HOST = ip-servidor-oracle)(PORT = 1521))
        (LOAD_BALANCE = yes)(FAILOVER = ON)
      )
      (CONNECT_DATA =(SERVER = DEDICATED)
         (SERVICE_NAME = servicio-a-conectar)
           (FAILOVER_MODE =
             (TYPE = SELECT)
             (METHOD = BASIC)
           )
      )

-Creamos script con variables de ambiente
vi /etc/profile.d/client.sh
export ORACLE_HOME=/usr/lib/oracle/12.1/client64
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export TNS_ADMIN=$ORACLE_HOME/network/admin

-Cerramos sesion y nos volvemos a logear. Ejecutamos el script
sh /etc/profile.d/client.sh

-Verificamos variable de ambiente
echo $ORACLE_HOME
/usr/lib/oracle/12.1/client64

-Verificamos conexión desde linea de comandos. Se nos pedirá una contraseña, nuestro Oracle DBA ya debe habernos dado esos datos
sqlplus usuario@tns

SQL*Plus: Release 12.1.0.2.0 Production on Tue Mar 27 19:02:03 2018

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

Enter password:
Last Successful login time: Tue Mar 27 2018 12:42:38 -05:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management and Advanced Analytics options

SQL> exit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management and Advanced Analytics options

Como instalar y configurar Oci8 en Centos 7

-Instalamos repositorio remi. Por default Centos 7 viene con php 5.4 donde no nos funcionara Oci8. Debemos mínimo instalar php 7 y en Remi ya lo tenemos todo

-Instalamos php 7.0
yum install yum-utils
yum-config-manager --enable remi-php70

Para mis pruebas yo instale los siguientes módulos, puede que no se necesiten todos, es tu tarea verificar si podemos quitar alguno sin que afecte la instalación de Oci8
yum install php-cli php-mcrypt php-xml php-devel php-pecl-jsonc php-pecl-zip php-pdo php php-gd php-ldap php-process php-fedora-autoloader php-pecl-jsonc-devel php-mbstring php-common php-mysqlnd php-pear

-Verificamos paquetes php instalados
rpm -qa|grep php
php-common-7.0.29-1.el7.remi.x86_64
php-gd-7.0.29-1.el7.remi.x86_64
php-ldap-7.0.29-1.el7.remi.x86_64
php-fedora-autoloader-1.0.0-1.el7.noarch
php-pear-1.10.5-6.el7.remi.noarch
php-pecl-zip-1.15.2-1.el7.remi.7.0.x86_64
php-json-7.0.29-1.el7.remi.x86_64
php-pdo-7.0.29-1.el7.remi.x86_64
php-devel-7.0.29-1.el7.remi.x86_64
php-mysqlnd-7.0.29-1.el7.remi.x86_64
php-mcrypt-7.0.29-1.el7.remi.x86_64
php-xml-7.0.29-1.el7.remi.x86_64
php-process-7.0.29-1.el7.remi.x86_64
php-cli-7.0.29-1.el7.remi.x86_64
php-7.0.29-1.el7.remi.x86_64
php-mbstring-7.0.29-1.el7.remi.x86_64

-Instalamos Oci8 en nuestro Linux Centos 7 actualizado
yum install php-oci8

-Abrimos los puertos 80 y 443 en nuestro servidor (en caso, claro, de que estés ejecutando firewalld)
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https

-Reiniciamos el servicio de firewalld para que tome cambios
systemctl restart firewalld

-Creamos un archivo para probar la carga de Oci8 entre los módulos php instalados
vi /var/www/html/test.php
<?php
phpinfo();
?>

-Le damos permisos a apache
chown apache.apache /var/www/html/test.php

-Reiniciamos el servicio de apache para que lea los módulos php instalados
systemctl restart httpd

-Abrimos un browser en otro equipo y navegamos a nuestro servidor para verificar que se cargue el modulo Oci8
Verificamos version de php entre otros datos en nuestro Centos 7

-En el listado debe aparecernos el modulo oci8 con sus parámetros
Nuestro apache debe estar cargando el modulo oci8 junto a otros modulos php

Unas tareas son mas complejas que otras, pero instalar Oracle Instant Client y su modulo Oci8 en Linux Centos debe ser sin problemas siempre y cuando sigas un orden y prestes atención a los detalles

Artículos recomendadosComo instalar Zend Framework 2 paso a paso
                                           Como instalar VirtualBox headless paso a paso
                                           Como personalizar seguridad de Oracle Java
                                           Como instalar java en linux paso a paso
                                           Como instalar Virtualbox en Linux Ubuntu 16.04


Quiero vivir de mi blog, de enseñar opensource, pero esto no sera posible sin tu apoyo, me ayudas?


Satisfech@ con el articulo? Bien, hazme un favor, compártelo en tus redes sociales (compartir es sexy). Escríbeme en los comentarios aquí debajo y pasa la voz compartiendo el tweet.
Sígueme en twittergoogle+facebook, email, YouTube o Patreon y podrás estar enterado de todas mis publicaciones.
Disfrútenlo.


Share/Bookmark