sql - एसएसडीटी और विजुअल स्टूडियो 2012 डाटाबेस प्रोजेक्ट्स के साथ डेटाबेस परिनियोजन को सही तरीके से प्रबंधित कैसे करें?




visual-studio-2012 sqlcmd (3)

मैं एक मौजूदा लघु परियोजना पर 2012 डेटाबेस परियोजनाओं को अपनाने की कोशिश कर रहे शोध चरण में हूं। मैं एक सी # डेवलपर हूं, डीबीए नहीं, इसलिए मैं विशेष रूप से सर्वोत्तम प्रथाओं के साथ धाराप्रवाह नहीं हूं। मैं अब कुछ घंटों के लिए Google और stackoverflow खोज रहा हूं लेकिन मुझे अभी भी पता नहीं है कि कुछ महत्वपूर्ण तैनाती परिदृश्यों को कैसे व्यवस्थित किया जाए।

1) कई विकास चक्रों के दौरान, मैं अपने डेटाबेस के कई संस्करणों का प्रबंधन कैसे करूं? अगर मेरे पास मेरे डेटाबेस के v3 पर क्लाइंट है और मैं उन्हें v8 में अपग्रेड करना चाहता हूं, तो मैं इसे कैसे प्रबंधित करूं? वर्तमान में हम अपने उत्पाद के प्रत्येक संस्करण के लिए हस्तनिर्मित स्कीमा और डेटा माइग्रेशन स्क्रिप्ट प्रबंधित करते हैं। क्या हमें अभी भी इसे अलग से करने की ज़रूरत है या क्या नए प्रतिमान में कुछ ऐसा है जो इसका समर्थन करता है या बदलता है?

2) यदि स्कीमा इस तरह से बदलती है जिसके लिए डेटा को स्थानांतरित करने की आवश्यकता होती है, तो इसे संभालने का सबसे अच्छा तरीका क्या है? मुझे लगता है कि डेटा को संरक्षित करने के लिए प्री-डिप्लॉयमेंट स्क्रिप्ट में कुछ काम चला जाता है और फिर पोस्ट-डिप्लॉय स्क्रिप्ट इसे सही जगह पर वापस रखता है। क्या इसका तरीका है या क्या कुछ बेहतर है?

3) इन नई प्रौद्योगिकियों के साथ काम करने के तरीके के बारे में कोई अन्य सलाह या मार्गदर्शन भी बहुत सराहना की है!

अद्यतन: समस्या की मेरी समझ थोड़ी बढ़ी है क्योंकि मैंने मूल रूप से इस सवाल से पूछा था और जब मैं एक व्यावहारिक समाधान के साथ आया था, तो यह काफी समाधान नहीं था जिसे मैं उम्मीद कर रहा था। यहां मेरी समस्या का एक रिकॉर्डिंग है:

मेरी समस्या यह है कि पूरी तरह से डेटा संबंधित है। अगर मेरे पास मेरे आवेदन के संस्करण 1 पर कोई ग्राहक है और मैं उन्हें अपने आवेदन के संस्करण 5 में अपग्रेड करना चाहता हूं, तो उनके डेटाबेस में कोई डेटा नहीं होने पर मुझे कोई समस्या नहीं होगी। मैं बस एसएसडीटी बुद्धिमानी से स्कीमा की तुलना करने और डेटाबेस को एक शॉट में माइग्रेट करने देता हूं। दुर्भाग्य से ग्राहकों के पास डेटा है इसलिए यह इतना आसान नहीं है। स्कीमा मेरे आवेदन के संस्करण 1 से संस्करण 2 में संस्करण 3 (आदि) सभी प्रभाव डेटा में बदल जाती है। डेटा के प्रबंधन के लिए मेरी वर्तमान रणनीति के लिए प्रत्येक संस्करण अपग्रेड (1 से 2, 2 से 3, आदि) के लिए एक स्क्रिप्ट बनाए रखना आवश्यक है। यह मुझे सीधे मेरे संस्करण के संस्करण 1 से संस्करण 5 तक जाने से रोकता है क्योंकि मेरे पास सीधे वहां जाने के लिए कोई डेटा माइग्रेशन स्क्रिप्ट नहीं है। प्रत्येक क्लाइंट के लिए कस्टम अपग्रेड स्क्रिप्ट बनाने या प्रत्येक संस्करण से प्रत्येक बड़े संस्करण में जाने के लिए अपग्रेड स्क्रिप्ट प्रबंधित करने की संभावना तेजी से अप्रबंधनीय है। मैं उम्मीद कर रहा था कि एसएसडीटी की कुछ तरह की रणनीति थी जो चीजों के डेटा पक्ष को आसान बनाता है, शायद चीजों के स्कीमा पक्ष के रूप में भी आसान है। एसएसडीटी के साथ मेरे हालिया अनुभव ने मुझे ऐसी रणनीति की कोई उम्मीद नहीं दी है, लेकिन मुझे अलग-अलग पता लगाना अच्छा लगेगा।


