2011-08-26 3 views
5

नवीनतम अद्यतन (नवंबर 2 2011 9:00) मैं सेवा से TNSping चल की कोशिश की और यह काम करता हैं! हालांकि जब भी मैं कनेक्ट करने का प्रयास करता हूं तब भी मुझे त्रुटि 12154 मिलती है। मैं अब पूरी तरह उलझन में हूं, मैं समझ नहीं पा रहा हूं कि tnsping कैसे ठीक काम कर सकता है लेकिन कनेक्शन सेवा नाम को हल करने में असमर्थ है।एक खिड़कियों सेवा से Oracle से कनेक्ट नहीं कर (: ORA-12154: टीएनएस: त्रुटि सेवा का नाम हल नहीं कर सका (12154))

किसी कारण जब मैं एक खिड़कियों सेवा से निम्न कोड को चलाने के (एक टाइमर घटना पर) मैं त्रुटि मिलती है के लिए: ORA-12154: टीएनएस: सेवा का नाम हल नहीं कर सका (12154)

जब मैं चलाने विंडोज़ फॉर्म ऐप से सटीक एक ही कोड, यह ठीक जुड़ा है। सेवा और ऐप दोनों मेरे खाते के अंतर्गत चल रहे हैं, इसलिए खाता अनुमतियों में कोई अंतर नहीं है।
मैं परेशान हूं कि सेवा क्यों विफल हो जाती है, क्या कोई इस पर कुछ प्रकाश डाल सकता है?

string connectionString =  ";DSN=o1;UID=SCOTT;PWD=TIGER;DBQ=ORCL;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;MTS=F;MDI=F;CSR=F;FWC=F;PFC=10;TLO=0;"; 
     OdbcConnection cnn; 
     cnn = new OdbcConnection(connectionString); 
     try 
     { 
      cnn.Open(); 
      myEventLog.WriteEntry("Connection SUCCEEDED!!!"); 
      cnn.Close(); 
     } 
     catch (Exception ex) 
     { 
      string mes = "Connection FAILED!!!" + ex.Message; 
      myEventLog.WriteEntry(mes); 
     } 

अपडेट:

1) मैं दोनों प्रणाली और उपयोगकर्ता DSN साथ की कोशिश की है, दोनों एक ही व्यवहार

2) मैं मुकदमा बनाने के लिए प्रणाली वातावरण चर करने के लिए एक TNS_ADMIN कहा कि यह tnsnames.ora फ़ाइल पा सकते हैं। इसने व्यवहार को नहीं बदला।

नई अद्यतन (नवम्बर 1 2011):

1) सुझाव का एक बहुत कनेक्शन स्ट्रिंग में Oracle सर्वर का IP पता लगाने शामिल है tnsnames.ora फ़ाइल बायपास करने के लिए। दुर्भाग्यवश ऐप को उपयोगकर्ता सेट ऑरैक कनेक्शन के साथ काम करना है, इसलिए हमारे पास उस जानकारी में से कोई भी नहीं है। मुझे बस एक डीएसएन के साथ काम करना है। मुझे ओरेकल डीएसएन का उपयोग करके विंडोज़ सेवा से कनेक्ट करना है।

नए अपडेट (2 नवंबर 2011): 1) ऐसा लगता है कि सेवा सफलतापूर्वक tnsnames.ora फ़ाइल को पढ़ रही है। मैं इस प्रक्रिया पर नजर रखने के भाग गया और इन पंक्तियों मिल गया:

