Java JDBC - SID के बजाय Service Name का उपयोग करके Oracle से कैसे जुड़ें


251

मेरे पास एक जावा एप्लिकेशन है जो JDBC (JPA के माध्यम से) का उपयोग करता है जो होस्टनाम, पोर्ट और ओरेकल सिड का उपयोग करके एक विकास डेटाबेस से जुड़ रहा था, जैसे:

JDBC: ओरेकल: पतली: @ oracle.hostserver1.mydomain.ca: 1521: XYZ

XYZ Oracle SID था। अब मुझे एक अलग ओरेकल डेटाबेस से कनेक्ट करने की आवश्यकता है जो एक SID का उपयोग नहीं करता है, लेकिन इसके बजाय एक Oracle "सेवा नाम" का उपयोग करता है।

मैंने यह कोशिश की, लेकिन यह काम नहीं करता है:

JDBC: ओरेकल: पतली: @ oracle.hostserver2.mydomain.ca: 1522: एबीसीडी

ABCD दूसरे डेटाबेस का सेवा नाम है।

मैं क्या गलत कर रहा हूं?

जवाबों:


427

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

पतली शैली की सेवा का नाम सिंटेक्स

पतली शैली के सेवा नाम केवल JDBC पतले चालक द्वारा समर्थित हैं। वाक्य रचना है:

@ // HOST_NAME: port_number / SERVICE_NAME

उदाहरण के लिए:

JDBC: ओरेकल: पतली: स्कॉट / बाघ @ // myhost: 1521 / myservicename

तो मैं कोशिश करूँगा:

JDBC: ओरेकल: पतली: @ // oracle.hostserver2.mydomain.ca:1522/ABCD

इसके अलावा, रॉबर्ट ग्रीथहाउस के उत्तर के अनुसार, आप नीचे दिए गए JDBC URL में TNS नाम भी निर्दिष्ट कर सकते हैं:

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

क्या आप उत्तर पूर्णता प्राप्त करने के लिए @Robert Greathouse से प्रति उत्तर TNSNAMES प्रारूप के बारे में बिंदु को शामिल कर सकते हैं?
एलिस्टर

मेरे लिए यह @ के साथ काम नहीं करता था, मुझे jdbc: oracle: thin: // myhost: 1521 / myservicename का उपयोग करना था, लेकिन मैंने उपयोगकर्ता क्रेडेंशियल्स प्रदान नहीं किया
डैनियल

मैं Google App Script पर JDBC के पतले ड्राइवर का उपयोग करके Oracle से जुड़ने का तरीका जानने की कोशिश कर रहा हूँ और बिना सफलता के कई सिंटैक्स आज़माया। jdbc:oracle:thin:USER/PWD@//my.ip.address:1521/SERVICENAMEया jdbc:oracle:thin:@//my.ip.address.1521/SERVICENAME, उपयोगकर्ता नाम और पासवर्ड के तर्क के साथ jdbc.getConnection()। फिर भी गूंज रहा है।
बेंजामिन

92

तो इस काम को करने के दो आसान तरीके हैं। बर्ट एफ द्वारा पोस्ट किया गया समाधान ठीक काम करता है यदि आपको किसी अन्य विशेष ओरेकल-विशिष्ट कनेक्शन गुणों की आपूर्ति करने की आवश्यकता नहीं है। उसके लिए प्रारूप है:

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

हालांकि, यदि आपको अन्य ओरेकल-विशिष्ट कनेक्शन गुणों की आपूर्ति करने की आवश्यकता है, तो आपको लंबी TNSNAMES शैली का उपयोग करने की आवश्यकता है। मुझे यह हाल ही में ओरेकल साझा कनेक्शन (जहां सर्वर अपना कनेक्शन पूलिंग करता है) सक्षम करने के लिए करना था। TNS प्रारूप है:

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

यदि आप Oracle TNSNAMES फ़ाइल प्रारूप से परिचित हैं, तो यह आपको परिचित होना चाहिए। यदि नहीं, तो बस विवरण के लिए इसे Google करें।


24

आप नीचे दिए गए JDBC URL में TNS नाम भी निर्दिष्ट कर सकते हैं

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

17

इसे इस्तेमाल करे: jdbc:oracle:thin:@oracle.hostserver2.mydomain.ca:1522/ABCD

संपादित करें: प्रति टिप्पणी नीचे यह वास्तविक सही है: jdbc:oracle:thin:@//oracle.hostserver2.mydomain.ca:1522/ABCD(नोट करें //)

यहाँ एक उपयोगी लेख का लिंक दिया गया है


3
यह मेरे लिए काम नहीं करता था, मुझे उपयोग करना था jdbc:oracle:thin:@//oracle.hostserver2.mydomain.ca:1522/ABCD
WynandB

तो IP का उपयोग यहाँ के बजाय किया जा सकता है oracle.hostserver2.mydomain.ca?
बेंजामिन

8

इस चर्चा से मुझे उस मुद्दे को हल करने में मदद मिली जो मैं दिनों से संघर्ष कर रहा था। मैंने पूरे इंटरनेट पर चारों ओर देखा, जब तक कि मुझे जिम टफ द्वारा 18 मई 11 को 15:17 पर उत्तर नहीं मिला। उस उत्तर के साथ मैं जुड़ने में सक्षम था। अब मैं वापस देना चाहता हूं और एक पूर्ण उदाहरण के साथ दूसरों की मदद करना चाहता हूं। यहाँ जाता हैं:

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

1

यदि आप SID के बिना oracle को जोड़ने के लिए ग्रहण का उपयोग कर रहे हैं। चयन करने के लिए दो ड्राइवर हैं जैसे, ओरेकल थिन ड्राइवर और दूसरा अन्य ड्राइवर। अन्य ड्राइवरों का चयन करें और डेटाबेस कॉलम में सेवा का नाम दर्ज करें। अब आप SID के बिना सेवा नाम का उपयोग करके सीधे जुड़ सकते हैं।


इससे भी महत्वपूर्ण बात यह है कि आप पतले चालक के विपरीत कनेक्शन URL को पूरी तरह से निर्दिष्ट कर सकते हैं। मजेदार बात यह है कि, आपको अभी भी काम करने के लिए पतले चालक URL का उपयोग करना होगा (पतली शैली सेवा नाम केवल JDBC पतले चालक द्वारा समर्थित)। यहां बहुत सारे उदाहरण पोस्ट किए गए हैं।
एडी बाइस

0

dagइसके बजाय का उपयोग करते समय thin, सेवा नाम की ओर इशारा करते हुए नीचे दिए गए वाक्यविन्यास ने मेरे लिए काम किया। jdbc:thinसमाधान ऊपर काम नहीं किया।

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

1
कृपया अपने उत्तर में कुछ और जानकारी जोड़ने पर विचार करें कि क्या काम किया / नहीं किया - क्या काम किया या क्यों किया, इस बारे में कुछ पता नहीं है।
एजेडी

1
वर्थ नोटिंग है - आप एक विशिष्ट ड्राइवर का उपयोग कर रहे हैं। ओरेकल के पतले ड्राइवर रिटर्न का उपयोग करने का प्रयास: jdbc के लिए कोई उपयुक्त ड्राइवर नहीं मिला: dag: oracle: //
access_granted

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.