2009-10-29 2 views
9

Nous nous connectons à Oracle à partir de notre code avec une classe de connecteur JDBC simple (personnalisée). Cette classe lit les propriétés de connexion à partir d'un fichier de ressources et tente de se connecter à Oracle (connexion thin).Quelle est l'URL JDBC correcte pour se connecter à une base de données RAC?

Toutefois, récemment, la base de données a été déplacée vers un RAC et l'application ne peut plus se connecter à la base de données.

est ici la sortie TNSPING:

Used LDAP adapter to resolve the alias 
Attempting to contact (DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=OFF)(FAILOVER=ON) 
(ADDRESS=(PROTOCOL=TCP)(HOST=tst-db1.myco.com)(PORT=1604)) 
(ADDRESS=(PROTOCOL=TCP)(HOST=tst-db2.myco.com)(PORT=1604)))(CONNECT_DATA=  
SERVICE_NAME=mydb1.myco.com)(SERVER=DEDICATED))) 
OK (80 msec) 

Quelle serait l'URL correcte de préciser dans ce cas?

Répondre

16

L'URL doit ressembler à ce qui suit:

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=OFF)(FAILOVER=ON) 
(ADDRESS=(PROTOCOL=TCP)(HOST=tst-db1.myco.com)(PORT=1604)) 
(ADDRESS=(PROTOCOL=TCP)(HOST=tst-db2.myco.com)(PORT=1604))) 
(CONNECT_DATA=(SERVICE_NAME=mydb1.myco.com)(SERVER=DEDICATED))) 

En fait, il suffit de copier les tnsentries de votre tnsnames.ora.

+0

Cela. Est. Impressionnant. Je n'avais aucune idée que vous pouvez copier directement à partir de 'tnsnames.ora'. Je viens de patauger à travers une chaîne de connexion JDBC plus tôt. Votre message a vraiment aidé. – kevinarpe

1

Vous pouvez regarder les pilotes OCI. Je crois qu'ils sont censés être plus performants et mieux gérer RAC.

de http://download.oracle.com/docs/cd/B10500_01/appdev.920/a96590/adg01dev.htm#429762

OCI offre des avantages significatifs par rapport à d'autres méthodes d'accès à une base de données Oracle:

contrôle
  • Plus fin sur tous les aspects de la conception de l'application.
  • Haut degré de contrôle sur l'exécution du programme.
  • Utilisation de techniques de programmation 3GL familières et d'outils de développement d'applications tels que les navigateurs et les débogueurs.
  • Prise en charge du SQL dynamique, méthode 4.
  • Disponibilité sur la plus large gamme de plates-formes de toutes les interfaces programmatiques Oracle.
  • Liaison dynamique et définition à l'aide de rappels.
  • Décrire les fonctionnalités pour exposer les couches de métadonnées du serveur.
  • Notification d'événement asynchrone pour les applications client enregistrées.
  • Capacité améliorée de langage de manipulation de données de tableau (DML) pour les INSERT, UPDATE et DELETE de tableau.
  • Possibilité d'associer une requête de validation à une exécution pour réduire les allers-retours.
  • Optimisation pour les requêtes utilisant des tampons de prélecture transparents pour réduire les allers-retours.
  • Sécurité du filetage de sorte que vous n'ayez pas besoin d'utiliser des verrous exclusifs mutuels (mutex) sur les poignées OCI.
  • La connexion du serveur en mode non bloquant signifie que le contrôle retourne au code OCI lorsqu'un appel est toujours en cours d'exécution ou ne peut pas aboutir.
+0

D'accord - mais la politique d'entreprise (soupir) recommande d'utiliser des clients légers plutôt que leurs équivalents «épais». – Vini

+1

Wow ... c'est juste ignorant. –

2

Le point d'un fichier tnsnames, le serveur Oracle Names plus, et la nouvelle méthode de serveur d'annuaire LDAP recommandé de résoudre les noms de base de données est d'éviter d'avoir à coder en dur les noms d'hôtes, les adresses, les ports, etc. dans votre chaîne de connexion. Les administrateurs de bases de données devraient pouvoir déplacer la base de données vers un nouvel hôte ou port sans rien casser.

La meilleure façon de définir votre URL mince connexion est avec la syntaxe suivante:

jdbc:oracle:thin:@ldap://<OID server name>:<OID port>/<DB SID or Service Name>,cn=OracleContext,dc=<yourdomain>

Donc, dans votre cas, si « oid » étaient le nom DNS-résoluble du serveur OID dans votre entreprise , et il utilise le port 5000, ce serait:

jdbc:oracle:thin:@ldap://oid:5000/mydb1,cn=OracleContext,dc=myco,dc=com

Si votre CBM n'a pas encore mis en place OID, ils sont lamentablement derrière. Il est temps d'obtenir de nouveaux DBA.

-squish

0

vous pouvez également utiliser ip scan dans Oracle 11g r2 au lieu de votre nœuds IP:

testi=(DESCRIPTION = 
(ADDRESS_LIST= 
(ADDRESS= (PROTOCOL = TCP)(HOST = scan-ip-or-name)(PORT = 1521)) 
(FAILOVER = on) 
(LOAD_BALANCE = on) 
) 
(CONNECT_DATA= 
(SERVICE_NAME = testi) 
)) 
0

Je ne sais pas si vous résoudre votre problème, mais je fait face au même problème et cette solution fonctionne pour moi:

jdbc:oracle:oci:@(DESCRIPTION=(FAILOVER=on)(ADDRESS=(PROTOCOL=TCP)(HOST=**mi.host**)(PORT=**1521**))(LOAD_BALANCE=yes)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=**serviceName**))) 
+0

Merci Francisco. J'ai eu la solution (voir réponse acceptée). De toute façon, je vous remercie de prendre le temps de donner un coup de main. – Vini

0

c'est ce que je l'ai utilisé:

jdbc:oracle:thin:@ldap://xxx:389/yyy,cn=OracleContext,dc=zzz,dc=com 
ldap://xxx:389/yyy,cn=OracleContext,dc=zzz,dc=com 
ldap://xxx:389/yyy,cn=OracleContext,dc=zzz,dc=com