7:52:54.4365217 AM OracleService.exe 4624 CreateFile   C:\oracle\ora92\network\Names\sdns.ora NAME NOT FOUND Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: N, ShareMode: Read, Write, AllocationSize: n/a 
7:52:54.4368466 AM OracleService.exe 4624 CreateFile C:\Windows\SysWOW64\tnsnames.ora NAME NOT FOUND Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a 
7:52:54.4371203 AM OracleService.exe 4624 CreateFile C:\oracle\ora92\network\ADMIN\tnsnames.ora SUCCESS Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 
7:52:54.4372693 AM OracleService.exe 4624 QueryBasicInformationFile C:\oracle\ora92\network\ADMIN\tnsnames.ora SUCCESS CreationTime: 01/11/2011 3:10:08 PM, LastAccessTime: 01/11/2011 3:10:08 PM, LastWriteTime: 01/11/2011 3:10:42 PM, ChangeTime: 01/11/2011 3:18:44 PM, FileAttributes: A 
7:52:54.4372866 AM OracleService.exe 4624 CloseFile C:\oracle\ora92\network\ADMIN\tnsnames.ora SUCCESS 
7:52:54.4375418 AM OracleService.exe 4624 CreateFile C:\oracle\ora92\network\ADMIN SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 
7:52:54.4375857 AM OracleService.exe 4624 QueryDirectory C:\oracle\ora92\network\ADMIN\tnsnames.ora SUCCESS Filter: tnsnames.ora, 1: tnsnames.ora 
7:52:54.4376192 AM OracleService.exe 4624 CloseFile C:\oracle\ora92\network\ADMIN SUCCESS 
7:52:54.4377770 AM OracleService.exe 4624 CreateFile C:\oracle\ora92\network\ADMIN\tnsnames.ora SUCCESS Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: N, ShareMode: Read, Write, AllocationSize: n/a, OpenResult: Opened 
7:52:54.4379306 AM OracleService.exe 4624 ReadFile C:\oracle\ora92\network\ADMIN\tnsnames.ora SUCCESS Offset: 0, Length: 337, Priority: Normal 
7:52:54.4380061 AM OracleService.exe 4624 ReadFile C:\oracle\ora92\network\ADMIN\tnsnames.ora END OF FILE Offset: 337, Length: 4,096 
7:52:54.4380276 AM OracleService.exe 4624 CloseFile C:\oracle\ora92\network\ADMIN\tnsnames.ora SUCCESS 
7:52:54.4385823 AM OracleService.exe 4624 CreateFile C:\oracle\ora92\network\ADMIN\ldap.ora NAME NOT FOUND Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a 

तो करता है किसी को भी किसी भी विचार क्यों यह tnsnames.ora फ़ाइल को पढ़ने के बाद नाकाम रहने के किया जा सकता है है? धन्यवाद

+0

में नाम से पहले रिक्त स्थान नहीं है के बाद से यह काम करता है जब आप इसे चलाने के लिए, मैं अपने tnsnames.ora ग्रहण करने के लिए जा रहा हूँ सही ढंग से किया गया है। क्या ओडीबीसी डीएसएन आप सिस्टम डीएनएस या उपयोगकर्ता डीएसएन के रूप में सेटअप करने के लिए कनेक्ट कर रहे हैं? – Tridus

+0

मैंने सिस्टम और उपयोगकर्ता डीएसएन दोनों के साथ प्रयास किया है, दोनों का एक ही व्यवहार है। –

+0

आप किस संस्करण का उपयोग करते हैं? – WaldiMen

उत्तर

0

ठीक है, मैं यहाँ अपने ही सवाल का जवाब सिर्फ रखने के लिए अंतिम प्रस्ताव उपयोगी सुझाव है कि मुझे यह करने के लिए नेतृत्व से अलग करने के लिए जा रहा हूँ। निकोला द्वारा संदर्भित पोस्ट) एक बार मैंने इसे ध्यान से पढ़ा) जवाब देने के लिए निकला। मेरी सेवा प्रोग्राम फ़ाइलों (x86) से चल रही थी और ऑरैक ड्राइवर कॉलिंग ऐप के पथ में() को संभाल नहीं सकता है।
मैंने अपनी सेवा डी: \ ServiceTest पर ले जाया और यह ठीक काम करता है। मेरी समस्या अब यह है कि मुझे नहीं लगता कि हमारे ऐप को प्रोग्राम फ़ाइलों (x86) से बाहर ले जाया जा सकता है।
आपकी मदद के लिए सभी को धन्यवाद, मैं हर किसी के इनपुट की सराहना करता हूं लेकिन मुझे निकोला को बक्षीस देना होगा, क्योंकि उसने मुझे उस पद पर इंगित किया जिसमें जवाब था। आपकी सभी मदद के लिए धन्यवाद फिर से

2

शायद यह tnsnames.ora फ़ाइल नहीं ढूंढता है। सुनिश्चित करें कि जब आप सेवा शुरू करते हैं तो वही वातावरण चर सेट होते हैं।

+0

