2010-01-25 5 views
8

बॉर्डरलाइन सर्वरफॉल्ट प्रश्न, लेकिन मुझे लगा कि मैं पहले यहां कोशिश करूँगा क्योंकि मैंने अतीत में ओरेकल सवालों के साथ भाग्य लिया था।टीएनएस क्या है: ओरेकल के संदर्भ में श्रोता?

मैं PHP से ऑरैकल डेटाबेस से कनेक्ट करने का प्रयास कर रहा हूं, और मुझे निम्न त्रुटि मिल रही है।

ORA-12505: TNS:listener does not currently know of SID given in connect descriptor 

यह त्रुटि है कि PHP रिपोर्ट, और त्रुटि जो ओरेकल के listener.log में दिखाई देती है।

मेरी तत्काल समस्या इस त्रुटि को ठीक कर रही है। मुझे लगता है कि बड़ा सवाल यह है कि ओरेकल कनेक्शन मॉडल कैसे काम करता है?

यह एक विकास वातावरण में है जो मेरी स्थानीय विंडोज मशीन पर चल रहा है और अब तक काम कर रहा है। दुर्भाग्यवश, पर्यावरण मुझे सौंपा गया था (मैंने इसे सेट नहीं किया था) और ने इसे सेट अप करने में मदद करने के लिए अनुपलब्ध हैं।

अगर मुझे MySQL या PostgreSQL (दो सिस्टम जो मैं अधिक परिचित हूं) के साथ एक ही त्रुटि प्राप्त कर रहा था, तो मैं यह सुनिश्चित करने के लिए जांच करता हूं कि डेटाबेस प्रक्रिया चल रही है, और उसके बाद मैन्युअल रूप से डेटाबेस से कनेक्ट करने का प्रयास करें उपयोगकर्ता नाम/पासवर्ड/कनेक्शन स्ट्रिंग। दुर्भाग्य से, मैं विंडोज़ (एसक्यूएल डेवलपर के अलावा) पर ओरेकल टूल्स से परिचित नहीं हूं और मुझे नहीं पता कि टीएनएस क्या है: श्रोता या एसआईडी ओरेकल के संदर्भ में हैं (मेरे पास अस्पष्ट विचार हैं, लेकिन अस्पष्ट विचार शायद ही कभी मदद करते हैं आप इस तरह कुछ डिबग कर रहे हैं)

किसी भी सामान्य सलाह की सराहना की जाएगी।

प्रति टिप्पणियां अपडेट:

मेरे tnsnames.ora फ़ाइल entires में के एक नंबर, प्रासंगिक प्रवेश किया जा रहा

OBS2 = 
    (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = steel-ae39650)(PORT = 1521)) 
    (CONNECT_DATA = 
     (SERVER = DEDICATED) 
     (SERVICE_NAME = OBS2) 
    ) 
) 

यह उदाहरणों की सूची में प्रतिबिंबित नहीं होता है जब मैं

चलाने है
LSNRCTL> services 

तो मुझे लगता है कि मेरा अगला सवाल यह है कि, मैं ओबीएस 2 इंस्टेंस को मैन्युअल रूप से शुरू करने का प्रयास कैसे करूं?

+1

एक टीएनएस प्रविष्टि ओरेकल को कनेक्शन स्ट्रिंग का हिस्सा है। –

उत्तर

7

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

फिर आप को देखने के लिए बाहर का परीक्षण कर सकते अगर टीएनएस श्रोता सही ढंग से कमांड लाइन उपकरण का उपयोग कर सेवा देखता है:

%>lsnrctl services 

कौन सा चाहिए निम्नलिखित की तरह उत्पादन कुछ:

Service "myservice" has 1 instance(s). 
    Instance "myinstance", status READY, has 1 handler(s) for this service... 
    Handler(s): 
     "D000" established:0 refused:0 current:0 max:1002 state:ready 
     DISPATCHER <machine: LOCALHOST, pid: 12345> 
     (ADDRESS=(PROTOCOL=tcp)(HOST=LOCALHOST)(PORT=6789)) 

आप कर सकते हैं तो कृपया प्रासंगिक टीएनएस प्रविष्टि पोस्ट करें (tnsnames.ora फ़ाइल में)? यह ORAHOME \ क्लाइंट या डीबी \ व्यवस्थापक \ NETWORK में स्थित है। यदि आपके पास क्लाइंट और सर्वर दोनों हैं, तो सुनिश्चित करें कि tnsnames.ora फ़ाइल की दोनों प्रतियां सही मान हैं, बस सुरक्षित रहें।

यहाँ 'mydb' नामक tnsnames.ora में एक उचित टीएनएस नाम परिभाषा का एक उदाहरण है:

