pedroescudero.info Sobre programación, tecnología, etc

18feb/104

Instalar Oracle Express Edition con soporte desde PHP5 en Ubuntu/Debian

Para instalar Oracle Express Edition en Ubuntu o Debian, de manera que luego podamos atacarla desde nuestra aplicación web desarrollada en PHP5 seguiremos los siguientes pasos.

A) INSTALACIÓN Y CONFIGURACIÓN DE ORACLE XE

1.- Instalación dependencias
#apt-get install bc libaio1

2.- Instalación del paquete , descargarlo desde aquí
#cd /usr/src
#dpkg -i  oracle-xe-universal_10.2.0.1-1.0_i386.deb

3.-  configuración de parámetros
/etc/init.d/oracle-xe configure

Specify the HTTP port that will be used for Oracle Application Express [8080]: 8080
Specify a port that will be used for the database listener [1521]:1521
Ingresar el password para las cuentas de administración (SYS & SYSTEM) : 123456
Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]: y

4.- Configuración de variables de entorno

#vi /root/.bashrc

##Variables de servidor oracle xe
ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_HOME
export ORACLE_SID=XE
export PATH

5.- Pruebas de variables

#echo $ORACLE_HOME
#echo $ORACLE_SID

6.- Verificar variables de inicio de oracle

#cat $ORACLE_HOME/network/admin/tnsnames.ora
#mkdir /etc/oracle
#cp $ORACLE_HOME/network/admin/tnsnames.ora /etc/oracle

7.- verificar inicio correcto

# cd $ORACLE_HOME/bin
# tnsping XE

si sale :

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = dapper)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))
TNS-12545: Connect failed because target host or object does not exist

reiniciar servicio : /etc/init.d/oracle restart

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = mail)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))
OK (10 msec)

entonces todo esta correcto.

8.-  conexión al servidor vía sqlplus como sys

#sqlplus sys as sysdba
Enter password: 123456

Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 – Production

SQL>

9.- Desbloquear usuario HR , para poder conectarnos

SQL> alter user HR account unlock;
User altered.

SQL> alter user HR identified by 654321;
User altered.

SQL> exit;

10.- Conectarse por sqlplus como usuario HR

#sqlplus HR/654321@XE

SQL*Plus: Release 11.1.0.6.0 – Production on Sat Nov 1 09:12:54 2008

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

Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 – Production

SQL>
11.- Estamos conectados ahora Probamos  realizar una consulta a una tabla ya creada en la instalación.

SQL> select * from JOBS;

JOB_ID       JOB_TITLE                   MIN_SALARY MAX_SALARY
———- ———————————– ———- ———-
AD_PRES    President                    20000      40000
AD_VP       Administration Vice President        15000      30000
AD_ASST    Administration Assistant             3000    6000
FI_MGR       Finance Manager                 8200      16000
FI_ACCOUNT Accountant                     4200    9000
AC_MGR       Accounting Manager                 8200      16000
AC_ACCOUNT Public Accountant                 4200    9000
SA_MAN       Sales Manager                10000      20000
SA_REP       Sales Representative              6000      12000

Hasta aquí tenemos correcto el servidor ahora configuramos apache php para hacer consultas

ANEXOS

1.-Verificar si el servicio esta activo , Aveces no se porque el servicio no se inicia durante el startup , para eso podemos verificar si el servicio esta activo.

# cd $ORACLE_HOME/bin
# tnsping XE

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = mail)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))
OK (10 msec)

B-1) INSTALACIÓN DEL SOPORTE PARA ORACLE EN PHP5

1.- Instalar dependencias
#apt-get install apache2.2-common libapache2-mod-php5 php5 php5-cli rpm libaio1

2.-Bajar los paquetes :

- oracle-instantclient-basic-11.1.0.1-1.i386.rpm
- oracle-instantclient-devel-11.1.0.1-1.i386.rpm
- oracle-instantclient-sqlplus-11.1.0.1-1.i386.rpm

