Frage

Ich habe eine Java -Anwendung, die JDBC (über JPA) verwendet, die mit Hostname, Port und Oracle Sid eine Verbindung zu einer Entwicklungsdatenbank herstellt, wie folgt:

JDBC: Oracle: dünn:@oracle.hostserver1.mydomain.ca: 1521: xyz

XYZ war der Oracle Sid. Jetzt muss ich eine Verbindung zu einer anderen Oracle -Datenbank herstellen, in der kein SID verwendet wird, sondern stattdessen einen Oracle -Dienstnamen verwendet.

Ich habe es versucht, aber es funktioniert nicht:

JDBC: Oracle: dünn:@oracle.hostserver2.mydomain.ca: 1522: ABCD

ABCD ist der Dienstname der anderen Datenbank.

Was mache ich falsch?

War es hilfreich?

Lösung

http://download.oracle.com/docs/cd/b28359_01/java.111/b31224/urls.htm#beidhcba

Dünnstil-Dienstname Syntax

Die Namensnamen im dünnen Stil werden nur vom JDBC Thin Triver unterstützt. Die Syntax ist:

@// host_name: port_number/service_name

Zum Beispiel:

JDBC: Oracle: Thin: Scott/Tiger@// myhost: 1521/myServiceName

Also würde ich versuchen:

JDBC: Oracle: dünn:@// oracle.hostserver2.mydomain.ca:1522/abcd

Laut der Antwort von Robert Greathouse können Sie auch den TNS -Namen in der JDBC -URL wie unten angeben:

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

Andere Tipps

Es gibt also zwei einfache Möglichkeiten, um diese Arbeit zu machen. Die von Bert F veröffentlichte Lösung funktioniert gut, wenn Sie keine anderen speziellen oraklerspezifischen Verbindungseigenschaften liefern müssen. Das Format dafür ist:

jdbc:oracle:thin:@//HOSTNAME:PORT/SERVICENAME

Wenn Sie jedoch andere orakelspezifische Verbindungseigenschaften liefern müssen, müssen Sie den langen TNSnames-Stil verwenden. Ich musste dies kürzlich tun, um Oracle Shared Verbindungen zu ermöglichen (wobei der Server seine eigene Verbindungspooling durchführt). Das TNS -Format lautet:

jdbc:oracle:thin:@(description=(address=(host=HOSTNAME)(protocol=tcp)(port=PORT))(connect_data=(service_name=SERVICENAME)(server=SHARED)))

Wenn Sie mit dem Oracle TNSnames -Dateiformat vertraut sind, sollte dies Ihnen bekannt sein. Wenn nicht, goog es einfach für die Details.

Sie können auch den TNS -Namen in der JDBC -URL wie unten angeben

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

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

Bearbeiten: Per Kommentar unten ist tatsächlich richtig: jdbc:oracle:thin:@//oracle.hostserver2.mydomain.ca:1522/ABCD (beachten Sie das //)

Hier ist ein Verknüpfung zu einem hilfreichen Artikel

Diese Diskussion half mir, das Problem zu lösen, mit dem ich tagelang zu kämpfen hatte. Ich sah mich im ganzen Internet um, bis ich die von Jim hart am 18. Mai 11 um 15:17 Uhr fand. Mit dieser Antwort konnte ich eine Verbindung herstellen. Jetzt möchte ich zurückgeben und anderen mit einem vollständigen Beispiel helfen. Hier geht:

import java.sql.*; 

public class MyDBConnect {

    public static void main(String[] args) throws SQLException {

        try { 
            String dbURL = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=whatEverYourHostNameIs)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=yourServiceName)))";
            String strUserID = "yourUserId";
            String strPassword = "yourPassword";
            Connection myConnection=DriverManager.getConnection(dbURL,strUserID,strPassword);

            Statement sqlStatement = myConnection.createStatement();
            String readRecordSQL = "select * from sa_work_order where WORK_ORDER_NO = '1503090' ";  
            ResultSet myResultSet = sqlStatement.executeQuery(readRecordSQL);
            while (myResultSet.next()) {
                System.out.println("Record values: " + myResultSet.getString("WORK_ORDER_NO"));
            }
            myResultSet.close();
            myConnection.close();

        } catch (Exception e) {
            System.out.println(e);
        }       
    }
}

Falls Sie Eclipse verwenden, um Oracle ohne SID zu verbinden. Es gibt zwei Treiber, die IE auswählen können, Oracle Thin Triver und ein anderer Treiber. Wählen Sie andere Treiber aus und geben Sie den Dienstnamen in der Datenbankspalte ein. Jetzt können Sie direkt mit dem Servicenamen ohne SID eine Verbindung herstellen.

Beim Benutzen dag Anstatt von thin, Die folgende Syntax, die auf den Dienstnamen zeigt, funktionierte für mich. Das jdbc:thin Lösungen oben funktionierten nicht.

jdbc:dag:oracle://HOSTNAME:1521;ServiceName=SERVICE_NAME

Dies sollte funktionieren: jdbc:oracle:thin//hostname:Port/ServiceName=SERVICE_NAME

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top