2016-11-03 7 views
14

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

प्रासंगिक कोड:

// class field 
private string accessConnectionStringTemplate = "Data Source=\"{0}\";Provider=Microsoft.Jet.OLEDB.4.0;"; 

// in method that connects to database 
Print(file, "Connection string: " + string.Format(accessConnectionStringTemplate, file.FileName)); 
// outputs: Data Source = "\Path\To\File";Provider=Microsoft.Jet.OLEDB.4.0" 
using(access = new OleDbConnection(string.Format(accessConnectionStringTemplate, file.FileName))) { 
    access.Open(); 
    // other code 
} 

एसक्यूएल एजेंट कार्य इतिहास के माध्यम से त्रुटि संदेश:

  • प्रवेश:

    Started: 12:35:10 PM 
    Error: 2016-11-03 12:35:33.51 
        Code: 0x00000000 
        Source: Import Files Main 
        Description: Exception: Unspecified error 
    End Error 
    Error: 2016-11-03 12:35:33.51 
        Code: 0x00000000 
        Source: Import Files Main 
        Description: at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) 
        at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) 
        at System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) 
        at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions) 
        at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) 
        at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) 
        at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) 
        at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 
        at System.Data.OleDb.OleDbConnection.Open() 
        at ST_cc0028a4b56242909c2eae546a807995.csproj.ScriptMain.ImportFile(AccessFile file, DateTime startRecordDate, DateTime endRecordDate, List`1 accessTables, Boolean includeTransactionTables, List`1 specifiedTableList) 
        at ST_cc0028a4b56242909c2eae546a807995.csproj.ScriptMain.Main() 
    End Error 
    Error: 2016-11-03 12:35:33.51 
        Code: 0x00000006 
        Source: Import Files 
        Description: The script returned a failure result. 
    End Error 
    

    कुछ बातें मुझे यकीन है कि के द्वारा किए गए ड्राइवर स्थापित हैं और SQL सर्वर पर सर्वर पर काम करते हैं। मैंने वीएस में पैकेज को मेरे खाते और प्रॉक्सी के खाते दोनों के रूप में बिना किसी समस्या के पैकेज के द्वारा सत्यापित किया।

  • प्रॉक्सी खाते में प्रश्न में फ़ाइल तक पहुंच है। फिर, प्रॉक्सी के खाते के रूप में सर्वर में लॉग इन करके सत्यापित किया गया। फ़ाइल नेटवर्क शेयर पर है, लेकिन पथ को यूएनसी पथ के रूप में निर्दिष्ट किया गया है।
  • प्रॉक्सी खाते में अन्य डेटाबेस तक पहुंच है जो इस ऑपरेशन का हिस्सा हैं, त्रुटि के किसी अन्य संभावित स्रोत को रद्द करने के लिए।
  • पैकेज स्टोर (एसएसएमएस के माध्यम से) से पैकेज चला रहा है क्योंकि मेरा खाता और प्रॉक्सी का खाता दोनों काम करता है। मैंने यह सुनिश्चित करने के लिए डेटाबेस सर्वर पर किया था।

अन्य प्रश्नों में मैंने इंटरनेट पर इस बारे में देखा है, यह आमतौर पर ड्राइवरों के साथ एक मुद्दा है। इस मामले में, मुझे यकीन नहीं है कि यह कैसे हो सकता है।

मुझे अन्य निदान में सहायता के लिए अतिरिक्त जानकारी प्रदान करने में प्रसन्नता हो रही है। मैं खुद पूरी तरह से अनिश्चित हूं कि यह क्यों काम नहीं कर रहा है।

+0

विषम, क्या फ़ाइल किसी भी तरह से खुली या बंद है? – Siyual

+1

@Siyual: यह नहीं है। और चूंकि मैं इसे एसक्यूएल एजेंट के बाहर चलाने में सक्षम हूं, इसलिए यह समस्या प्रतीत नहीं होती है। मुझे लगता है कि यह संभव है कि जब मैं एजेंट नौकरी चलाता हूं और किसी अन्य समय पर कोई इसे सही नहीं खोलता है, लेकिन ऐसा लगता है कि यह बहुत ही असंभव है। – siride

+0

