Java JDBC - Slik kobler du til Oracle ved hjelp av tjenestenavn i stedet for SID

Jeg har en Java-applikasjon som bruker JDBC (via JPA) som koblet til en utviklingsdatabase ved hjelp av vertsnavn, port og Oracle SID, som dette:

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

XYZ var Oracle SID. Nå må jeg koble til en annen Oracle-database som ikke bruker en SID, men i stedet bruker et Oracle "Service Name".

Jeg prøvde dette, men det fungerer ikke:

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

ABCD er tjenestenavnet til den andre databasen.

Hva gjør jeg feil?

Løsning

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

*Syntaks for tjenestenavn i tynn stil ****

Tjenestenavn i tynn stil støttes bare av JDBC Thin-driveren. Syntaksen er:

@//host_name:port_number/tjenestenavn

For eksempel:

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

Så jeg ville prøve:

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

I henhold til Robert Greathouse&# 39s svar kan du også spesifisere TNS-navnet i JDBC-URL-en som nedenfor:

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

Du kan også spesifisere TNS-navnet i JDBC-URL-en som nedenfor

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

Prøv dette: jdbc:oracle:thin:@oracle.hostserver2.mydomain.ca:1522/ABCD

Rediger: per kommentar nedenfor er dette faktisk riktig: jdbc:oracle:thin:@//oracle.hostserver2.mydomain.ca:1522/ABCD (merk //)

Her er en lenke til en nyttig artikkel

Kommentarer (1)