2010-01-26 6 views
4

Nous avons une paire de serveurs Oracle qui sont configurés en tant que nœuds dans un cluster (excuses si ma terminologie est très éloignée). Dans mon dossier tnsnames.ora, nous avons une entrée qui ressemble àConnexion à un cluster Oracle en Java

EXAMPLE.GOV = 
    (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 1.2.3.4)(PORT = 1521)) 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 1.2.3.5)(PORT = 1521)) 
    (LOAD_BALANCE = yes) 
    (CONNECT_DATA = 
     (SERVER = DEDICATED) 
     (SERVICE_NAME = example.gov) 
    ) 
) 

et cela fonctionne lorsque je me connecte avec des programmes qui utilisent le fichier tnsnames.ora. Cependant, j'ai aussi un programme Java qui utilise la classe oracle.jdbc.pool.OracleDataSource pour établir une connexion

public static Connection connect() throws Exception { 
    OracleDataSource ods = new OracleDataSource(); 
    ods.setDriverType("thin"); 
    ods.setServerName("1.2.3.4"); 
    ods.setDatabaseName("example"); 
    ods.setPortNumber(1521); 
    ods.setUser("scott"); 
    ods.setPassword("tiger"); 
    return ods.getConnection(); 
} 

qui relie juste l'un des noeuds directement. Je voudrais plutôt utiliser l'approche tnsnames.ora d'équilibrage de charge, où il utilise l'équilibrage de charge ou quoi que ce soit pour se connecter à l'un des nœuds, de sorte que si l'un d'entre eux est en panne, il se connectera automatiquement à l'autre.

Depuis que je n'ai que deux nœuds, je pourrais facilement essayer d'ouvrir une connexion au premier nœud, puis si cela ne fonctionne pas ouvrir une connexion à la seconde. Cependant, je me demande s'il y a une façon plus correcte de le faire.

Je vois qu'il ya un paramètre setTNSEntryName, mais depuis mon tnsnames.ora est dans un endroit non standard, je avais besoin de définir la variable d'environnement TNS_ADMIN, que je ne suis pas sûr que je peux même le faire à partir de Java. Je ne suis pas non plus certain que cela fonctionnerait dans tous les cas.

Est-ce que quelqu'un sait comment se connecter à un cluster de nœuds Oracle à partir d'un programme Java?

+0

Cela fait quelque temps que je travaillais avec Oracle, si je me souviens bien si vous avez correctement configuré votre environnement client Oracle, alors le pilote Oracle est capable de prendre la même configuration pour utiliser le nom 'example.gov' de l'adresse IP. Vous pouvez donc essayer de définir la variable d'environnement TNS_ADMIN comme vous l'avez dit. Désolé pas beaucoup d'aide ici. –

Répondre

9

Pour le pilote mince Oracle JDBC Je pense que cela pourrait fonctionner comme l'URL de connexion:

jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on) 
(ADDRESS=(PROTOCOL=TCP)(HOST=1.2.3.4) (PORT=1521)) 
(ADDRESS=(PROTOCOL=TCP)(HOST=1.2.3.5) (PORT=1521)) 
(CONNECT_DATA=(SERVICE_NAME=example.gov))) 

Utilisez la méthode setUrl pour définir l'URL. Si l'URL est définie, toutes les autres propriétés telles que le nom de base de données, le nom du serveur, le numéro de port, le protocole réseau, tnsentry et le type de pilote seront ignorés.

Espérons que cela aide!

Questions connexes