2010-08-09 7 views
8

के साथ ओरेकल को लिंक करना मैं SQL Server 2005 को ओरेकल 10 जी डेटाबेस से लिंक करने का प्रयास कर रहा हूं। मैंने ओरेकल क्लाइंट को SQL सर्वर पर स्थापित किया है और यह सत्यापित किया है कि मैं दोनों tnsping और sqlplus का उपयोग कर ओरेकल डेटाबेस से कनेक्ट कर सकता हूं। जब मैं एसक्यूएल सर्वर में एक प्रश्न चलाने का प्रयास मैं निम्नलिखित हो:SQL सर्वर

OLE DB provider "OraOLEDB.Oracle" for linked server "ORA_CSSA2APD" returned message "ORA-12154: TNS:could not resolve the connect identifier specified".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "OraOLEDB.Oracle" for linked server "ORA_CSSA2APD".

कोई भी विचार? मैं निम्नलिखित प्रश्नों के दोनों कोई भाग्य के साथ की कोशिश की है:

select * from openquery(ORA_CSSA2APD, 'select count(rowid) from eservice_op.agent')

select count(rowid) from ORA_CSSA2APD..eservice_op.agent

उत्तर

5

मैं एक वातावरण पर शक सेटिंग। यही है, आपका सत्र TNSNAMES.ORA फ़ाइल को उठा रहा है लेकिन SQL सर्वर अंतर्निहित सत्र नहीं है। मैं जांच करूँगा ORACLE_HOME और, संभवतः, TNS_ADMIN सेट किया जा रहा है और इंगित कर रहा है।

क्या आप SQL सर्वर कनेक्शन के साथ डेटाबेस के लिए आसान कनेक्ट सिंटैक्स का उपयोग करने में सक्षम हैं।

आईई होस्ट नाम के साथ ORA_CSSA2APD की जगह: 1521/SERVICE_NAME

+0

दोनों के लिए पर्यावरण चर सेट और सटीक हैं। मैंने ऊपर उल्लिखित कनेक्ट सिंटैक्स की कोशिश नहीं की है, लेकिन मैंने यूडीएल बनाने और किसी भी भाग्य के साथ कनेक्शन स्ट्रिंग में कॉपी करने का प्रयास किया है। मैं उपरोक्त अपने वाक्यविन्यास का प्रयास करूंगा और आपको परिणाम बता दूंगा। मैं इसकी सराहना करता हूं। – bokoxev

+1

मैंने सेवा को पुनरारंभ किया क्योंकि मुझे यकीन नहीं था कि जब से मैंने TNS_ADMIN पर्यावरण चर सेट किया था और अब सब कुछ काम कर रहा है। सहायता के लिए धन्यवाद! – bokoxev

+0

@bokoxev की तरह, अगर सब कुछ ठीक लगता है, लेकिन काम नहीं कर रहा है, तो MSSQL प्रबंधन स्टूडियो से पूरे MSSQL सर्वर को पुनरारंभ करने का प्रयास करें, यह मेरे लिए काम करता है। – CsBalazsHungary

2

टीएनएस त्रुटि संदेश आम तौर पर कनेक्शन त्रुटिपूर्ण का मतलब है (उदाहरण के लिए मेजबान नायाब/निर्दिष्ट पोर्ट पर timesout है, या कि बस यह नहीं पता कि ORA_CSSA2APD को क्या इंगित करना है)।

विचार करने की एक बात यह है कि, क्या आप 64-बिट विंडोज का उपयोग कर रहे हैं और क्या आप 32-बिट या 64-बिट ओरेकल क्लाइंट (या संभवतः दोनों) का उपयोग कर रहे हैं। यदि आपके पास ओरेकल को कॉल करने की कोशिश कर रहे 64-बिट ओएस पर 32-बिट ऐप चल रहा है, तो उसे 32-बिट ओरेकल क्लाइंट की आवश्यकता है। 64-बिट ओएस पर 32-बिट क्लाइंट का उपयोग करना मुश्किल हो सकता है और इसे "प्रोग्राम फ़ाइलें (x86)" फ़ोल्डर में इंस्टॉल करना सुरक्षित नहीं है।

यह भी ध्यान following

में रखना विंडोज सर्वर 2003 की एक 64-बिट संस्करण में या Windows XP, % windir% \ System32 फ़ोल्डर आरक्षित है 64-बिट अनुप्रयोगों के लिए की। एक 32-बिट आवेदन System32 फ़ोल्डर का उपयोग करने की कोशिश करता है, का उपयोग निम्न फ़ोल्डर के लिए भेज दिया जाएगा: % WinDir% \ SysWOW64

