2012-07-05 14 views
13

हमने हाल ही में एक मुद्दा देखा है कि एसएसआईएस पैकेजों को फिर से तैनात किए गए नवीनतम परिवर्तनों में शामिल नहीं लगता है ... जब मैं नोटपैड का उपयोग करके डीटीएसएक्स खोजता हूं तो मुझे कोड में संशोधित स्क्रिप्ट दिखाई देती है ताकि परिवर्तन निश्चित रूप से वहां हों।एसएसआईएस पैकेज को पुन: नियोजित करना - कैश?

मेरी धारणा थी कि एसएसआईएस पैकेज के स्क्रिप्ट घटक अंततः प्रक्रिया में कहीं भी एक असेंबली में संकलित किए जाते हैं - यह काफी संभावना है क्योंकि मुझे लगता है कि सी # कोड पहले संकलित किए बिना कुछ नहीं चला सकता है। तो सिद्धांत रूप में यदि इन विधानसभाओं को तब कैश किया जा रहा है और तत्काल ओवरराइट नहीं किया गया है (किसी कारण से) जो इस मुद्दे को समझाएगा।

केवल "सबूत" जो मुझे सोचता है कि मेरा सिद्धांत सही है अगर मैं किसी बिंदु पर पैकेज चलाता रहता हूं तो यह अचानक नए कोड में बदल जाता है।

हालांकि, अब तक मुझे नहीं मिला है कि यह क्यों और कैसे हो रहा है, यदि है ... क्या कोई मदद कर सकता है?

अद्यतन: MSDN कहते हैं: "पहले के संस्करणों जहां से संकेत मिलता है कर सकता था कि स्क्रिप्ट precompiled रहे थे विपरीत, सभी स्क्रिप्ट एसक्यूएल सर्वर 2008 एकीकरण सेवाओं (SSIS) और बाद के संस्करणों में precompiled कर रहे हैं।" - द्वारा प्री-संकलित का मतलब है कि वास्तविक पैकेज की बजाय एक पूर्व-संकलित संस्करण चलता है (मुझे ऐसा लगता है क्योंकि कोड को नोटपैड में कोड दिखाई देने के बाद संकलित नहीं लगता है) वहां एक तरीका होना चाहिए पूर्व-संकलित असेंबली को ओवरराइट करने के लिए इंजन को मजबूर करें ... लेकिन कैसे?

अद्यतन: लघु उद्योगों के चार मुख्य घटक में से एक एसक्यूएल ServerIntegration सेवाएं सेवा है, जो एक खिड़कियों सेवा है। स्पष्ट रूप से यह सेवा घटक/कार्य मेटाडेटा को कैश करेगी ताकि एसएसआईएस रनटाइम इंजन कैश को स्थापित कर सके, यह देखने के लिए कि कौन सा स्थापित है, जो पैकेज लोड समय को तेज करने में मदद कर सकता है। हालांकि, यदि पैकेज फ़ाइल सिस्टम (SQL एकीकरण सेवाओं में नहीं) में संग्रहीत हैं और एजेंट जॉब्स द्वारा निष्पादित किया गया है, तो एजेंट जॉब पैकेज को निष्पादित करने के लिए DTEXEC के 64 बिट संस्करण का उपयोग करेगा। मुझे अभी तक सबूत नहीं मिला है कि किसी भी कैशिंग में शामिल होगा, लेकिन निष्पादन के सत्यापन चरण में कई पैरामीटर जांचने के लिए निश्चित रूप से विकल्प हैं, जैसे कि संस्करण संख्या - एक कारण के लिए हो सकती है।

+2

बस कहना है कि आज हमारे पास एक ही सटीक समस्या है। एजेंट को पुनरारंभ करना और न ही SQLSISS मदद करता है। –

+1

चाल एक तालिका से कॉलम जोड़ने और हटाने के लिए क्या किया गया था। जाहिर है, यह जाने का कोई तरीका नहीं है और हम निश्चित रूप से इस प्रश्न के उत्तर में रुचि रखते हैं –

+1

इसके अलावा: मुझे लगता है कि कैश डिस्क पर कहीं भी संग्रहीत है क्योंकि यह सर्वर से बच गया –

उत्तर

3

क्या आपने विजुअल स्टूडियो/एसएसआईएस में अपने बिल्ड नंबर पर एमएसडीबी में पैकेज के संस्करण निर्माण संख्या की तुलना करने के लिए sysssispackages को देखा है?