के सभी मौजूदा संस्करणों पर होता है, आपके इनपुट के लिए धन्यवाद। बस जांचने और सुनिश्चित करने के लिए कि मैंने सिस्टम चर के लिए TNS_ADMIN पर्यावरण परिवर्तक जोड़ा और इसे orahome निर्देशिका में इंगित किया और सेवा को पुनरारंभ किया। जहां तक ​​मुझे पता है, यह सुनिश्चित करना चाहिए कि सेवा tnsnames.ora फ़ाइल पा सके और फिर भी मुझे एक ही त्रुटि मिलती है। –

6

संबंधित संवाद में परिभाषित पर्यावरण चर जो Windows सेवाओं के लिए उपलब्ध नहीं हैं। एक चीज जिसे आप कोशिश कर सकते हैं, इस post में वर्णित अनुसार आपकी कनेक्शन स्ट्रिंग का विस्तार करना है। एक ही पोस्ट से अन्य सुझाव लागू हो सकते हैं।

+0

आपके इनपुट के लिए धन्यवाद।मुझे खेद है, लेकिन मैं ओरेकल को समझ नहीं पा रहा हूं या तारों को बहुत अच्छी तरह से कनेक्ट नहीं करता हूं, इसलिए मैंने आपके लिंक में जो सुझाव दिया है, लेकिन जब मैंने अपना कनेक्टस्ट्रिंग बदल दिया: डेटा स्रोत = (विवरण = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.121.200) (पोर्ट = 1521))) (CONNECT_DATA = (सर्वर = समर्पित) (SERVICE_NAME = ORCL))); उपयोगकर्ता आईडी = स्कॉट; पासवर्ड = टाइगर; मुझे त्रुटि मिलती है: [IM002] [माइक्रोसॉफ्ट] [ओडीबीसी चालक प्रबंधक] डेटा स्रोत का नाम नहीं मिला और कोई डिफ़ॉल्ट ड्राइवर निर्दिष्ट नहीं है और मैं इसे ऐप और सेवा दोनों में प्राप्त करता हूं, इसलिए मैंने कुछ गलत किया है, बी लेकिन मैं क्या पता नहीं लगा सकता है। धन्यवाद –

+0

क्या आपने मुझसे जुड़े प्रश्न में अन्य सुझावों का प्रयास किया था? @crb का उत्तर आपकी समस्या से प्रासंगिक प्रतीत होता है। –

+0

हाय निकोला, और धन्यवाद! कम से कम मैंने अभी तक थोड़ी प्रगति की है। मैंने क्रब के सुझाव नहीं देखा था और अब जब मैंने प्रक्रिया मॉनीटर चलाया है और पाया है कि आश्चर्यजनक रूप से सेवा सही tnsnames.ora फ़ाइल को ढूंढने और पढ़ने लगती है। तो कुछ और मुद्दा होना चाहिए कि सेवा यह है कि ऐप नहीं करता है। मैं प्रासंगिक लिन्स को प्रोसेस मॉनीटर से पोस्ट करूंगा जो सेवा को tnsnames.ora फ़ाइल को सफलतापूर्वक पढ़ रहा है। धन्यवाद –

0

सुनिश्चित करें कि सेवा खाते में tnsnames.ora फ़ाइल को पढ़ने की अनुमति है। sqlnet.ora में भी SQLNET.AUTHENTICATION_SERVICES से एनटीएस को हटाने का प्रयास करें यदि यह वहां है।

अपने अभी भी सभी को एक साथ पूर्व टीएनएस नाम बायपास करने के लिए ezconnect का उपयोग कर कोशिश संघर्ष कर रहे हैं, तो:

//ip.of.server/sid

http://www.orafaq.com/wiki/EZCONNECT

+0

मैंने ezconnect को आजमाया है और इसे ऐप या सेवा से काम करने के लिए नहीं मिल सकता है, इसलिए मुझे इसे बेहतर समझना होगा। हालांकि अगर यह काम करता है तो भी मैं इसका उपयोग करने में सक्षम नहीं हूं क्योंकि यह एक उपयोगकर्ता परिभाषित ऑरैक कनेक्शन है, इसलिए मुझे बस एक डीएसएन कनेक्ट करना है। –

+0

मुझे लगता है कि DSN = o1 आपके कंप्यूटर पर परिभाषित एक ओडीबीसी कनेक्शन है। जब आप "टीएनएस सेवा नाम" में ओडीबीसी कनेक्शन को संपादित करते हैं, तो आपके पास वर्तमान में //ip.addr/SID के साथ जो कुछ भी है, उसे प्रतिस्थापित करें जहां ip.addr आपके ऑरैकल मशीन का आईपी है और एसआईडी या ओरेकल इंस्टेंस के डेटाबेस नाम को एसआईडी करता है। –