myDbAlias = 
    (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 12345)(QUEUESIZE = 100)) 
    (CONNECT_DATA = 
     (SERVER = DEDICATED) 
     (SERVICE_NAME = myservice) 
    ) 
) 
+1

प्रासंगिक जानकारी के साथ अद्यतन प्रश्न। ऐसा लगता है कि प्रासंगिक टीएनएस प्रविष्टि श्रोता में दिखाई नहीं दे रही है। क्या टीएनएस इंस्टेंस मैन्युअल रूप से शुरू करने का कोई तरीका है? भी संभव रिलीज; यदि मैं डीबीसीए का उपयोग करता हूं और डेटाबेस/स्कीमा (दाएं शब्द?) के लिए "कॉन्फ़िगर डेटाबेस विकल्प" का प्रयास करता हूं, तो मुझे निम्न त्रुटि मिलती है: ORA-02778: लॉग निर्देशिका के लिए दिया गया नाम अमान्य है। मैंने एक नया डेटाबेस बनाकर और हालिया डंप आयात करके मेरी समस्या हल कर ली है, लेकिन मुझे अभी भी इस तरह की चीज़ के लिए किसी भी डिबगिंग तकनीक में दिलचस्पी होगी। –

+0

आपने कहा कि आप विंडोज़ पर हैं, इसलिए आपको यह देखने में सक्षम होना चाहिए कि क्या सेवा में विंडोज़ सेवाओं में सेवा चल रही है या नहीं। प्रारंभ-> व्यवस्थापक उपकरण-> सेवाएं। यह देखने के लिए देखें कि OracleServiceOBS2 (मैं उस नाम का अनुमान लगा रहा हूं, यह अलग हो सकता है)। फिर वहां से शुरू करें। आपकी टीएनएस श्रोता सेवा भी वहीं है, जिसका नाम ओरेकलऑराडब 10 जी_होम_1 टीएनएस लिस्टनर जैसा है। –

+1

तो, मुझे लगता है कि यहां मुझे भ्रमित करने वाला यह है कि एक ऑरैकल डेटाबेस कैसे हो सकता है, लेकिन दूसरा नहीं कर सकता। यही है, जब मैंने सेवाओं को सूचीबद्ध किया तो मैंने देखा कि अन्य डेटाबेस (ओबीएस 3, ओबीएस 4 इत्यादि) ऊपर थे। क्या सभी डेटाबेस OracleServiceOBS2 द्वारा नियंत्रित हैं, या क्या प्रत्येक डेटाबेस को अपना OracleServiceOBS2 मिलता है? (क्षमा करें अगर यह समझ में नहीं आता है, तो मुझे नहीं पता कि मुझे यहां क्या पता नहीं है!) –

1

माइक एटलस 'जवाब काफी व्यापक है, लेकिन ध्यान दें कि आप 10 ग्राम से जुड़ सकते हैं (या बाद में) डीबीएस जो डॉन

HTH

सी

2

बस टी जोड़ना चाहते थे [/ SERVICE_NAME]: [पोर्ट] 'टी का उपयोग कर [//] HOST_NAME एक प्रकाशित tnsname है ओ, जैसा कि मैंने हाल ही में एक समान कनेक्शन मुद्दा था जो मुझे तब तक पागल कर देता था जब तक कि मुझे पता नहीं चला कि क्या हो रहा था।

सबसे पहले, कीवर्ड एसआईडी और SERVICE_NAME बिल्कुल समान नहीं हैं। यह मेरी पहली गलत धारणा थी। कई वातावरण में आप एसआईडी और SERVICE_NAME का आदान-प्रदान कर सकते हैं, लेकिन हमेशा नहीं, यह निर्भर करता है।

जिसके अनुसार, अपने त्रुटि दूर देता है समस्या: आप SERVICE_NAME कि सफलतापूर्वक tnsnames का उपयोग करता है के बजाय एक कनेक्शन स्ट्रिंग में सिड निर्दिष्ट कर रहे हैं।

तो, यदि आप अपने कोड में कनेक्ट स्ट्रिंग निर्दिष्ट कर रहे हैं, तो कनेक्ट स्ट्रिंग में SERVICE_NAME कीवर्ड का उपयोग करने का प्रयास करें (* या, यदि आप पहले ही SERVICE_NAME का उपयोग कर रहे हैं और कनेक्ट नहीं कर सकते हैं, तो एसआईडी कीवर्ड * का उपयोग करने का प्रयास करें)।

अत्यधिक सरल जवाब मुझे पता है, लेकिन कोशिश करने में आसान है और किसी को कुछ सिरदर्द बचा सकता है।

आशा है कि मदद करता है।

+0

+1 क्योंकि यूजीएच, ओरेकल। –

संबंधित मुद्दे