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