SSDT स्कीमा तुलना काम नहीं करती है जबकि BULK INSERT चल रहा है


11

मैं एक बड़े ईटीएल और डीडब्ल्यू परियोजना पर काम कर रहा हूं जहां हम एसएसएफएस और एसएसडीटी दोनों के साथ मिलकर टीएफएस / स्रोत नियंत्रण का उपयोग करते हैं।

आज, मुझे पता चला कि एक SSIS पैकेज एक डेटाबेस तालिका में BULK INSERT का प्रदर्शन कर रहा है, लेकिन उस डेटाबेस के विरुद्ध SSDT स्कीमा की तुलना करना संभव नहीं है। यह दुर्भाग्यपूर्ण है, क्योंकि हमारे कुछ पैकेजों को पूरा होने में काफी लंबा समय लगता है। हम डेटाबेस के संस्करण नियंत्रण के लिए हमारी SSDT परियोजना में उन्हें बचाने के लिए डेटाबेस संरचना में परिवर्तन का पता लगाने के लिए स्कीमा तुलना फ़ंक्शन का उपयोग करना चाहते हैं।

इस पर थोड़ा और गौर करते हुए, मैंने पाया कि SSDT में स्कीमा तुलना फ़ंक्शन OBJECTPROPERTY(), डेटाबेस में तालिकाओं पर सिस्टम फ़ंक्शन को कॉल करने वाली SQL स्क्रिप्ट निष्पादित करता है । विशेष रूप से मेरे मामले में, किसी भी कॉल को OBJECTPROPERTY(<object_id>, N'IsEncrypted')अवरुद्ध होना प्रतीत होता है, जब <object_id>उस तालिका को संदर्भित करता है जिसे वर्तमान में बल्क डाला जा रहा है।

विज़ुअल स्टूडियो में, SSDT स्कीमा की तुलना थोड़ी देर के बाद की जाती है और दावा करती है कि कोई अंतर नहीं पाया गया है।

क्या SSDT में इस समस्या का समाधान है, या मुझे संभवतः MS Connect बग रिपोर्ट दर्ज करने का प्रयास करना चाहिए?

वैकल्पिक रूप से, चूंकि BULK INSERT एक SSIS पैकेज से होता है, क्या OBJECTPROPERTYटेबल पर लॉक -कॉल के बिना इस प्रविष्टि को बनाने का कोई तरीका है ? संपादित करें: SSIS OLE DB डेस्टिनेशंस में, हम चेक लॉक को "लॉक टेबल" से हटा सकते हैं, जो ऐसा कहता है, लेकिन यह कुछ स्थितियों में प्रदर्शन को नुकसान पहुंचा सकता है। मैं एक समाधान में बहुत अधिक दिलचस्पी रखता हूं जो एसएसडीटी स्कीमा की तुलना अपने काम को करने की अनुमति देता है, भले ही कुछ वस्तुओं को बंद कर दिया गया हो।


थोक आयात के लिए लॉकिंग व्यवहार पर नियंत्रण रखें - आपके पास 'बल्क लोड पर टेबल लॉक' सक्षम हो सकता है। यह भी जांचें कि आपका बल्क इन्सर्ट TABLOCK
स्टुअर्टड

यदि आप टेबल लॉक ले रहे हैं, तो आप लोड को तेजी से पा सकते हैं यदि आप इसे वैसे भी अक्षम करते हैं ( Technet.microsoft.com/en-us/library/ms177445.aspx ) - जो भी कारण मैं एक कनेक्ट बढ़ाऊंगा क्योंकि एक टाइमआउट होना चाहिए बहुत कम से कम असफल होने के बजाय केवल यह कहें कि कोई बदलाव नहीं हैं
एड इलियट

उत्तर के लिए धन्यवाद, स्टुअर्ट और एड इलियट। यह पता चलता है कि हम वास्तव में प्रदर्शन कारणों से तालिका को लॉक करना चाहते हैं। मेरी राय में, SSDT को इसे संभालने में सक्षम होना चाहिए, क्योंकि हम केवल डेटाबेस की तुलना करना चाहते हैं, डेटाबेस में ऑब्जेक्ट में परिवर्तन लागू नहीं करते हैं। मैं इसे संबोधित करने के लिए एक कनेक्ट पोस्ट बनाऊंगा।
Dan

3
इंटर्नल्स मेरे लिए नहीं हैं, लेकिन जैसा कि मैं इसे समझता हूं, आपके पास मेज पर ताला है। बल्क इंसर्ट के लिए जो भी लॉक लिया जाता है वह स्कीमा को मान्य करने के लिए आवश्यक लॉक (एस) के साथ असंगत होता है। प्रासंगिक रीडिंग BOL स्कीमा लॉक
बिलिन्क

क्या आप शायद बेहतर तरीके से बता सकते हैं कि स्कीमा की तुलना लोड ऑपरेशन के समानांतर क्यों होनी चाहिए? शायद एक विकल्प डेटाबेस का एक संदर्भ मॉडल है। कोई डेटा नहीं, बस स्कीमा। उस के खिलाफ अपनी तुलना चलाएं और फिर सुनिश्चित करें कि कोई भी वास्तविक डेटाबेस को संशोधित नहीं करता है जहां ये थोक ऑप्स पहले संदर्भ मॉडल को अपडेट किए बिना किए जा रहे हैं।
बिलिंक

जवाबों:


19

OBJECTPROPERTYकॉल एक स्कीमा स्थिरता (SCH-एस) ताला है, जो केवल है की आवश्यकता है असंगत एक स्कीमा संशोधन (SCH-एम) लॉक के साथ।

BULK INSERTकुछ परिस्थितियों में एक Sch-एम ताला लग जाएगा। ये "टेबल लॉकिंग और लॉगिंग के दौरान बल्क आयात के दौरान" सूचीबद्ध हैं, ऑनलाइन पुस्तकों में थोक आयात का अनुकूलन करने के लिए दिशानिर्देशों का अनुभाग :

थोक आयात ताला

यदि गंतव्य तालिका को संकुलित किया जाता है, तो आपको ट्रेस ध्वज 610 को सक्षम करने में मदद मिल सकती है । यदि आप इस मार्ग पर जाने का निर्णय लेते हैं, तो कृपया उन पोस्ट और डेटा लोडिंग परफॉर्मेंस गाइड की पूरी श्रृंखला पढ़ें और अच्छी तरह से परीक्षण करें।

मुझे नहीं पता कि SSDT IsEncryptedतालिकाओं के लिए संपत्ति की जांच क्यों करता है । मैं ऐसे परिदृश्य की कल्पना नहीं कर सकता जहां यह समझ में आता है, लेकिन यह SSDT लोगों के लिए एक सवाल है।


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