Comment puis-je obtenir l'emplacement du fichier existe une clé de registre Windows indiquant l'emplacement de ce fichier? p> tnsnames.ora code> par code, dans une machine avec le client Oracle installé? p>
5 Réponses :
Selon le net qui dépend de la version d'Oracle et du répertoire de travail du processus SQL * Plus. Ce premier lien vous dit le Variable d'environnement spécifiant le chemin de base pour certaines versions (7, 8, 9i) d'Oracle. Si vous utilisez un autre, je suis sûr qu'il existe une manière similaire d'accéder au répertoire système. P>
Si vous répandez des versions de ces fichiers tout au long de la place et comptez sur le comportement «Rechercher un premier comportement local Tnsnames.ora» du client, je suppose que vous n'avez pas de chance. p>
Ce lien est quelque peu obsolète, mais le comportement est à peu près la même possible jusqu'à la dernière version (11g).
sur Windows, les emplacements les plus probables sont soit Bien sûr, il est possible d'avoir un client Oracle de travail sans ce fichier. Oracle a un éventail d'options de réseautage. Il existe de nombreuses façons d'obtenir une configuration de travail avec l'utilisation de TNSNAMES. Selon ce que vous essayez d'atteindre ici, votre premier port d'appel peut être le fichier in c # / .net Cela devrait obtenir vous les variables d'environnement: p> %% oracle_home% / réseau / admin code> ou
% TNS_ADMIN% code> (ou le paramètre de registre TNS_ADMIN). Ces deux couvrent presque toutes les installations.
sqlnet.ora code>, qui est également trouvé dans
% oracle_home% / réseau / admin code>. Cela devrait contenir une ligne qui ressemble à quelque chose comme ceci: p>
tnsnames code> signifie qu'il utilisera le fichier
tnsnames.ora code> fichier (deuxième dans ce cas).
LDAP CODE> et
Nom d'hôte CODE> Sont alternatives méthodes de résolution de la base de données. S'il n'y a pas de
tnsnames code> le fichier
tnsnames.ora code> sera ignoré s'il existe au bon endroit. P>
environnement.getenvironmentvariable ("oracle_home"); code> p>
environnement.getenvironmentvariable ("tns_admin"); code > p> p>
@Colin, malheureusement, ces variables ne sont pas toujours définies par le client Oracle. J'utilise Oracle 11g.
Utilisez-vous le client instantané ou le client régulier?
Je crois que le client instantané ne crée pas% oracle_home% ou tnsnames.ora par défaut
Sous Windows, vous devez regarder dans le registre HKLM \ Software \ Oracle - Vous y trouverez la trajectoire de la maison Oracle, il suffit de savoir qu'il pourrait y avoir plus d'une maison Oracle, Oracle permet d'installer plus d'une version chacune de sa propre maison.
Je ne suis pas un c # ou un gars Windows pour cette affaire, j'espère que cela aide. Le fichier Tnsnames.ora doit être situé dans: Si un emplacement alternatif a été spécifié, il doit être disponible via la clé de registre TNS_Admin. P> Voir ceci Link Pour plus d'informations sur la manière dont Oracle gère les noms TNS sur Windows. P > p>
List<string> logicalDrives = Directory.GetLogicalDrives().ToList(); List<string> result = new List<string>(); foreach (string drive in logicalDrives) { Console.WriteLine("Searching " + drive); DriveInfo di = new DriveInfo(drive); if(di.IsReady) result = Directory.GetFiles(drive, "tnsnames.ora", SearchOption.AllDirectories).ToList(); if (0 < result.Count) return; } foreach (string file in result) { Console.WriteLine(result); }
Ceci énumère chaque copie i> de tnsnames.ora. Il ne montre pas lequel est utilisé.
Pas ma question, mais vous avez raison, ce n'est pas clair. En pratique, la détermination de laquelle Tnsnames.ora est utilisée est normalement importante, mais je pensais que votre réponse était toujours une contribution utile, avec la mise en garde que j'ai ajoutée, alors je vous ai donné un uppote pour contrer le bowvote que vous avez reçu.
Il y a quelques années, j'ai eu le même problème.
À l'époque, je devais supporter l'oracle 9 et 10 afin que le code ne s'occupe que de ces versions, mais peut-être que cela vous sauve de certaines recherches.
L'idée est de:
+1 ressemble à un endroit raisonnable pour commencer. Bien entendu, la restauration des installations non standard et des différentes options de résolution ainsi que des choses comme le client instantané vous donneront probablement des poils gris.
Vous devriez essayer d'utiliser les variables d'environnement avant le registre de GetoracleShome ().
Heureusement, je ne dois plus jouer de la rattrapage avec Oracle, alors que quelqu'un d'autre maintient ce code maintenant :) Mais en vérifiant l'environnement avant d'interroger le registre qui sonne bien.
Vous réalisez que «signifie programmatiquement» par code, non?
@George Je cherche une solution, pas nécessairement basé sur le registre Windows, en raison de cette modification de la question.