एसएसडीटी का उपयोग करने के अपने अनुभव में डेटाबेस संख्याओं के लिए संस्करण संख्याओं (यानी v1, v2 ... vX आदि ...) की धारणा थोड़ी दूर जाती है। ऐसा इसलिए है क्योंकि एसएसडीटी घोषणात्मक डेटाबेस विकास के रूप में जाना जाने वाला एक विकास प्रतिमान प्रदान करता है जिसका अर्थ है कि आप एसएसडीटी को बताते हैं कि आप अपनी स्कीमा किस राज्य में रखना चाहते हैं और फिर एसएसडीटी को आपके पास पहले से जो कुछ है उसके मुकाबले तुलना करके उस राज्य में शामिल होने की ज़िम्मेदारी लेनी चाहिए। इस प्रतिमान में v4 को तैनात करने की धारणा तो v5 आदि .... दूर चला जाता है।

आपकी पूर्व और पोस्ट परिनियोजन स्क्रिप्ट, जैसा कि आप सही ढंग से बताते हैं, डेटा के प्रबंधन के उद्देश्यों के लिए मौजूद हैं।

उम्मीद है की वो मदद करदे।

संयुक्त


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

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

तो मेरे परिदृश्यों का उत्तर देने के लिए:

1) v3 से v8 तक डेटाबेस को अपग्रेड करने के लिए, मुझे v4 के लिए जेनरेट की गई प्रकाशित स्क्रिप्ट निष्पादित करना होगा, फिर v5 के लिए, फिर v6 के लिए, आदि। यह बहुत ही समान है कि हम इसे कैसे करते हैं। यह अच्छी तरह से समझा जाता है और डेटाबेस प्रोजेक्ट इन स्क्रिप्ट को बनाने / बनाए रखने के लिए बहुत आसान लगता है।

2) जब स्कीमा डेटा के नीचे से बदलता है, तो प्री-और पोस्ट-डिप्लॉय स्क्रिप्ट का उपयोग उस डेटा को माइग्रेट करने के लिए किया जाता है जहां इसे नए संस्करण के लिए जाना है। प्रभावित डेटा को पूर्व-तैनाती स्क्रिप्ट में अनिवार्य रूप से बैक-अप किया जाता है और पोस्ट-तैनाती स्क्रिप्ट में वापस स्थानांतरित किया जाता है।

3) मैं अभी भी इस परिदृश्य और दूसरों में इन उपकरणों के साथ सबसे अच्छा काम करने के बारे में सलाह ले रहा हूं। अगर मुझे यहां कुछ गड़बड़ है, या यदि कोई अन्य गॉचास है तो मुझे अवगत होना चाहिए, कृपया मुझे बताएं! धन्यवाद!


मैं सिर्फ यह कहना चाहता था कि अब तक यह धागा उत्कृष्ट रहा है।

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

चीजों को और जटिल बनाने के लिए, हमारा आवेदन एक कोड-बेस है, लेकिन प्रति 'ग्राहक' को अनुकूलित किया जा सकता है, इसलिए हमारे पास लगभग 1 9 0 डेटाबेस हैं जिनके साथ हम काम कर रहे हैं, इस परियोजना के लिए, केवल 3 या उससे अधिक सामान्य नहीं है। हम हर समय तैनाती करते हैं और यहां तक ​​कि नए ग्राहकों को भी अक्सर स्थापित करते हैं। हम पुराने स्कूल की वृद्धिशील रिलीज स्क्रिप्ट के साथ PowerShell पर भारी भरोसा करते हैं (और उस संस्करण में एक नया ग्राहक बनाने के लिए संबंधित स्क्रिप्ट)। एक बार जब हम इसे सब कुछ समझ लेंगे तो मैं योगदान करने की योजना बना रहा हूं लेकिन कृपया जो कुछ भी आपने सीखा है उसे साझा करें। मुझे विश्वास है कि हम प्रति संस्करण कस्टम रिलीज स्क्रिप्ट बनाए रखेंगे, लेकिन हम देखेंगे। प्रोजेक्ट के भीतर प्रत्येक स्क्रिप्ट को बनाए रखने के बारे में विचार, और एक से और एसक्यूएलसीएम वैरिएबल समेत बहुत दिलचस्प है। अगर हमने ऐसा किया, तो संभवतः हम उस संस्करण से पहले एक बार पुरानी अपग्रेड स्क्रिप्ट को हटाकर, रास्ते में छेड़छाड़ करेंगे।

बीटीडब्ल्यू - साइड नोट - कचरे को कम करने के विषय पर, हमने समय के एक समूह को भी बताया कि कॉलम के लिए उचित नामकरण / डेटा प्रकार सम्मेलनों के प्रवर्तन को स्वचालित करने के साथ-साथ सभी प्राथमिक और विदेशी कुंजी के लिए स्वत: पीढ़ी, नामकरण सम्मेलनों के साथ-साथ सूचकांक और जांच बाधाओं आदि पर सबसे कठिन हिस्सा 'देवताओं' से निपट रहा था जो नियमों का पालन नहीं करते थे। हो सकता है कि अगर कोई दिलचस्पी लेता है तो मैं उसे एक दिन भी साझा करूंगा, लेकिन अभी के लिए, मुझे इस तैनाती, प्रवासन और संदर्भ डेटा की कहानी को भारी रूप से आगे बढ़ाने की जरूरत है। एक बार फिर धन्यवाद। ऐसा लगता है जैसे आप लोग मेरे सिर में क्या थे और आज सुबह की तलाश में थे।





ssdt