Tengo una aplicación Java que utiliza JDBC (a través de JPA) que se conectaba a una base de datos de desarrollo utilizando el nombre de host, el puerto y el SID de Oracle, así:
jdbc:oracle:thin:@oracle.hostserver1.mydomain.ca:1521:XYZ
XYZ era el SID de Oracle. Ahora necesito conectarme a una base de datos Oracle diferente que no utiliza un SID, pero utiliza un Oracle "Service Name" en su lugar.
He intentado esto pero no funciona:
jdbc:oracle:thin:@oracle.hostserver2.mydomain.ca:1522:ABCD
ABCD es el nombre del servicio de la otra base de datos.
¿Qué estoy haciendo mal?
http://download.oracle.com/docs/cd/B28359_01/java.111/b31224/urls.htm#BEIDHCBA
Sintaxis de nombres de servicio de estilo fino
Los nombres de servicio de estilo Thin son soportados únicamente por el controlador JDBC Thin. La sintaxis es:
@//nombre_de_host:número_de_puerto/nombre_de_servicio
Por ejemplo:
jdbc:oracle:thin:scott/tiger@//myhost:1521/myservicename
Así que yo probaría:
jdbc:oracle:thin:@//oracle.hostserver2.mydomain.ca:1522/ABCD
Además, según la respuesta de Robert Greathouse, también puede especificar el nombre del TNS en la URL JDBC como se indica a continuación:
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)))
También puede especificar el nombre del TNS en la URL JDBC como se indica a continuación
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)))
Prueba esto: jdbc:oracle:thin:@oracle.hostserver2.mydomain.ca:1522/ABCD
Editar: por el comentario de abajo esto es realmente correcto: jdbc:oracle:thin:@//oracle.hostserver2.mydomain.ca:1522/ABCD
(nota el //
)
Aquí hay un enlace a un artículo útil