Em parte devido a problemas com versões conflitantes ou à instalação completa do cliente Oracle, minha equipe de desenvolvimento (da qual eu sou membro) vem avançando no uso do Oracle Instant Client e evitando a instalação em nossas máquinas de desenvolvimento para a maioria novos projetos. Isso funcionou muito bem, até o ponto em que implantamos a produção com essa configuração. Como somos principalmente uma loja .NET, estamos usando o cliente nativo (com wrappers .NET), em vez do cliente Java.
Agora, um cliente exige que registremos o serviço de banco de dados em um servidor LDAP e utilizemos o servidor LDAP para procurar nomes. Eles têm fornecido sqlnet.ora
e ldap.ora
arquivos (e um arquivo de configuração de criptografia de acompanhamento) que parecem estar corretas. Em particular, o sqlnet.ora
arquivo especifica o LDAP como uma fonte possível para procurar nomes de serviços de rede:
names.directory_path=(tnsnames,ldap)
Estou confiante de que a máquina com a qual estou trabalhando pode usar o LDAP para acessar o serviço, pois consegui fazê-lo usando o SQL Developer (o que me permitiu inserir as informações LDAP diretamente). Supondo que eles estejam corretos, como posso fazer com que o Instant Client reconheça essa configuração e use LDAP para procurar o nome?
O que eu tentei até agora
Eu tentei definir o TNS_ADMIN
variável de ambiente como o diretório que contém os arquivos fornecidos e, embora isso funcione bem para fazer o Instant Client reconhecer um tnsnames.ora
arquivo, não parece suficiente para que ele comece a examinar o LDAP. Aqui estão os resultados (com caminhos, nomes de usuário e senhas alterados):
(Os comandos a seguir são o prompt de comando do Windows, mas imagino que algo semelhante seja possível no Linux. A sqlplus
vista aqui também é a versão instantânea, com os binários do Instant Client que acompanham o mesmo diretório.)
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
Existem tags para TNS, LDAP ou Instant Client (ou mesmo apenas o Oracle Client normal) que podem ser adicionadas a esta pergunta? Não consegui localizar nenhum.
where
( C:\TEMP\sqlplus.exe
). Para ser mais específico, sqlplus
não está "instalado" na máquina. Está apenas no diretório atual, com os binários do cliente ao lado. Definitivamente, ele está captando o tnsnames.ora
arquivo usando a TNS_ADMIN
variável de ambiente, pois está desativado em um diretório completamente diferente.
where oci.dll
também. Ele também dá o resultado esperado: C:\TEMP\oci.dll
.