SELECT name, verbuild 
FROM msdb.dbo.sysssispackages 
WHERE name LIKE '%bla%' 

(अपने पैकेज को खोजने के लिए जहां-खंड के रूप में आवश्यक समायोजित करें। ऐसा नहीं कभी "msdb.dbo.sysssispackages से * का चयन करें" के रूप में यह स्तंभों में से एक में पैकेज XML है।)

और विजुअल स्टूडियो में, पैकेज खोलें, फिर पैकेज की पृष्ठभूमि पर राइट-क्लिक करें और संदर्भ मेनू से "गुण" चुनें। वर्जनबिल्ड फ़ील्ड को देखें। इसे उपरोक्त चयन से संख्या से मेल खाना चाहिए!

मुझे पता है कि यह आपकी समस्या का वास्तविक समाधान नहीं है लेकिन यह समस्या का कारण कहां है इसका पता लगाने में मदद कर सकता है। यदि संख्या पुरानी है, तो इसका मतलब है कि आपका पैकेज परिनियोजन काम नहीं करता है।

+1

+1 अच्छा सुझाव। हम समस्या को पुन: पेश करने की कोशिश करेंगे और यह जांच लेंगे कि इससे कम से कम संकेत मिलता है कि यह समस्या है। जाहिर है हम अभी भी समस्या के लिए एक वास्तविक समाधान की तलाश में हैं। –

+0

अब आप टिप्पणी कर सकते हैं;) –

+1

+ cmenke: आपकी क्वेरी 8 पंक्तियां लौटाती है: SqlTraceCollect, SqlTraceUpload, TSQLQueryCollect, TSQLQueryUpload, PerfCountersCollect, PerfCounters अपलोड करें, क्वेरी सक्रियता चयन करें, क्वेरी सक्रियता अपलोड करें। जाहिर है उनमें से कोई भी मेरी एसएसआईएस नहीं है। हमारी तैनाती प्रक्रिया निम्नानुसार है: हमारा एमएसआई पैकेज सिर्फ डीटीएसएक्स को एक फ़ोल्डर में कॉपी करता है, कॉन्फ़िगरेशन फ़ाइल बदलता है (कॉन जानकारी आदि के लिए)। फिर हमारे शेड्यूलर dtexec/f "% dtsfile%"/प्रतिनिधि EPW/Conf% dtsconfig%>% logfile% चलाता है क्या हमें कुछ और करने की आवश्यकता है? –

2

यह आपके पास विशेष रूप से रहस्य को हल नहीं करता है, लेकिन यदि आप फ़ाइल सिस्टम-आधारित पैकेज चला रहे हैं और यह सत्यापित करना चाहते हैं कि चल रहा पैकेज वह पैकेज है जिसे आपने तैनात किया है, तो ऐसा करने का एक तरीका है।

  1. अपना पैकेज बनाएं।
  2. अपने पैकेज पर गुणों को खोलें और "संस्करण बिल्ड" संपत्ति को नोट करें (वैकल्पिक रूप से, नोटपैड में .dtsx खोलें और डीटीएस: संस्करणबिल्ड विशेषता खोजें।)
  3. अपने पैकेज को तैनात करें।
  4. अपने एसक्यूएल एजेंट नौकरी चरण में, सत्यापन टैब पर जाएं।
  5. "पैकेज निर्माण सत्यापित करें" इनपुट बॉक्स में संस्करण बनाएं दर्ज करें।
  6. नौकरी के चरण का निष्पादन करें।

मैं अगर यह अपने कैश बाहर फेंक और नव तैनात पैकेज प्राप्त करने के लिए लघु उद्योगों के लिए बाध्य करेगा पता नहीं है, लेकिन मुझे लगता है अगर आप हाथ से .dtsx पैकेज के बिल्ड नंबर संशोधित जानते हैं और फिर से करने की कोशिश फिर से रन जॉब चरण यह विफल रहता है क्योंकि पैकेज बिल्ड उस चीज़ से मेल नहीं खाता है जो यह खोज रहा है, इसलिए यह निश्चित रूप से उस मान का रन-टाइम चेक कर रहा है।

+0

I लगता है कि चरण 3 और 4 लागू नहीं हैं क्योंकि हम फाइल सिस्टम से चलते हैं। –

+0

ठीक है, आप अभी भी अपनी नौकरी "तैनात" करते हैं, आप बस फाइल सिस्टम पर तैनाती का उपयोग करते हैं। और आपके पास अभी भी किसी भी SQL एजेंट नौकरी पर सत्यापन टैब है जहां उप प्रकार एक एसएसआईएस पैकेज है। –

