domingo, 20 de diciembre de 2020

Cómo instalar OCI8 en Ubuntu 20.04 y PHP 7.4

Cómo instalar OCI8 en Ubuntu 20.04 y PHP 7.4 Oracle client 19




Paso 1

Descargue Oracle Instant Client y SDK del sitio web de Oracle. (Necesita iniciar sesión en la página de Oracle)

http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

Descargar

  • Instant Client Package - Basic - instantclient-basic-linux.x64-19.9.0.0.0dbru.zip
  • Instant Client Package - SDK - instantclient-sdk-linux.x64-19.9.0.0.0dbru.zip
  • Instant Client Package - Sql Plus (Opcional) - instantclient-sqlplus-linux.x64-19.9.0.0.0dbru.zip
  • Paso 2

    Cree una nueva carpeta para almacenar archivos zip de Oracle Instant Client en su servidor.

        sudo mkdir /usr/lib/oracle
        sudo mkdir /usr/lib/oracle/19.9
        sudo mkdir /usr/lib/oracle/19.9/client64
    

    Paso 3

    Ahora necesitamos extraer los archivos.

        sudo cp instantclient-basic-linux.x64-19.9.0.0.0dbru.zip /usr/lib/oracle/19.9/client64
        sudo cp instantclient-sdk-linux.x64-19.9.0.0.0dbru.zip /usr/lib/oracle/19.9/client64
        sudo cp instantclient-sqlplus-linux.x64-19.9.0.0.0dbru.zip /usr/lib/oracle/19.9/client64
    
        cd /usr/lib/oracle/19.9/client64
    
        sudo unzip instantclient-basic-linux.x64-19.9.0.0.0dbru.zip
        sudo unzip instantclient-sdk-linux.x64-19.9.0.0.0dbru.zip
        sudo unzip instantclient-sqlplus-linux.x64-19.9.0.0.0dbru.zip
    
        sudo mv instantclient_19_9 lib
        
    

    Paso 4

    A continuación, necesitamos crear un enlace simbólico a los archivos de Instant Client.

        cd /usr/lib/oracle/19.9/client64/lib/    
        sudo ln -s libclntsh.so.19.1 libclntsh.so (Puede que ya exista)
        sudo ln -s libocci.so.19.1 libocci.so (Puede que ya exista)
    

    Paso 5

    Agregue la carpeta a nuestro ldconfig.
        sudo su -    
        echo /usr/lib/oracle/19.9/client64/lib > /etc/ld.so.conf.d/oracle.conf
    

    Paso 6

    Actualice los enlaces de tiempo de ejecución de Dynamic Linker

        ldconfig
    

    Hecho. Ahora podemos pasar a la siguiente parte.


    Instalar paquetes adicionales


    Para instalar la extensión OCI8, necesitamos instalar algún paquete adicional en nuestro servidor.

    Paso 1

    Ejecute estos comandos:

        sudo apt-get install php-dev php-pear build-essential libaio1
    

    Paso 2

    Una vez instalado, necesitamos obtener el archivo OCI8. Pero, antes de eso, necesitamos actualizar el canal PECL.

        sudo pecl channel-update pecl.php.net
    

    Luego instalaremos oci8

        sudo pecl install oci8 (php 8)
        sudo pecl install oci8-2.2.0  (php 7.)
    
    Ver documentacion de pecl

    Cuando se le solicite la ubicación del Instant Client, ingrese lo siguiente:

        
        instantclient,/usr/lib/oracle/19.9/client64/lib
    

    Al finalizar deberia mostrar:

        Build process completed successfully
        Installing '/usr/lib/php/20190902/oci8.so'
        install ok: channel://pecl.php.net/oci8-2.2.0
        configuration option "php_ini" is not set to php.ini location
        You should add "extension=oci8.so" to php.ini    
    

    Paso 3

    Necesitamos decirle a PHP que cargue la extensión OCI8.

        sudo su -
        sudo echo "extension=oci8.so" >> /etc/php/7.4/fpm/php.ini
        echo "extension=oci8.so" >> /etc/php/7.4/cli/php.ini
    

    Paso 4

    Actualiza el servidor.

        sudo shutdown -r now
    
        sudo service php7.4-fpm restart
    

    Hasta aqui funciona el cli pero no fpm


    Configurar fpm


    Paso 1

    cd /etc/php/7.4/mods-available/
    sudo touch oci.ini
    sudo vi oci.ini
    
    agregar a oci.ini
        extension = oci8.so
    

    Paso 2

    Ahora cree un enlace simbólico como este:

        cd /etc/php/7.4/fpm/conf.d
        sudo ln -s /etc/php/7.4/mods-available/oci.ini 20-oci.ini
    

    Paso 3

    Actualiza el servidor.

        sudo shutdown -r now
    
        sudo service php7.4-fpm restart
    

    Paso 4

    Ahora crea un archivo php info

        
        cd /var/www/html/
        sudo touch info.php
        sudo vi info.php
    

    agregar a info.php

        <?php
            phpinfo();
    

    Deberia mostrar la seccion oci

        oci8
        OCI8 Support	enabled
        OCI8 DTrace Support	disabled
        OCI8 Version	2.2.0
        Oracle Run-time Client Library Version	19.9.0.0.0
        Oracle Compile-time Instant Client Version 19.9
    

    Configurar Sqlplus (opcional)


    Paso 1

    Agregando rutas al .bashrc

        cd $h
        vi .bashrc
    

    Agregar

    export ORACLE_HOME=/usr/lib/oracle/19.9/client64
    export TNS_ADMIN=/usr/lib/oracle/19.9/client64/network/admin
    export PATH=$PATH:$ORACLE_HOME/lib
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib
    export EDITOR=vi
    

    Paso 2

    Crear el archivo tnsnames.ora

        cd /usr/lib/oracle/19.9/client64
        sudo mkdir /usr/lib/oracle/19.9/client64/network
        sudo mkdir /usr/lib/oracle/19.9/client64/network/admin
        cd /usr/lib/oracle/19.9/client64/network/admin
        sudo touch tnsnames.ora
        sudo vi tnsnames.ora
    

    Agregar

    orcl =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
         )
        (CONNECT_DATA =
          (SERVICE_NAME = orcl)
        )
      )
    

    Por ultimo vamos a probar

        sqlplus system/system@orcl
    

    3 comentarios:

    Unknown dijo...

    ACTUALIZACION A INSTANTCLIENTE 21.3 Y CON PDO_OCI

    #!/bin/bash

    # FUENTE GENERAL: https://gist.github.com/eSkiSo/781269c79b4dd740e90fcc059c1985ae

    # step 1
    # fuentes en https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
    mkdir ~/Descargas
    cd ~/Descargas
    wget https://download.oracle.com/otn_software/linux/instantclient/213000/instantclient-basic-linux.x64-21.3.0.0.0.zip
    wget https://download.oracle.com/otn_software/linux/instantclient/213000/instantclient-sdk-linux.x64-21.3.0.0.0.zip
    wget https://download.oracle.com/otn_software/linux/instantclient/213000/instantclient-sqlplus-linux.x64-21.3.0.0.0.zip

    # step 2
    mkdir /usr/lib/oracle
    mkdir /usr/lib/oracle/21.3
    mkdir /usr/lib/oracle//client64

    # Step 3
    cd ~/Descargas
    cp instantclient-basic-linux.x64-21.3.0.0.0.zip /usr/lib/oracle/21.3/client64
    cp instantclient-sdk-linux.x64-21.3.0.0.0.zip /usr/lib/oracle/21.3/client64

    cd /usr/lib/oracle/21.3/client64

    apt install unzip
    unzip instantclient-basic-linux.x64-21.3.0.0.0.zip
    unzip instantclient-sdk-linux.x64-21.3.0.0.0.zip

    mv instantclient_21_3 lib

    # Step 4 -> no hace falta

    # step 5
    echo /usr/lib/oracle/21.3/client64/ > /etc/ld.so.conf.d/oracle.conf

    # Step 6
    # echo /usr/lib/oracle/21.3/client64/lib >> /etc/ld.so.conf.d/oracle.conf
    # ldconfig

    # Step 7
    apt-get --force install php-dev php-pear build-essential libaio1 php-json

    # Step 8
    # pecl channel-update pecl.php.net => NO
    pecl install oci8-2.2.0 # CONTESTAR A LA PREGUNTA PATH: instantclient,/usr/lib/oracle/21.3/client64/lib

    # Step 6bis, by https://stackoverflow.com/questions/47833041/unable-to-load-dynamic-library-oci8-so-php-7-2
    echo /usr/lib/oracle/21.3/client64/lib > /etc/ld.so.conf.d/oracle.conf
    ldconfig

    # https://diegofranca.dev/2020/05/05/configurando-o-oci8-e-pdo_oci-no-php7/
    echo "export LD_LIBRARY_PATH=/usr/lib/oracle/21.3/client64/lib/" >> /etc/apache2/envvars
    echo "export ORACLE_HOME=/usr/lib/oracle/21.3/client64/lib/" >> /etc/apache2/envvars
    echo "LD_LIBRARY_PATH=/usr/lib/oracle/21.3/client64/lib/:$LD_LIBRARY_PATH" >> /etc/environment
    # reiniciar
    mkdir /tmp/php
    cd /tmp/php
    # descargar la version fuente de php que este instalada en el sistema
    wget https://www.php.net/distributions/php-7.4.21.tar.gz
    tar xzvf php-7.4.21.tar.gz
    cd php-7.4.21/ext/pdo_oci/
    phpize
    ./configure --with-pdo-oci=instantclient,/usr/lib/oracle/21.3/client64/lib/
    make
    make install

    # Step 9
    # ELEGIR VERSION DE PHP:
    echo "extension=oci8.so" > /etc/php/7.4/cli/php.ini
    echo "extension=pdo_oci.so" >> /etc/php/7.4/cli/php.ini # probablemente no haga falta
    # echo "extension=oci8.so" >> /etc/php/7.3/cli/php.ini
    # echo "extension=pdo_oci.so" >> /etc/php/7.3/cli/php.ini # probablemente no haga falta

    # systemctl restart apache2.service

    # Step 10
    # ELEGIR VERSION DE PHP:
    # echo extension=oci8.so > /etc/php/7.3/mods-available/oci8.ini
    # echo extension=pdo_oci.so > /etc/php/7.3/mods-available/pdo_oci.ini
    echo extension=oci8.so > /etc/php/7.4/mods-available/oci8.ini
    echo extension=pdo_oci.so > /etc/php/7.4/mods-available/pdo_oci.ini

    # Setp 11
    # ELEGIR:a
    # ln -s /etc/php/7.3/mods-available/oci8.ini /etc/php/7.3/apache2/conf.d/20-oci8.ini
    # ln -s /etc/php/7.3/mods-available/pdo_oci.ini /etc/php/7.3/apache2/conf.d/20-pdo_oci.ini
    ln -s /etc/php/7.4/mods-available/oci8.ini /etc/php/7.4/apache2/conf.d/20-oci8.ini
    ln -s /etc/php/7.4/mods-available/pdo_oci.ini /etc/php/7.4/apache2/conf.d/20-pdo_oci.ini

    systemctl restart apache2.service

    # step 12
    php -i | grep oci

    Carlos Juan dijo...

    Gracias,
    Ahora uso Debian y las guias saldran en dicho sistema operativo.

    k@beza dijo...

    Excelente, probé con las ultimas versiones de todo y quedó andando perfecto
    Gracias