+0

यह भी सुनिश्चित करें कि आपके पास आपकी sqlnet.ora फ़ाइल NAMES.DIRECTORY_PATH = (ezconnect, tnsnames) में निम्न है, मुझे इसे कभी भी उपयोग नहीं करना पड़ेगा, लेकिन अगर यह काम नहीं करता है तो इसे जोड़ने का प्रयास करें। –

0

जॉन सी: मेरे लिए कुछ बातें अजीब लग रहा था । मुझे आशा है कि मैंने आपके उत्तरों को गलत समझा नहीं है।

किसी एक जवाब में कनेक्शन स्ट्रिंग में, आपको गायब ड्राइवर के बारे में त्रुटि मिली है। इसे ठीक करने के लिए आपको प्रदाता/ड्राइवर का उल्लेख करना होगा क्योंकि आप OdbcConnection का उपयोग कर रहे हैं, न कि OracleConnection। OracleConnection जो ज्यादातर लोग उपयोग करेंगे, निश्चित रूप से ड्राइवर को इंगित करेंगे। मुझे लगता है कि आपको डेटाबेस में काम करने की सेवा करने की आवश्यकता है ताकि ओडीबीसीकनेक्शन की आवश्यकता हो। website कनेक्शन तारों के लिए बहुत से उदाहरण देता है और मुझे लगता है कि आपको कुछ फिट बैठना चाहिए।

मैं तुम्हें

Driver={Microsoft ODBC for Oracle};CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=server)(PORT=7001))(CONNECT_DATA=(SERVICE_NAME=myDb)));Uid=myUsername;Pwd=myPassword;

कोशिश एक और बात है कि अपने स्थान TNS_ADMIN चर की ओर इशारा किया था सुझाव है। आपने उल्लेख किया था कि आपने ओराहोम की ओर इशारा किया था। मैं सिर्फ यह पुष्टि करना चाहता था कि आपने वेरिएबल को नेटवर्क \ एडमिन ओराहोम के भीतर फ़ोल्डर में इंगित किया है। मेरा मानना ​​है कि आपको उस फ़ोल्डर को इंगित करना होगा जहां फ़ाइल मौजूद है।

अंततः मैं सुझाव दूंगा कि आप मूल पोस्ट में मौजूद कनेक्शन स्ट्रिंग से कुछ पैरामीटर को आजमाएं और लें। इससे वेरिएबल्स कम हो जाएंगे जो परिणाम को प्रभावित कर सकते हैं, जिससे डीबग करना आसान हो जाता है। और पर्यावरण चर है जो उपयोगकर्ता के लिए सिस्टम पर्यावरण चर के रूप में कॉन्फ़िगर किया गया है। संभवतया आप अनुप्रयोग कार्यों को जीतने का कारण उपयोगकर्ता के लिए परिभाषित चर के कारण है। मुझे संदेह है कि विंडोज सेवा केवल सिस्टम चर का उपयोग कर सकती है।

Driver={Oracle in OraHome92};Server=myServerAddress;Dbq=myDataBase;Uid=myUsername;Pwd=myPassword;

+0

धन्यवाद अखिलिस, मैंने कनेक्शन स्ट्रिंग को सरल बनाने का प्रयास किया है लेकिन यह अभी भी काम नहीं करता है। मैं कनेक्शन स्ट्रिंग का प्रयास करने में काफी समय नहीं लगाऊंगा जिसमें सर्वर आईपी सीधे शामिल है क्योंकि इससे हमारे ऐप को वैसे भी मदद नहीं मिलेगी, क्योंकि हम सर्वर आईपी नहीं जानते हैं (कृपया प्रश्न पर अपडेट देखें)। मैं आपके प्रयास की सराहना करता हूं और आपके पास किसी अन्य सुझाव का स्वागत करता हूं। –

0

मैंने समस्या ठीक कर दी है।

मेरे डेटाबेस के पासवर्ड में '@' वर्ण था। पासवर्ड बदलने और उस चरित्र को हटाने के बाद, समस्या ठीक हो गई है और निर्यात ऑपरेशन सफलतापूर्वक पूरा हो गया है।

This link इस मुद्दे को हल करने में सहायक था।

0

सत्यापित करें कि टीएनएस नाम परिभाषा tnsnames.ora