7
votes

Obtenir l'emplacement du fichier Tnsnames.ora par code

Comment puis-je obtenir l'emplacement du fichier tnsnames.ora par code, dans une machine avec le client Oracle installé?

existe une clé de registre Windows indiquant l'emplacement de ce fichier?


2 commentaires

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.


5 Réponses :


0
votes

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.

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.


1 commentaires

Ce lien est quelque peu obsolète, mais le comportement est à peu près la même possible jusqu'à la dernière version (11g).



7
votes

sur Windows, les emplacements les plus probables sont soit %% oracle_home% / réseau / admin ou % TNS_ADMIN% (ou le paramètre de registre TNS_ADMIN). Ces deux couvrent presque toutes les installations.

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 sqlnet.ora , qui est également trouvé dans % oracle_home% / réseau / admin . Cela devrait contenir une ligne qui ressemble à quelque chose comme ceci: xxx

tnsnames signifie qu'il utilisera le fichier tnsnames.ora fichier (deuxième dans ce cas). LDAP et Nom d'hôte Sont alternatives méthodes de résolution de la base de données. S'il n'y a pas de tnsnames le fichier tnsnames.ora sera ignoré s'il existe au bon endroit.

in c # / .net Cela devrait obtenir vous les variables d'environnement:

environnement.getenvironmentvariable ("oracle_home");

environnement.getenvironmentvariable ("tns_admin");


4 commentaires

@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.



0
votes

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: XXX

Si un emplacement alternatif a été spécifié, il doit être disponible via la clé de registre TNS_Admin.

Voir ceci Link Pour plus d'informations sur la manière dont Oracle gère les noms TNS sur Windows.


0 commentaires

2
votes
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); }

2 commentaires

Ceci énumère chaque copie 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.



10
votes

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:

  • Recherchez dans le registre pour déterminer la version client Oracle
  • essayer de trouver l'oracle_home
  • Finalement obtenir les noms Tnsns de la maison
    xxx

3 commentaires

+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.