En el ultimo par de días he estado configurando un sistema Linux Debian para poder desarrollar con PHP y Oracle, algo que la verdad nunca antes había hecho por lo contradictorio de utilizar soluciones libres (como lo es PHP) contra algo tan cerrado y privativo como Oracle.
En fin, sucede que siendo mi primera vez utilizando esta combinación fue necesario crear un pequeño script de PHP para las pruebas de conexión a un servidor remoto con la base de datos Oracle.
PHP y Oracle Script de conexion
Este es el script para autenticar el usuario contra Oracle, solamente es necesario que cambien los parámetros de conexión para realizar sus pruebas. Por cierto, en los próximos dias publicaré aun articulo donde detallo como configurar un Linux Debian o Ubuntu para conectarse con PHP a Oracle.
< ?php $e=""; $user = 'USUARIO'; $password = 'CONTRASEÑA';
$server = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = 10.x.x.xxx) (PORT = 1521) ) (CONNECT_DATA = (SID = NOMBRE) ) )";
if (!$conn = @oci_connect($user,$password, $server,'we8iso8859p1') ) { $e = oci_error(); // For oci_connect errors pass no handle echo htmlentities($e['message']); //header.('login.php'); }else{ echo "Conexion completa "; } ?>
Y se puede ejecutar con el siguiente comando:
web-server :~$ php5 test_script.php ORA-12505: TNS:listener does not currently know of SID given in connect
Como podrán ver me estaba tirando el error ORA-12505, es hora de googlear.
ORA-12505: TNS:listener does not currently know of SID given in connect
Como resolver ORA-12505 PHP
Luego de investigar que significaba el código del error, me pude dar cuenta de que o el nombre SID del esquema esta malo en el tnsnames o el listener no escucha para ese esquema. Ya que no estoy utilizando un tnsnames, el error ha de estar del lado del listener de Oracle.
Bueno, antes que nada dentro del servidor donde esta Oracle debemos de ejecutar el comando “lsnrctl status” para verificar cuales esquemas existen en el servidor de base de datos.
bash-3.00$ lsnrctl status
LSNRCTL for Solaris: Version 10.2.0.4.0 - Production on 08-AUG-2012 16:29:08
Copyright (c) 1991, 2007, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=desarrollo)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Solaris: Version 10.2.0.4.0 - Production Start Date 16-APR-2012 08:25:14 Uptime 114 days 8 hr. 3 min. 54 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /oracle/u01/app/oracle/product/10.2.0/db_2/network/admin/listener.ora Listener Log File /oracle/u01/app/oracle/product/10.2.0/db_2/network/log/listener.log Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=desarrollo)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0))) Services Summary... Service "PLSExtProc" has 1 instance(s). Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service... Service "MIBASE" has 1 instance(s). Instance "MIBASE", status READY, has 1 handler(s) for this service... Service "MIBASEXDB" has 1 instance(s). Instance "MIBASE", status READY, has 1 handler(s) for this service... Service "MIBASE_XPT" has 1 instance(s). Instance "MIBASE", status READY, has 1 handler(s) for this service... The command completed successfully
Resulta que el nombre de la base que me habían proporcionado no existe en el servidor Oracle, por lo cual al cambiarlo en el script de PHP finalmente se logro conectar.
Via | Php Oracle