64-बिट खिड़कियों के लिए

तो, 32 बिट सामान में है SysWOW64 फ़ोल्डर और 64 बिट सामग्री system32 फ़ोल्डर में है।

+0

ओएस और ओरेकल क्लाइंट दोनों 32-बिट हैं। – bokoxev

4

ओआरए: 12154 आम तौर पर इसका मतलब है कि जिस डीबी से आप कनेक्ट करने का प्रयास कर रहे हैं उसका उपनाम tnsnames.ora फ़ाइल में नहीं मिला था। (http://ora-12154.ora-code.com/ अधिक विस्तृत स्पष्टीकरण देखें।)

आपको यह सुनिश्चित करने की आवश्यकता है कि डेटा स्रोत एक उपनाम है जिसे tnsnames फ़ाइल के बारे में पता है (सर्वर पर जहां SQL सर्वर रहता है, भले ही आप कहां से क्वेरी चला रहे हों); एसक्यूएल सर्वर किसी अन्य ओरेकल क्लाइंट की तरह ही होगा और यह जानने की जरूरत है कि tnsnames.ora फ़ाइल से कनेक्ट करने के लिए कहां से कनेक्ट करना है, यह ओरेकल डीबी कहां से ब्योरा नहीं जानता है।

यदि आपके पास SQL ​​सर्वर सर्वर तक पहुंच नहीं है (रिडंडेंसी विभाग विभाग में से कोई एक है), तो आपको सर्वर व्यवस्थापक को आपके लिए सेट अप करने की आवश्यकता होगी।

(लिंक किए गए सर्वर डेटा स्रोत संपत्ति db आप लिंक का प्रयास कर रहे tnsnames.ora उर्फ ​​में उर्फ ​​होना चाहिए।)

HTH ...

+0

+1 - सबसे अधिक संभावना है। त्रुटि बहुत विशिष्ट है। – REW

+0

मैं SQLPlus का उपयोग करके कनेक्ट करने में सक्षम हूं और मैं सफलतापूर्वक सर्वर को tnsping कर सकता हूं इसलिए tnsnames फ़ाइल में कोई समस्या नहीं है और मैं tnnames में निर्दिष्ट उसी सेवा नाम का उपयोग कर रहा हूं जो sp_addlinkedserver कमांड के @ datasrc तर्क के रूप में है। कोई अन्य विचार? – bokoxev

+0

और एसक्यूएलप्लस SQL ​​सर्वर के समान मशीन पर चल रहा है? –

0

हमने पाया है कि एसक्यूएल सर्वर, किसी अज्ञात कारण के लिए, डिफ़ॉल्ट ओरेकल स्थानों में TNSNAMES.ORA फ़ाइल की तलाश शुरू कर दिया।

हम सफल परिणाम के साथ, निम्न स्थानों में TNSNAMES.ORA फ़ाइलें रख नहीं कर पाए:

32-बिट OS या 64-बिट ऑपरेटिंग सिस्टम पर 64-बिट पर एसक्यूएल सर्वर 32-बिट के लिए

%ProgramFiles%\Oracle 
%ProgramFiles%\Oracle\network\admin 

64-बिट ओएस पर एसक्यूएल सर्वर 32-बिट के लिए

%ProgramFiles% (x86)\Oracle 
%ProgramFiles% (x86)\Oracle\network\admin 

हम भी एसक्यूएल * का उपयोग कर कनेक्ट करने में सक्षम थे ही, लेकिन एसक्यूएल सर्वर नहीं कर सके। यह ध्यान रखना महत्वपूर्ण है कि एसक्यूएल * प्लस ने उसी TNSNAMES.ORA फ़ाइल का उपयोग नहीं किया था। यही कारण है कि एक काम किया।

1

यह समस्या मेरे साथ भी हुई, लेकिन केवल कुछ विंडोज उपयोगकर्ता खातों के साथ। OraOLEDB.Oracle (एसएसएमएस> सर्वर ऑब्जेक्ट्स> लिंक्ड सर्वर> प्रदान करता है> OraOLEDB.Oracle) प्रदान करने के लिए "इनप्रोसेस" प्रदाता विकल्प को सक्षम करने का एक संयोजन, SQL सर्वर विंडोज सेवा को पुनरारंभ करना और आखिरकार TNSNAMES.ora फ़ाइल पर अनुमतियों को समायोजित करना सीधे।