Częściowo z powodu problemów z konfliktowymi wersjami lub bitów przy pełnej instalacji klienta Oracle, mój zespół programistów (do którego należę) posuwa się w kierunku korzystania z Oracle Instant Client i w większości przypadków unika instalacji na naszych komputerach programistycznych nowe projekty. Działa to całkiem dobrze, nawet do tego stopnia, że wdrażamy do produkcji przy użyciu tej konfiguracji. Ponieważ jesteśmy głównie sklepem .NET, używamy klienta natywnego (z opakowaniami .NET), a nie klienta Java.
Teraz klient wymaga, abyśmy zarejestrowali usługę bazy danych na serwerze LDAP i używali serwera LDAP do wyszukiwania nazw. Dostarczyły sqlnet.ora
i ldap.ora
pliki (oraz towarzyszący plik konfiguracyjny szyfrowania), które wydają się prawidłowe. W szczególności sqlnet.ora
plik określa LDAP jako możliwe źródło wyszukiwania nazw usług sieciowych:
names.directory_path=(tnsnames,ldap)
Jestem pewien, że komputer, z którym pracuję, może korzystać z LDAP w celu uzyskania dostępu do usługi, ponieważ mogłem to zrobić za pomocą SQL Developer (co pozwoliło mi na bezpośrednie wprowadzenie informacji LDAP). Zakładając, że są poprawne, w jaki sposób mogę sprawić, aby Instant Client rozpoznał tę konfigurację i używał LDAP do wyszukiwania nazw?
Co próbowałem do tej pory
Próbowałem ustawić TNS_ADMIN
zmienną środowiskową na katalog, który zawiera dostarczone pliki, i chociaż działa to dobrze, aby Instant Client rozpoznał tnsnames.ora
plik, wydaje się, że nie wystarczy, aby zaczął patrzeć na LDAP. Oto wyniki (ze zmienionymi ścieżkami, nazwami użytkowników i hasłami):
(Następujące polecenia są czasami wierszem poleceń systemu Windows, ale wyobrażam sobie, że coś podobnego można wykonać w systemie Linux. sqlplus
Widać tutaj również wersję Instant, z towarzyszącymi plikami binarnymi Instant Client w tym samym katalogu).
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
Dygresja
Czy istnieją tagi dla TNS, LDAP lub Instant Client (lub nawet zwykłego klienta Oracle), które można dodać do tego pytania? Nie mogłem znaleźć żadnego.
where
(C:\TEMP\sqlplus.exe
). Mówiąc ściślej,sqlplus
nie jest „instalowany” na komputerze. Po prostu siedzi w bieżącym katalogu, obok plików binarnych klienta. Zdecydowanie pobieratnsnames.ora
plik przy użyciuTNS_ADMIN
zmiennej środowiskowej, ponieważ jest on wyłączony w zupełnie innym katalogu.where oci.dll
. To również daje oczekiwany wynik:C:\TEMP\oci.dll
.Odpowiedzi:
Umieść pliki
sqlnet.ora
ildap.ora
w swoim$ORACLE_ADMIN
katalogu i upewnij się, że ustawiłeś zmienne środowiskowe. Zrobiłem mójTNS_ADMIN
katalog(Linux) mój .bashrc
I byłem w stanie połączyć się z DB, którego nie ma w moim
tnsnames.ora
źródło