Java JDBC - Come connettersi a Oracle usando il nome del servizio invece del SID

Ho un'applicazione Java che usa JDBC (via JPA) che si connetteva a un database di sviluppo usando hostname, porta e Oracle SID, come questo:

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

XYZ era il SID Oracle. Ora ho bisogno di connettermi a un diverso database Oracle che non usa un SID, ma usa un Oracle "Service Name" invece.

Ho provato questo ma non funziona:

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

ABCD è il nome del servizio dell'altro database.

Cosa sto facendo di sbagliato?

Soluzione

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

Sintassi del nome del servizio in stile sottile

I nomi di servizio in stile Thin sono supportati solo dal driver JDBC Thin. La sintassi è:

@//host_name:port_number/service_name

Per esempio:

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

Quindi proverei:

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

Inoltre, secondo la risposta di Robert Greathouse, puoi anche specificare il nome TNS nell'URL JDBC come segue:

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)))
Commentari (2)

Potete anche specificare il nome del TNS nell'URL JDBC come segue

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)))
Commentari (0)

Prova questo: jdbc:oracle:thin:@oracle.hostserver2.mydomain.ca:1522/ABCDjdbc:oracle:thin:@oracle.hostserver2.mydomain.ca:1522/ABCD<

Modifica: secondo il commento qui sotto questo è effettivamente corretto: jdbc:oracle:thin:@//oracle.hostserver2.mydomain.ca:1522/ABCD (nota il //)

Qui c'è un link ad un utile articolo

Commentari (1)