Verwenden Sie LDAP für die Namenssuche mit Oracle Instant Client

14

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.oraund ldap.oraDateien (und eine begleitende Verschlüsselungskonfigurationsdatei) , die korrekt zu sein scheinen. Insbesondere gibt die sqlnet.oraDatei 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_ADMINUmgebungsvariable auf das Verzeichnis zu setzen, das die bereitgestellten Dateien enthält, und obwohl dies gut funktioniert, um Instant Client eine tnsnames.oraDatei 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. sqlplusHier 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.

jpmc26
quelle
Ist es die richtige ausführbare Datei? "where sqlplus"
Bjarte Brandt
@BjarteBrandt Ja, ich erwarte es, wenn ich renne where( C:\TEMP\sqlplus.exe). Genauer gesagt, sqlplusist nicht auf dem Computer "installiert". Es befindet sich nur im aktuellen Verzeichnis mit den Client-Binärdateien daneben. Es geht definitiv darum, die tnsnames.oraDatei mit der TNS_ADMINUmgebungsvariablen zu erfassen, da sich diese in einem völlig anderen Verzeichnis befindet.
jpmc26
@BjarteBrandt Um zu bestätigen, dass die richtigen Client-Binärdateien verwendet werden, habe ich where oci.dllauch ausgeführt. Es gibt auch das erwartete Ergebnis: C:\TEMP\oci.dll.
jpmc26
könnte ein Domain-Problem sein. Hast du es auch mit FQ name probiert? (dbname_or_whatever.domainname)
ik_zelf
2
@ ora-600 Entschuldigung, ich habe diese Frage vergessen. Es stellte sich heraus, dass es Probleme mit den Konfigurationsdateien selbst gab, die uns von unserem Kunden zur Verfügung gestellt wurden. (Möglicherweise die Kerberos-Konfigurationsdatei, an die ich mich nicht ohne weiteres erinnern kann.) Witzig ist, dass ich in einer Entwicklungsumgebung gearbeitet habe, um dies zu tun. Es war ebenso problematisch, sie in Staging-Umgebungen zum Laufen zu bringen, und es ist es immer noch nicht so weit ich weiß in prod arbeiten. (Wir haben letztendlich einen lokalen TNS-Namen verwendet, um die App zum Laufen zu bringen.) Auf jeden Fall Geld für das Projekt verschwendet; Selbst wenn / wenn es in der Produktion funktioniert, wäre der Return on Investment im Vergleich zu den Kosten winzig.
jpmc26

Antworten:

1

Platzieren Sie die Dateien sqlnet.oraund ldap.orain Ihrem $ORACLE_ADMINVerzeichnis und stellen Sie sicher, dass Sie die Umgebungsvariablen festlegen. Ich habe mir das TNS_ADMINVerzeichnis gemacht

(Linux) my .bashrc

export TNS_ADMIN=/opt/oracle/instantclient_12_1/network/admin
export ORACLE_ADMIN=${TNS_ADMIN}

[ku14lts:/opt/oracle/instantclient_12_1/network/admin]
$ ls
ldap.ora  sqlnet.ora  tnsnames.ora

Und ich konnte mich mit einer DB verbinden, die nicht in meiner war tnsnames.ora

Kennzeichen
quelle