de la siguiente direccion : http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html
3.-Instalar los paquetes
#rpm -ivh /root/oracle-instantclient-*
4.- Crear directorio para archivos de configuración
#mkdir /etc/oracle

5.- Copiar/verificar el archivo tnsnames.ora del servidor local/remoto dónde nos vamos a conectar y copiarlo a /etc/oracle/

###########################################
# tnsnames.ora Network Configuration File:

XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mail)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)

EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)

################################################################

Donde ¨mail¨ es el nombre del servidor.

6.- Agregar variables de entorno
#vim /root/.bashrc

#Variables de cliente oracle xe
export TNS_ADMIN=/etc/oracle
export SQLPATH=/usr/lib/oracle/11.1.0.1/client/bin
export LD_LIBRARY_PATH=/usr/lib/oracle/11.1.0.1/client/lib/;$LD_LIBRARY_PATH
export PATH=$PATH:$SQLPATH

7.- Reiniciar la sesión de root para que los cambios en las variables de entorno tengan efecto.

8.- Comprobar conectividad con servidor  local/remoto

#sqlplus usuario@servidor

Dónde usuario es el nombre de usuario o esquema y servidor es uno de los definidos en el tnsnames.ora
Pedirá la contraseña y si todo va bien nos devolverá el prompt del servidor Oracle.

B-2) Generar e Instalar módulo OCI en PHP

1.- Instalar dependencias
#apt-get install build-essential php5-dev

2.- Si no está creado, creamos el directorio de fuentes
#mkdir -p /usr/local/src

3.- Descargamos las fuentes PECL del futuro módulo OCI:
#wget http://pecl.php.net/get/oci8-1.2.4.tgz

4.- Descomprimimos
#tar xzf oci8-1.2.4.tgz

5.- Entramos al directorio creado
#cd /usr/local/src/oci8-1.2.4

6.- Preparamos el módulo para que sea generado para PHP
#phpize

7.- Configuramos el módulo para la generación
#./configure –with-oci8=instantclient,/usr/lib/oracle/11.1.0.1/client/lib/

La ruta es dónde se encuentran los *.so que hemos instalado con el InstantClient

8.- Construcción e instalación
#make
#make install

9.- Editamos la configuración de PHP.

#vim /etc/php5/apache2/php.ini

Añadimos la línea:
extension=oci8.so

y repetimos lo mismo para el archivo /etc/php5/cli/php.ini

10.- Reiniciamos Apache
#/etc/init.d/apache2 restart

11.- crear phpinfo.php para verificar el modulo oci8
#vi /var/www/apache2-default/phpinfo.php

<?php

// Muestra toda la información, por omisión INFO_ALL
phpinfo();

// Mostrar sólo la información de módulos.
// phpinfo(8) produce el mismo resultado.
phpinfo(INFO_MODULES);

?>

12.- Generar consulta basica

#vi /var/www/apache2-default/consulta.php

<?php

$connection = ocilogon(“HR”,”654321″,”//192.168.1.180/XE”);
$query = “select * from JOBS”;
$statement = oci_parse ($connection, $query);
oci_execute ($statement);
$statement = oci_parse ($connection, $query);
oci_execute ($statement);
echo “JOD_ID|JOB_TITLE|MIN_SALARY|MAX_SALARY”;
while ($row = oci_fetch_array ($statement, OCI_BOTH)) {
echo “$row[0]|$row[1]|$row[2]|$row[3]“;
}
oci_close($connection);

?>

- Donde  ¨192.168.1.180¨ seria la ip del servidor o maquina de la implementacion
- Verficiamos la consulta  entrando a :  http://ipdelamaquina/apache2-default/consulta.php   , si nos genera la consulta entonces ya tenemos todo completo y podemos empezar a desarrollar nuestras aplicaciones

Vía: http://jroliva.wordpress.com

Etiquetado con: , , , , 4 Comentarios