部分原因是由于在完整安装Oracle客户端时出现版本冲突或位数问题,我的开发团队(我是其中的一员)已经开始使用Oracle Instant Client并避免在我们的开发机器上安装大多数新项目。这个方法效果不错,甚至可以用于生产环境部署。由于我们主要使用.NET技术,所以我们使用本地客户端(带有.NET封装器),而不是Java客户端。
现在一个客户要求我们将数据库服务注册到LDAP服务器,并使用LDAP服务器进行名称查找。他们提供了正确的
我相信我正在使用的机器可以使用LDAP访问服务,因为我能够使用SQL Developer这个工具(它允许我直接输入LDAP信息)来实现。假设他们是正确的,那么我该如何让Instant Client识别这个配置并使用LDAP进行名称查找呢?
到目前为止,我尝试了以下方法:
我尝试将TNS_ADMIN环境变量设置为包含提供文件的目录,虽然这对于使Instant Client识别tnsnames.ora文件没有问题,但似乎还不足以让它开始查找LDAP。以下是结果(路径、用户名和密码已更改):
(以下命令恰好是Windows命令提示符,但我想在Linux上也可以类似地操作。这里看到的sqlplus也是Instant版本,与同一目录中的Instant Client二进制文件配套使用。)
现在一个客户要求我们将数据库服务注册到LDAP服务器,并使用LDAP服务器进行名称查找。他们提供了正确的
sqlnet.ora
和ldap.ora
文件(以及相应的加密配置文件)。特别是sqlnet.ora
文件确实指定了LDAP作为查找网络服务名称的可能来源:names.directory_path=(tnsnames,ldap)
我相信我正在使用的机器可以使用LDAP访问服务,因为我能够使用SQL Developer这个工具(它允许我直接输入LDAP信息)来实现。假设他们是正确的,那么我该如何让Instant Client识别这个配置并使用LDAP进行名称查找呢?
到目前为止,我尝试了以下方法:
我尝试将TNS_ADMIN环境变量设置为包含提供文件的目录,虽然这对于使Instant Client识别tnsnames.ora文件没有问题,但似乎还不足以让它开始查找LDAP。以下是结果(路径、用户名和密码已更改):
(以下命令恰好是Windows命令提示符,但我想在Linux上也可以类似地操作。这里看到的sqlplus也是Instant版本,与同一目录中的Instant Client二进制文件配套使用。)
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
附注
有没有可以添加到这个问题的TNS、LDAP或即时客户端标签(甚至只是普通的Oracle客户端)?我找不到任何相关信息。
where
(C:\TEMP\sqlplus.exe
)时,它就是我期望的那个。更具体地说,sqlplus
并没有在机器上"安装"。它只是坐落在当前目录中,并且旁边有客户端二进制文件。它肯定是使用TNS_ADMIN
环境变量来读取tnsnames.ora
文件的,因为该文件位于一个完全不同的目录中。 - jpmc26where oci.dll
。它也给出了预期的结果:C:\TEMP\oci.dll
。 - jpmc26sqlplus USERNAME/PASSWORD@service_name.domain.something
,对吗?还是我理解错了? - jpmc26