मैं SSIS Excel कनेक्शन प्रबंधक त्रुटि 0xC0209303 कैसे हल कर सकता हूं?


9

मैंने एक SSIS पैकेज बनाया है जो एक्सेल फाइल को SQL सर्वर टेबल में आयात करता है।

SSIS पैकेज बिना किसी समस्या के चलता है, जब मैं इसे अपनी मशीन पर स्थानीय रूप से चलाता हूं, लेकिन जब मैं इसे सर्वर पर चलाता हूं, जहां पैकेज को शेड्यूल किया जाएगा तो मुझे नीचे की त्रुटि मिलेगी (एक पाठ फ़ाइल से मैं एसएसआईएस लॉगिंग का उपयोग करने के लिए त्रुटियों का उत्पादन कर रहा हूं)।

शोध करने के बाद, मुझे जो एकमात्र सिफारिशें मिलीं, वह थी कि रन64 बायट्रंट प्रॉपर्टी को गलत तरीके से सेट किया जाए, जो कि मैंने किया था, लेकिन फिर भी कोई भाग्य नहीं था। मुझे संदेह है कि यह वही है जो मेरी त्रुटि का कारण है, क्योंकि त्रुटि 64 बिट के बारे में कुछ भी निर्दिष्ट नहीं कर रही है (जैसा कि मैंने पाया लेखों में मामला था)।

मैंने यह भी सोचा कि यह हो सकता है कि सर्वर के पास उपयुक्त एक्सेल ड्राइवर नहीं हैं, लेकिन मुझे नहीं लगता कि मामला ऐसा है क्योंकि आमतौर पर त्रुटि संदेश ड्राइवरों के पंजीकृत न होने के बारे में कुछ कहेंगे।

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

यहां छवि विवरण दर्ज करें

त्रुटि कोड DTS_E_CANNOTACQUIRECNECTIONFROMCONNECTIONMANAGER। कनेक्शन प्रबंधक "Envision" के लिए AcquireConnection पद्धति कॉल त्रुटि कोड 0xC0209303 के साथ विफल रही। AcquireConnection Method कॉल विफल होने के बारे में अधिक जानकारी के साथ इससे पहले त्रुटि संदेश पोस्ट किए जा सकते हैं।

"Envision" मेरे एक्सेल कनेक्शन मैनेजर का नाम है।

मैं एक्सेल फाइल पाथ और एक्सप्रेशन स्ट्रिंग स्ट्रिंग को एक्सप्रेशन का उपयोग करके पॉपुलेट करता हूं।

कनेक्शन स्ट्रिंग अभिव्यक्ति इस तरह दिखती है:

"प्रदाता = Microsoft.ACE.OLEDB.12.0; डेटा स्रोत =" + @ [उपयोगकर्ता :: SourceFilePath] + "; विस्तारित गुण = \" EXCEL 12.0 XML; HDR = YES \ ";"

SSIS Pacakge को एक विंडोज़ यूज़रनेम / अकाउंट द्वारा निष्पादित किया जाता है। मुझे लगता है कि यह एक वेब सेवा खाता हो सकता है। (BDS_sprtIIS)

क्या किसी के पास कोई समाधान या सुझाव है कि कैसे पैकेज के इस मुद्दे को हल करने के लिए केवल मेरी स्थानीय मशीन पर काम करना चाहिए, लेकिन वास्तविक सर्वर पर नहीं जहां पैकेज को तैनात किया जाएगा?

मुझे एक और मंच पर नीचे उत्तर मिला, क्या यह हो सकता है जो मेरे मुद्दों का कारण बन रहा है? वे मूल रूप से कह रहे हैं कि एक्सेल कनेक्शन प्रबंधक किसी कारण से उपयोगकर्ताओं के अस्थायी फ़ोल्डर तक पहुँचने का प्रयास करता है और यदि उस फ़ोल्डर तक उसकी पहुँच नहीं है, तो यह विफल हो जाएगा:

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/da77919c-0161-4eb5-bf89-7107d839435a/the-acquireconnection-method-call-to-the-connection-manager-excel-connection- प्रबंधक विफल रही-साथ? मंच = sqlintegrationservices

मैंने यह भी देखा कि Microsoft.JET.OLEDB.4.0 ड्राइवर उपयोगकर्ता में लॉग इन की प्रोफ़ाइल के नीचे अस्थायी निर्देशिका को पढ़ने का प्रयास करेगा।

... हम अपने SQL एजेंटों को निचले स्तर के डोमेन खाते का उपयोग करके चलाते हैं और प्रॉक्सी खाते का उपयोग करके हमारे SSIS पैकेज चलाते हैं। आप सही हैं क्योंकि Procmon ने मेरे लिए भी इसकी पुष्टि की है। मैंने प्रोफ़ाइल के अस्थायी निर्देशिका (C: \ Documents and Settings \ SQLAgentDomainAccount \ Local Settings \ Temp) को प्रॉक्सी खाता अधिकार दिया और यह काम कर गया!

मैं SQL सर्वर जॉब्स या प्रॉक्सी खातों का उपयोग नहीं कर रहा हूं। पैकेज को केवल एक विंडोज़ खाते द्वारा निष्पादित किया जाता है, जो संभवतः कमांड लाइन स्क्रिप्ट के माध्यम से होता है।

विंडोज़ खाते में फ़ाइल तक पहुंच है, लेकिन मुझे यकीन नहीं है कि अगर इसकी पहुंच "TEMP" फ़ोल्डर तक है (जो मैं पैकेज में कभी संदर्भ नहीं देता हूं, तो मुझे नहीं पता कि उस फ़ोल्डर तक पहुंच की आवश्यकता क्यों है) ...

जवाबों:


8

2 समस्याएँ थीं जो पैकेज को सर्वर पर चलने से रोक रही थीं। नीचे 2 मुद्दे और मेरे द्वारा हल किए गए समाधान हैं।

  1. पैकेज को एक एप्लिकेशन द्वारा निष्पादित किया जाता है जो डिफ़ॉल्ट रूप से 64-बिट DTexec उपयोगिता का उपयोग करता है, लेकिन Excel के कनेक्शन प्रबंधक के माध्यम से Excel फ़ाइल को ठीक से एक्सेस करने में सक्षम होने के लिए पैकेज को उपयोगिता के 32 बिट संस्करण का उपयोग करके चलाने की आवश्यकता होती है।

    मैंने एक "रैपर" एसएसआईएस पैकेज बनाया है जो एक एक्सक्यूट प्रोसेस टास्क का उपयोग करता है जो 32-बिट (64 बिट के बजाय) DTExec उपयोगिता को कॉल करता है और मूल पैकेज को खोलने के लिए कमांड पास करता है।

    प्रक्रिया कार्य निष्पादित करें

  2. मुझे Microsoft Access डेटाबेस इंजन 2010 Redistributable के 32-बिट संस्करण को स्थापित करने की भी आवश्यकता थी ।

आगे की पढाई:

Microsoft.ACE.OLEDB.12.0 पंजीकृत नहीं है (स्टैक ओवरफ़्लो)


2

32-बिट एक्सेस इंजन स्थापित करना और 32-बिट मोड में चलना मेरे लिए काम करता है!

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