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 ?
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)))
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)))
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.