2009-12-03 6 views
2

Est-il possible de rediriger une déclaration TNS vers une autre?TNS Redirection?

Pour mon projet actuel, j'ai besoin de "retourner" du serveur au serveur dans certaines circonstances. Pour ce faire, j'utilise 3 entrées TNS.

Une pour maintenir le nom TNS que mon application se connectera à:

# application access to DB 
DB = 
    (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521)) 
    (CONNECT_DATA = 
     (SERVER = DEDICATED) 
     (SERVICE_NAME = SAMPLENAME) 
    ) 
) 

Pour que je puisse se connecter « manuellement » à l'une des bases de données moi-même, je l'utilise 2 plus d'entrées TNS:

# Central_Server "Manual" 
Central_Server = 
    (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521)) 
    (CONNECT_DATA = 
     (SERVER = DEDICATED) 
     (SERVICE_NAME = SAMPLENAME) 
    ) 
) 

# Local "Manual" 
Local = 
    (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) 
    (CONNECT_DATA = 
     (SERVER = DEDICATED) 
     (SERVICE_NAME = SAMPLENAME) 
    ) 
) 

plutôt que de peaufiner l'entrée TNS pour DB tout le temps, est-il possible de faire quelque chose le long des lignes de ?:

DB = Local 

or 

DB = Central_Server 

En raison de la stratégie de déploiement, je préfère ne pas implémenter cette logique directement dans mon application.

Merci :)

+0

Quel client est utilisé? Est-ce Windows, * Nux, ou? – DCookie

Répondre

0

Après toutes les suggestions données, j'ai trouvé la méthode la plus simple était de rester avec ma réécriture "complète" manuelle des entrées tnsnames.ora.

1

Vous pouvez configurer plusieurs adresses dans le fichier tnsnames.ora. Il n'est pas clair dans votre description si vous faites cela pour un basculement ou un équilibrage de charge. The Oracle documentation donne une bonne référence pour savoir à quoi cela devrait ressembler.

+0

Je suppose que je demande si vous pouvez faire un alias à un alias? – Mike

+0

Peut-être que je ne comprends pas. Vous dites "Pour mon projet actuel, j'ai besoin de" basculer "du serveur au serveur dans certaines circonstances" mais aussi dire "En raison de la stratégie de déploiement, je préfère ne pas implémenter cette logique dans mon application directement." Quel mécanisme envisagez-vous d'utiliser pour faire ce "retournement"? –

-1

En fonction de l'environnement, vous pouvez utiliser la variable d'environnement ORACLE_SID.

Par exemple SQLPLUS fred/flintstone (sans @ pour identifier explicitement une base de données) se connecte à la base de données spécifiée dans ORACLE_SID.

+0

Cela n'est vrai que si la base de données est locale au système sur lequel vous vous trouvez. Si vous allez sur le réseau cela ne fonctionne pas. – DCookie

0

Il me semble que vous devrez "modifier" quelque chose quelque part. Si vous vous connectez via sqlplus sur les fenêtres, essayez:

set local=<Your TNS Alias Here> 
sqlplus userid 

On * nix, essayez:

TWO_TASK=<your TNS Alias here>; export TWO_TASK 
sqlplus userid 

avec d'autres clients, il pourrait être plus délicat, selon qu'ils respectent les variables d'environnement ci-dessus . Bien sûr, si vous fournir une chaîne de connexion, vous pouvez simplement utiliser les éléments suivants pour vos chaînes de connexion:

[email protected]$TWO_TASK 

ou

[email protected]%local% 
0

Avez-vous envisagé des solutions en dehors de tnsnames.ora?

Si vous contrôlez le DNS local, vous pouvez configurer un alias. Quand vient le temps de passer, vous pouvez mettre à jour l'entrée DNS ... bien sûr, la propagation du DNS et des caches DNS locaux devrait être considérée.

Une deuxième possibilité est Oracle Connection Manager. Il peut servir de proxy et est hautement configurable. Vous auriez votre point d'entrée unique TNSNAMES sur l'instance de Connection Manager.Ensuite, lorsque vous voulez changer les choses, faites les changements dans les configurations de Connection Manager pour diriger votre port entrant vers un nouveau serveur sortant, puis mettez les changements en jeu.

+0

Merci pour votre réponse. La solution que j'espérais était simplement d'être une petite aide au développement. Je ne veux pas trop compliquer et recréer la roue pour ce que c'est une question relativement sans importance. Bien que le gestionnaire de connexion semble intéressant et je vais y jeter un coup d'oeil, merci. – Mike