Java JDBC - Comment se connecter à Oracle en utilisant le nom du service au lieu du SID ?

J'ai une application Java qui utilise JDBC (via JPA) et qui se connecte à une base de données de développement en utilisant le nom d'hôte, le port et le SID Oracle, comme ceci :

jdbc:oracle:thin:@oracle.hostserver1.mydomain.ca:1521:XYZ

XYZ était le SID d'Oracle. J'ai maintenant besoin de me connecter à une autre base de données Oracle qui n'utilise pas de SID, mais un "Service Name" Oracle.

J'ai essayé ceci mais cela ne fonctionne pas :

jdbc:oracle:thin:@oracle.hostserver2.mydomain.ca:1522:ABCD

ABCD est le nom de service de l'autre base de données.

Qu'est-ce que je fais de mal ?

Solution

http://download.oracle.com/docs/cd/B28359_01/java.111/b31224/urls.htm#BEIDHCBA

Syntaxe de nom de service de style fin.

Les noms de service de style fin sont pris en charge uniquement par le pilote JDBC Thin. La syntaxe est la suivante :

@//host_name:port_number/service_name

Par exemple :

jdbc:oracle:thin:scott/tiger@//myhost:1521/myservicename

Donc j'essaierais :

jdbc:oracle:thin:@//oracle.hostserver2.mydomain.ca:1522/ABCD

Par ailleurs, conformément à la réponse de Robert Greathouse, vous pouvez également spécifier le nom du TNS dans l'URL JDBC comme ci-dessous :

jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL=TCP)(HOST=blah.example.com)(PORT=1521)))(CONNECT_DATA=(SID=BLAHSID)(GLOBAL_NAME=BLAHSID.WORLD)(SERVER=DEDICATED)))
Commentaires (2)

Vous pouvez également spécifier le nom du TNS dans l'URL JDBC comme ci-dessous

jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL=TCP)(HOST=blah.example.com)(PORT=1521)))(CONNECT_DATA=(SID=BLAHSID)(GLOBAL_NAME=BLAHSID.WORLD)(SERVER=DEDICATED)))
Commentaires (0)

Essayez ceci : jdbc:oracle:thin:@oracle.hostserver2.mydomain.ca:1522/ABCD

Edit : selon le commentaire ci-dessous, ceci est en fait correct : jdbc:oracle:thin:@//oracle.hostserver2.mydomain.ca:1522/ABCD (notez le //)

Voici un lien vers un article utile.

Commentaires (1)