ठीक है - यहां एक झुकाव है: नाममात्र, कनेक्शन स्ट्रिंग तर्क अर्धविराम सीमित हैं और तर्कों के चारों ओर उद्धरण पसंद नहीं करते हैं - यहां तक ​​कि एम्बेडेड रिक्त स्थान के साथ भी तर्क देते हैं। बस उद्धरण बाहर ले जाने का प्रयास करें। क्या वह एक किकर नहीं होगा? – Clay

उत्तर

6

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

var tempPath = Path.GetTempPath().Replace("\\SQLSERVERAGENT\\", "\\" + Environment.UserName + "\\"); 
Environment.SetEnvironmentVariable("TEMP", tempPath); 
Environment.SetEnvironmentVariable("TMP", tempPath); 

यह आदर्श नहीं है, लेकिन यह काम करता है। इसका मतलब है कि मुझे एसक्यूएल एजेंट की अस्थायी निर्देशिका को अनुमति नहीं देना है। केवल इस कोड को बदलना है।

अफसोस की बात है कि ओडीबीसी चालक अपनी अस्थायी फ़ाइलों को कहां बदलता है, यह बदलने का कोई तरीका नहीं है।

संपादित करें: मुझे एक्सेल स्रोत के साथ एक नियमित डेटा प्रवाह-आधारित पैकेज के साथ भी यह समस्या थी। उस स्थिति में, मेरे प्रॉक्सी उपयोगकर्ता के खाते के लिए SQL एजेंट की अस्थायी निर्देशिका तक पहुंच प्रदान करने के अलावा मेरे पास कोई विकल्प नहीं था। अगर मैं वहां एक कामकाज के साथ भी आ सकता हूं, तो मैं इसे पोस्ट करूंगा।

1

मैं कुछ बातें की कोशिश करने का सुझाव है: cmd मोड अर्थात् अपने पैकेज निष्पादित करने के लिए एसक्यूएल एजेंट से dtexce.exe सिंटैक्स का उपयोग (दोनों 32 बिट और 64 बिट विकल्प का उपयोग)

  1. प्रयास करें।

  2. सेवा खाता (खाता एसक्यूएल एजेंट चल रहा है) DCOM component for Integration Service पर जोड़ें। यदि आपको अनुमति है, तो SQL एजेंट सेवा खाते को प्रॉक्सी खाते में बदलें (परीक्षण के लिए)।

  3. प्रॉक्सी खाते का उपयोग करके सबकुछ करें यानी प्रॉक्सी खाते का उपयोग करके पैकेज को तैनात करें और नौकरी के मालिक को प्रॉक्सी खाता (एसक्यूएल एजेंट में) बनाएं। प्रॉक्सी खाते का उपयोग कर नौकरी बनाएं।

  4. यदि आपके प्रॉक्सी खाते या SQL एजेंट सेवा खाते से संबंधित कोई त्रुटि है तो विंडो event viewer विंडो देखें।

  5. यदि आप SQL Server 2012 या उच्चतर पैकेज को तैनात कर रहे हैं, तो इसे एकीकरण सेवा कैटलॉग के साथ आज़माएं।

+0

पैकेज चल रहा है और अन्य चीजें कर रहा है, यह सिर्फ इस एक्सेस डेटाबेस को अपने मध्यवर्ती चरणों में से एक के रूप में कनेक्शन नहीं खोल सकता है। मैं इनमें से कुछ चीजों को करने का प्रयास कर सकता हूं, लेकिन वे मेरी समस्या के लिए अधिकतर अप्रासंगिक प्रतीत होते हैं। – siride

+0

आपका पैकेज केवल SQL एजेंट जॉब से विफल रहा है। तो, एसक्यूएल एजेंट सेवा खाता सेटिंग्स पर ध्यान केंद्रित कर सकते हैं जैसे अनुमति/एक्सेस मदद कर सकते हैं। यह प्रॉक्सी खाते (आपके विवरण के अनुसार) के साथ समस्या की तरह प्रतीत नहीं होता है। – p2k

+0

यह मेरे प्रॉक्सी खाते के रूप में चल रहा है (माना जाता है), एसक्यूएल एजेंट सेवा खाते के रूप में नहीं, जिसका मैंने कभी उपयोग नहीं किया। – siride

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