PHP – ORA-12505: TNS:listener does not currently know of SID given in connect

0 Comments

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

Deja tus preguntas o comentarios