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 otnsnames.ora
arquivo usando aTNS_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
.Respostas:
Coloque os arquivos
sqlnet.ora
eldap.ora
em seu$ORACLE_ADMIN
diretório e certifique-se de definir as variáveis de ambiente. Eu fiz o meuTNS_ADMIN
diretório(Linux) meu .bashrc
E consegui me conectar a um banco de dados que não está no meu
tnsnames.ora
fonte