Zum Teil aufgrund von Problemen mit widersprüchlichen Versionen oder Fehlern bei der vollständigen Installation des Oracle-Clients hat mein Entwicklerteam (zu dem ich gehöre) die Verwendung des Oracle Instant Client in Angriff genommen und die Installation auf unseren Entwicklungscomputern für die meisten vermieden neue Projekte. Dies hat ziemlich gut geklappt, sogar bis zu dem Punkt, an dem wir mit diesem Setup die Produktion bereitstellen. Da es sich hauptsächlich um einen .NET-Shop handelt, verwenden wir den nativen Client (mit .NET-Wrappern) und nicht den Java-Client.
Nun muss ein Client den Datenbankdienst bei einem LDAP-Server registrieren und den LDAP-Server für die Namenssuche verwenden. Sie haben zur Verfügung gestellt sqlnet.ora
und ldap.ora
Dateien (und eine begleitende Verschlüsselungskonfigurationsdatei) , die korrekt zu sein scheinen. Insbesondere gibt die sqlnet.ora
Datei LDAP als mögliche Quelle für die Suche nach Netzdienstnamen an:
names.directory_path=(tnsnames,ldap)
Ich bin zuversichtlich, dass der Computer, mit dem ich arbeite, LDAP für den Zugriff auf den Dienst verwenden kann, da dies mit SQL Developer möglich war (wodurch ich die LDAP-Informationen direkt eingeben konnte). Angenommen, sie sind korrekt. Wie kann ich Instant Client veranlassen, diese Konfiguration zu erkennen und LDAP für die Namenssuche zu verwenden?
Was ich bisher ausprobiert habe
Ich habe versucht, die TNS_ADMIN
Umgebungsvariable auf das Verzeichnis zu setzen, das die bereitgestellten Dateien enthält, und obwohl dies gut funktioniert, um Instant Client eine tnsnames.ora
Datei erkennen zu lassen, scheint es nicht ausreichend zu sein, um sie dazu zu bringen, sich mit LDAP zu befassen. Hier sind die Ergebnisse (mit geänderten Pfaden, Benutzernamen und Passwörtern):
(Die folgenden Befehle sind zufällig Windows-Eingabeaufforderungen, aber ich stelle mir vor, dass unter Linux etwas Ähnliches möglich ist. sqlplus
Hier ist auch die Instant-Version mit den zugehörigen Instant-Client-Binärdateien im selben Verzeichnis zu sehen.)
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
Randnotiz
Gibt es Tags für TNS, LDAP oder Instant Client (oder auch nur normalen Oracle Client), die zu dieser Frage hinzugefügt werden könnten? Ich konnte keine finden.
where
(C:\TEMP\sqlplus.exe
). Genauer gesagt,sqlplus
ist nicht auf dem Computer "installiert". Es befindet sich nur im aktuellen Verzeichnis mit den Client-Binärdateien daneben. Es geht definitiv darum, dietnsnames.ora
Datei mit derTNS_ADMIN
Umgebungsvariablen zu erfassen, da sich diese in einem völlig anderen Verzeichnis befindet.where oci.dll
auch ausgeführt. Es gibt auch das erwartete Ergebnis:C:\TEMP\oci.dll
.Antworten:
Platzieren Sie die Dateien
sqlnet.ora
undldap.ora
in Ihrem$ORACLE_ADMIN
Verzeichnis und stellen Sie sicher, dass Sie die Umgebungsvariablen festlegen. Ich habe mir dasTNS_ADMIN
Verzeichnis gemacht(Linux) my .bashrc
Und ich konnte mich mit einer DB verbinden, die nicht in meiner war
tnsnames.ora
quelle