Java JDBC - Hoe maak ik verbinding met Oracle met behulp van Service Name in plaats van SID

Ik heb een Java-toepassing die JDBC gebruikt (via JPA) en die verbinding maakte met een ontwikkelingsdatabase met behulp van hostnaam, poort en Oracle SID, zoals dit:

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

XYZ was de Oracle SID. Nu moet ik verbinding maken met een andere Oracle database die geen SID gebruikt, maar in plaats daarvan een Oracle "Service Name" gebruikt.

Ik heb dit geprobeerd, maar het werkt niet:

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

ABCD is de Service Naam van de andere database.

Wat doe ik verkeerd?

Oplossing

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

Thin-style Service Name Syntax

Thin-style service namen worden alleen ondersteund door de JDBC Thin driver. De syntaxis is:

@//host_name:port_number/service_name

Bijvoorbeeld:

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

Dus ik zou proberen:

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

Ook, per antwoord van Robert Greathouse's, kunt u de TNS naam in de JDBC URL specificeren zoals hieronder:

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

U kunt ook de TNS-naam opgeven in de JDBC URL zoals hieronder

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

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

Edit: per commentaar hieronder is dit de juiste: jdbc:oracle:thin:@//oracle.hostserver2.mydomain.ca:1522/ABCD (let op de //)

Hier is een link naar een nuttig artikel

Commentaren (1)