इस त्रुटि को ठीक से हल करने और उपयुक्त Oracle डेटाबेस से कनेक्ट करने के लिए, हमें Oracle कैसे व्यवहार करता है और इसलिए, सबसे पहले इस समस्या का कारण क्या है, इस पर थोड़ा विस्तार करने की आवश्यकता होगी।
SIDs बनाम SERVICE_NAMES
Oracle जो SID . के रूप में परिभाषित करता है, उसके बीच (मामूली) अंतर को समझना महत्वपूर्ण है SERVICE_NAME . की तुलना में , क्योंकि हम बाद में इस जानकारी का उपयोग उचित कनेक्शन स्ट्रिंग बनाने के लिए करेंगे।
Oracle में, सिस्टम आइडेंटिफ़ायर (या SID .) ) लंबाई में आठ वर्णों तक का एक स्थानीय पहचानकर्ता है जिसका उपयोग किसी विशेष डेटाबेस की पहचान करने और इसे सिस्टम पर अन्य डेटाबेस से अलग करने के लिए किया जाता है।
अक्सर SID उपसर्ग शब्द है या DB_UNIQUE_NAME जो DB_DOMAIN . से पहले आता है . उदाहरण के लिए, SID हमारे bookstore . के डेटाबेस, जैसा कि पूर्ण global database name . में देखा गया है bookstore.company.com . के ।
SERVICE_NAMES दूसरी ओर, उन नामों का प्रतिनिधित्व करते हैं जिनके द्वारा डेटाबेस इंस्टेंस को जोड़ा जा सकता है। एक SERVICE_NAME आमतौर पर SID . के प्रारूप का पालन करेगा डेटाबेस डोमेन के बाद, जैसे:DB_UNIQUE_NAME.DB_DOMAIN
टीएनएस श्रोता
जब क्लाइंट सीधे डेटाबेस से कनेक्ट होने के बजाय Oracle डेटाबेस से कनेक्ट करने का प्रयास कर रहा हो , एक ब्रोकर सेवा है जो क्लाइंट के लिए कनेक्शन अनुरोध में हस्तक्षेप करती है और उसे संभालती है।
इस ब्रोकर एप्लिकेशन को listener . के नाम से जाना जाता है और यह सुनने . का कार्य करता है आने वाले ग्राहक अनुरोधों के लिए। जब कोई अनुरोध प्राप्त होता है, तो listener प्रक्रियाएं और अग्रेषण जो service handler . का उपयोग करके उपयुक्त Oracle डेटाबेस सर्वर पर अनुरोध करते हैं , जो केवल listener . के बीच संबंध के रूप में कार्य करता है और डेटाबेस सर्वर।
TNS नाम और कॉन्फ़िगरेशन
Oracle डेटाबेस से कनेक्ट करते समय, आमतौर पर आपके डेटाबेस सर्वर में tnsnames.ora . होगा , जो एक कॉन्फ़िगरेशन फ़ाइल है जो सर्वर को NET_SERVICE_NAMES . के बारे में सूचित करती है जो वैध डेटाबेस कनेक्शन हैं। डिफ़ॉल्ट रूप से, यह फ़ाइल ORACLE_HOME/network/admin . पर स्थित होती है ।
उदाहरण के लिए, एक NET_SERVICE_NAME tnsnames.ora . में डिस्क्रिप्टर इस तरह प्रारूपित किया जा सकता है:
myDatabaseNetService =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = tcp)(HOST = localhost)(PORT = 1521)(QUEUESIZE = 100))
(CONNECT_DATA =
(SERVICE_NAME = bookstore.company.com)
)
)
यह एक NET_SERVICE_NAME को परिभाषित करेगा SERVICE_NAME . का उपयोग करके हमने पहले चर्चा की थी (bookstore.company.com ) और localhost . से कनेक्ट करना पोर्ट के माध्यम से 1521 ।
कनेक्शन स्ट्रिंग
Oracle वास्तव में डेटाबेस से कैसे जुड़ता है, इसके बारे में थोड़ा और ज्ञान के साथ, अब हम देख सकते हैं कि कैसे connection strings स्वरूपित हैं।
TNS नाम/NET_SERVICE_NAME के माध्यम से कनेक्ट करें
NET_SERVICE_NAME के माध्यम से कनेक्ट करते समय जैसा कि आपके tnsnames.ora . में बताया गया है config फ़ाइल में, आपको username . का उपयोग करना चाहिए , password , और फिर NET_SERVICE_NAME . संलग्न करें @ . के साथ प्रतीक, जैसे:
username/password@NET_SERVICE_NAME
इस प्रकार, हमारे पिछले NET_SERVICE_NAME . के लिए उपरोक्त विवरणक, वास्तविक NET_SERVICE_NAME हमने परिभाषित किया था myDatabaseNetService , इसलिए हमारी कनेक्शन स्ट्रिंग कुछ इस तरह दिख सकती है:
john/Hunter2@myDatabaseNetService
SERVICE_NAME के माध्यम से कनेक्ट करें
SERVICE_NAME . के माध्यम से कनेक्ट करते समय , आपको host . भी जोड़ना होगा और port , / . के साथ SERVICE_NAME . से पहले का प्रतीक स्वयं:
username/password@host:port/SERVICE_NAME
SID के द्वारा कनेक्ट करें
अंत में, यदि कॉन्फ़िगर किए बिना कनेक्ट हो रहा है NET_SERVICE_NAME या यहां तक कि SERVICE_NAME , आप ऐसा सीधे SID . के माध्यम से कर सकते हैं : . का उपयोग करके / . के बजाय प्रतीक SERVICE_NAME . के साथ प्रतीक कनेक्शन स्ट्रिंग:
username/password@host:port:SID