4

यह कुछ समय पहले चलने वाली चीज़ से कुछ हद तक परिचित लगता है। दुर्भाग्यवश, मुझे याद नहीं है जब मैं इसमें भाग गया (इसलिए मैं निश्चित रूप से जांच नहीं कर सकता), लेकिन मैं मानता हूं मुझे लगता है कि यह तय करना था कि मैंने स्क्रिप्ट संपादक से Build | Build st_5bd541c294054c25b9e7eb55b92bd0e2 कमांड को स्पष्ट रूप से बुलाया था (VSTA) मेनू विंडो बंद करने से पहले। (विशेष परियोजना के नाम प्रत्येक स्क्रिप्ट के लिए अलग होगा, जाहिर है, क्योंकि यह एक GUID पर आधारित है;। तथापि, वहाँ केवल Build के तहत एक संभव सबमेनू हो जाएगा)

स्पष्ट रूप से लागू Build आदेश सुनिश्चित करता है कि के लिए बाइनरी कोड स्क्रिप्ट को एएससीआईआई-एनकोडेड और परिणामी .dtsx फ़ाइल के एक्सएमएल में सहेजा जाता है। जब भी मैं स्क्रिप्ट संपादक बंद करता हूं तो मैं हमेशा एसएसआईएस 2005 में अपने लिए निर्माण कर रहा था। जाहिर है, विचित्र किनारे के मामले हैं जहां संपादक बंद होने पर एसएसआईएस 2008 हमेशा स्क्रिप्ट प्रोजेक्ट नहीं बनाते हैं।

Btw, precompiled binaries स्रोत XML के एक टैग BinaryItem कहा जाता है में संग्रहीत करने के लिए दिखाई देते हैं:

<DTS:Executable DTS:ExecutableType="Microsoft.SqlServer.Dts.Tasks.ScriptTask.ScriptTask, Microsoft.SqlServer.ScriptTask, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" DTS:ThreadHint="0"> 
    <DTS:Property DTS:Name="ObjectName">SCR_StepOne</DTS:Property> 
    <DTS:ObjectData> 
     <ScriptProject Name="ST_5bd541c294054c25b9e7eb55b92bd0e2" VSTAMajorVersion="2" VSTAMinorVersion="1" Language="CSharp" EntryPoint="Main" ReadOnlyVariables="User::FileOneName,User::OutputFolder" ReadWriteVariables=""> 
     <BinaryItem Name="\bin\release\st_5bd541c294054c25b9e7eb55b92bd0e2.csproj.dll"> 
      TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
      AAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v 
      ZGUuDQ0KJAAAAAAAAABQRQAATAEDADuOb04AAAAAAAAAAOAAAiELAQgAABAAAAAIAAAAAAAAPi8A 
      AAAgAAAAQAAAAABAAAAgAAAAAgAABAAAAAAAAAAEAAAAAAAAAACAAAAAAgAAAAAAAAMAQIUAABAA 

आप अपने स्रोत कोड नियंत्रण प्रणाली इतिहास की जाँच है कि अगर कुछ के लिए अद्यतन मिल रही थी, को देखने के लिए लायक हो सकता है उन खराब त्रुटियों में से।

चेतावनी: मुझे इस पर आधिकारिक माइक्रोसॉफ्ट दस्तावेज नहीं मिला है।

+0

क्या मैं सोच रहा हूं कि यह केवल सी # स्क्रिप्ट परियोजनाओं के लिए है? इस प्रकार हमने वास्तव में उन लोगों का उपयोग नहीं किया है। –

+0

मैंने चेक नहीं किया है, लेकिन मुझे उम्मीद है कि यह सी # या वीबी.नेट परियोजनाओं के लिए भी समान होगा (मुझे पूरा यकीन है कि यह एक एसएसआईएस 2008 मुद्दा है)। –

+0

जब मैंने XML के रूप में .dtsx को संपादित करके एक स्क्रिप्ट घटक में संशोधन किए, तो मैंने इस समस्या में भाग लिया। क्योंकि इसे डिजाइनर के बजाय एक्सएमएल के माध्यम से संपादित किया गया था, बाइनरी को कभी भी दोबारा नहीं बनाया गया था; यह एक "दुह ?!" था पल। जैसा कि आप कहते हैं, फ़िक्स को प्रत्येक संपादित स्क्रिप्ट घटकों को स्पष्ट रूप से पुन: संकलित करना था। – uhleeka

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