En partie en raison de problèmes avec des versions conflictuelles ou de la difficulté d'installation complète du client Oracle, mon équipe de développement (dont je suis membre) s'oriente vers l'utilisation d' Oracle Instant Client et évite l'installation sur nos machines de développement pour la plupart de nouveaux projets. Cela a plutôt bien fonctionné, même au point que nous déployons en production avec cette configuration. Étant donné que nous sommes principalement une boutique .NET, nous utilisons le client natif (avec des wrappers .NET), plutôt que Java.
Désormais, un client exige que nous enregistrions le service de base de données auprès d'un serveur LDAP et que nous utilisions le serveur LDAP pour la recherche de nom. Ils ont fourni sqlnet.ora
et ldap.ora
fichiers (et un fichier de configuration de chiffrement) qui l' accompagne semblent corrects. En particulier, le sqlnet.ora
fichier spécifie LDAP comme source possible pour rechercher les noms de service réseau:
names.directory_path=(tnsnames,ldap)
Je suis convaincu que la machine avec laquelle je travaille peut utiliser LDAP pour accéder au service car j'ai pu le faire en utilisant SQL Developer (ce qui m'a permis de saisir directement les informations LDAP). En supposant qu'ils sont corrects, comment puis-je obtenir Instant Client pour reconnaître cette configuration et utiliser LDAP pour la recherche de nom?
Ce que j'ai essayé jusqu'à présent
J'ai essayé de définir la TNS_ADMIN
variable d'environnement dans le répertoire qui contient les fichiers fournis, et bien que cela fonctionne bien pour que Instant Client reconnaisse un tnsnames.ora
fichier, cela ne semble pas être suffisant pour le faire commencer à regarder LDAP. Voici les résultats (avec les chemins, noms d'utilisateur et mots de passe modifiés):
(Les commandes suivantes se trouvent être l'invite de commande Windows, mais j'imagine que quelque chose de similaire est faisable sur Linux. La version sqlplus
ici est également la version instantanée, avec les binaires Instant Client dans le même répertoire.)
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
Note complémentaire
Y a-t-il des balises pour TNS, LDAP ou Instant Client (ou même juste un client Oracle normal) qui pourraient être ajoutées à cette question? Je n'ai pu en trouver aucun.
where
(C:\TEMP\sqlplus.exe
). Pour être plus précis,sqlplus
n'est pas "installé" sur la machine. Il se trouve juste dans le répertoire actuel, avec les binaires clients à côté. Il reprend définitivement letnsnames.ora
fichier en utilisant laTNS_ADMIN
variable d'environnement, car cela est désactivé dans un répertoire complètement différent.where oci.dll
. Il donne également le résultat escompté:C:\TEMP\oci.dll
.Réponses:
Placez les fichiers
sqlnet.ora
etldap.ora
dans votre$ORACLE_ADMIN
répertoire et assurez-vous de définir les variables d'environnement. J'ai fait le mien l'TNS_ADMIN
annuaire(Linux) mon .bashrc
Et j'ai pu me connecter à une base de données pas dans mon
tnsnames.ora
la source