In parte a causa di problemi con versioni in conflitto o testimoni della completa installazione del client Oracle, il mio team di sviluppo (di cui sono membro) si è spostato verso l'utilizzo di Oracle Instant Client ed evitando l'installazione sulle nostre macchine di sviluppo per la maggior parte nuovi progetti. Questo ha funzionato abbastanza bene, fino al punto che abbiamo distribuito alla produzione con questa configurazione. Dato che siamo principalmente un negozio .NET, stiamo usando il client nativo (con wrapper .NET), anziché quello Java.
Ora un client richiede che registriamo il servizio di database con un server LDAP e utilizzi il server LDAP per la ricerca del nome. Hanno fornito sqlnet.ora
e ldap.ora
file (e un file di configurazione di crittografia di accompagnamento) che sembrano essere corretti. In particolare, il sqlnet.ora
file specifica LDAP come possibile fonte per la ricerca di nomi di servizi di rete:
names.directory_path=(tnsnames,ldap)
Sono sicuro che la macchina con cui sto lavorando può utilizzare LDAP per accedere al servizio poiché sono stato in grado di farlo utilizzando SQL Developer (che mi ha permesso di inserire direttamente le informazioni LDAP). Supponendo che siano corretti, come posso convincere Instant Client a riconoscere questa configurazione e usare LDAP per la ricerca del nome?
Quello che ho provato finora
Ho provato a impostare la TNS_ADMIN
variabile di ambiente sulla directory che contiene i file forniti e, sebbene tnsnames.ora
funzioni correttamente per far riconoscere a Instant Client un file, non sembra essere sufficiente per iniziare a guardare LDAP. Ecco i risultati (con percorsi, nomi utente e password modificati):
(I seguenti comandi sembrano essere Prompt dei comandi di Windows, ma immagino che qualcosa di simile sia fattibile su Linux. Il sqlplus
visto qui è anche la versione di Instant, con i binari di Instant Client di accompagnamento nella stessa directory.)
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 a margine
Esistono tag per TNS, LDAP o Instant Client (o anche solo un normale client Oracle) che potrebbero essere aggiunti a questa domanda? Non sono riuscito a trovarne nessuno.
where
( C:\TEMP\sqlplus.exe
). Per essere più specifici, sqlplus
non è "installato" sulla macchina. Si trova semplicemente nella directory corrente, con i file binari del client accanto. Sta sicuramente riprendendo il tnsnames.ora
file usando la TNS_ADMIN
variabile d'ambiente, poiché è disattivata in una directory completamente diversa.
where oci.dll
. Si dà anche il risultato atteso: C:\TEMP\oci.dll
.