En parte como resultado de tener problemas con versiones conflictivas o de bits con la instalación completa del cliente Oracle, mi equipo de desarrollo (del cual soy miembro) se ha movido hacia el uso de Oracle Instant Client y ha evitado la instalación en nuestras máquinas de desarrollo para la mayoría proyectos nuevos. Esto ha funcionado bastante bien, incluso hasta el punto de implementarlo en producción con esta configuración. Como somos principalmente una tienda .NET, estamos utilizando el cliente nativo (con envoltorios .NET), en lugar del Java.
Ahora un cliente requiere que registremos el servicio de la base de datos con un servidor LDAP y usemos el servidor LDAP para buscar nombres. Han proporcionado sqlnet.ora
y ldap.ora
archivos (y un archivo de configuración de cifrado adjunto) que parecen ser correctos. En particular, el sqlnet.ora
archivo especifica LDAP como una posible fuente para buscar nombres de servicios de red:
names.directory_path=(tnsnames,ldap)
Estoy seguro de que la máquina con la que estoy trabajando puede usar LDAP para acceder al servicio, ya que pude hacerlo usando SQL Developer (que me permitió ingresar la información de LDAP directamente). Suponiendo que son correctos, ¿cómo puedo hacer que Instant Client reconozca esta configuración y use LDAP para buscar el nombre?
Lo que he probado hasta ahora
Intenté configurar la TNS_ADMIN
variable de entorno en el directorio que contiene los archivos proporcionados, y aunque esto funciona bien para que Instant Client reconozca un tnsnames.ora
archivo, no parece ser suficiente para que comience a mirar LDAP. Aquí están los resultados (con rutas, nombres de usuario y contraseñas modificadas):
(Los siguientes comandos resultan ser el símbolo del sistema de Windows, pero imagino que algo similar es factible en Linux. La sqlplus
vista aquí también es la versión Instant, con los binarios de Instant Client que acompañan en el mismo directorio).
C:\TEMP>SET TNS_ADMIN=C:\path\to\sqlnet\ldap\and\tnsnames\ora\files
C:\TEMP>echo %TNS_ADMIN%
C:\path\to\sqlnet\ldap\and\tnsnames\ora\files
C:\TEMP>sqlplus.exe USERNAME/PASSWORD@LOCALTNSNAME
SQL*Plus: Release 11.2.0.2.0 Production on Mon Jul 7 10:22:25 2014
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Produ
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
C:\TEMP>sqlplus.exe USERNAME/PASSWORD@LDAPTNSNAME
SQL*Plus: Release 11.2.0.2.0 Production on Mon Jul 7 10:24:21 2014
Copyright (c) 1982, 2010, Oracle. All rights reserved.
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified
Nota al margen
¿Hay etiquetas para TNS, LDAP o Instant Client (o incluso solo Oracle Client normal) que podrían agregarse a esta pregunta? No pude localizar ninguno.
where
(C:\TEMP\sqlplus.exe
). Para ser más específicos,sqlplus
no está "instalado" en la máquina. Simplemente se encuentra en el directorio actual, con los binarios del cliente al lado. Definitivamente está recogiendo eltnsnames.ora
archivo usando laTNS_ADMIN
variable de entorno, ya que está desactivado en un directorio completamente diferente.where oci.dll
. También da el resultado esperado:C:\TEMP\oci.dll
.Respuestas:
Coloque los archivos
sqlnet.ora
yldap.ora
en su$ORACLE_ADMIN
directorio y asegúrese de establecer las variables de entorno. Hice el mío elTNS_ADMIN
directorio(Linux) mi .bashrc
Y pude conectarme a una base de datos que no estaba en mi
tnsnames.ora
fuente