2009-12-22 10 views
19

मैं जिस सॉफ्टवेयर सिस्टम पर काम करता हूं वह एक चिकित्सा बिलिंग प्रणाली है, बड़ी मात्रा में डेटा और डेटा टेबल, और संग्रहीत प्रक्रियाएं हैं।SQL सर्वर का उपयोग कर डेटाबेस परिवर्तनों को तैनात करने का एक आसान तरीका क्या है?

मैं लेख "12 Steps to Better Code" पढ़ रहा था और जोएल टेस्ट # 2 में कहता है: क्या आप एक कदम में निर्माण कर सकते हैं?

अब मैं सोच रहा था, क्या इसका मतलब है तैनाती का निर्माण (ताकि कोई ग्राहक अपनी तैनाती को अपडेट कर सके)।

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

वर्तमान समय में, जब हम किसी डेटाबेस में परिवर्तन करते हैं, तो सभी परिवर्तन रिकॉर्ड किए जाते हैं और डेटाबेस अपडेट स्क्रिप्ट में जोड़े जाते हैं, जो ग्राहक निर्माण के लिए तैनात किए जाने पर संस्करण संस्करण प्राप्त होता है।

क्या ऐसा करने का कोई आसान तरीका है? कुछ स्क्रिप्ट या एप्लिकेशन जो डेटाबेस स्कीमा को "पहले और बाद में" लेते हैं और मैंने सुझाए गए एक अपडेट स्क्रिप्ट को बनाया है?

या यह वही तरीका है जो हर कोई करता है, जिसे मुझे विश्वास करना मुश्किल होगा, लेकिन व्यावहारिक।

एक स्वचालित प्रणाली त्रुटियों को कम करेगी, और तैनाती की गति को काफी समय तक बढ़ाएगी, और मुझे यह जानने में दिलचस्पी होगी कि ऐसा कैसे करें।

उत्तर

14
वहाँ

जटिलता के विभिन्न स्तरों है कि आप के माध्यम से जाना कर सकते हैं: बाहर की जाँच करता है, तो आप अद्यतन स्क्रिप्ट है कि आप मैन्युअल बनाते हैं, और सिर्फ एक तरह से आसानी से विभिन्न सर्वरों के लिए उन को लागू करने के लिए देख रहे हैं है

  • , एसएसडब्ल्यू परामर्श द्वारा SSW SQL Deploy। ऐसा नहीं है कि परिदृश्य बहुत अच्छी तरह से

  • यदि आप एक डेटाबेस diff दृष्टिकोण के अधिक करने के लिए करते हैं संभाल कर सकते हैं, तो लाल गेट के SQL Compare (पहले ही उल्लेख किया है) और SQL Packager एक महान कॉम्बो बनाते हैं। आप पुराने और नए के बीच डेटाबेस को अलग कर सकते हैं और उसके बाद एक अच्छा पैकेज में परिवर्तन लागू कर सकते हैं - एक EXE या C# प्रोजेक्ट

  • यदि आप वास्तविक, अंत-टू-एंड, अच्छी तरह से विचार दृष्टिकोण (एक के साथ) एक सीखने की अवस्था का थोड़ा सा), Innovartis' DBGhost दृष्टिकोण देखें। यह डेटाबेस विकास और वृद्धिशील अद्यतनों को संभालने के लिए एक संपूर्ण पद्धति/तकनीक है। यह बहुत शक्तिशाली है और बहुत आशाजनक लग रही है - लेकिन यह एक सभी या कुछ भी नहीं दृष्टिकोण का एक सा है: या तो आप इसे में खरीद सकते हैं और इसका इस्तेमाल अंत से अंत, या तुम नहीं

आशा इस मदद करता है एक सा!

+2

मैंने 10 वर्षों तक डीबीजीहोस्ट का उपयोग किया है और यह हमेशा काम करता है। उनके द्वारा प्रदान किया जाने वाला समर्थन किसी के लिए दूसरा नहीं है। – penderi

+0

अब 2013 है। इस क्षेत्र पर कोई अपडेट? – ysrb

+1

@ysrb: ठीक है, [SQL सर्वर डेटा टूल्स] (http://msdn.microsoft.com/en-us/data/tools है।एएसपीएक्स) विजुअल स्टूडियो 2012/2013 के अंदर जो बॉक्स के बाहर उन कार्यों को स्वचालित रूप से स्वचालित कर रहा है (यदि आप विजुअल स्टूडियो का उपयोग कर रहे हैं, तो यह है) –

2

इस ब्लॉग पोस्ट पर एक नज़र डालें। मैंने इस प्रकार की सिंगल अपडेट स्क्रिप्ट का उपयोग किसी भी डीबी संस्करण से दो परियोजनाओं पर किया है और यह बहुत अच्छी तरह से काम करता है।

http://blogs.msdn.com/danhardan/archive/2007/03/30/database-change-scripts-mambo-style.aspx

आप कार्यप्रवाह अपने कार्यप्रवाह फिट और/या टेम्पलेट sql फ़ाइल अद्यतन करने के लिए एक सा tweak करना पड़ सकता है, लेकिन कुल मिलाकर मैं विचार मिल गया है डीबी की तैनाती करने के लिए एक बहुत ही ठोस दृष्टिकोण हो सकता है।

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

कारण यह काम है क्योंकि लुढ़का हुआ स्क्रिप्ट प्रत्येक टुकड़ा को देखने के लिए जांच करता है जो एक व्यक्तिगत स्क्रिप्ट था वांछित डेटाबेस के खिलाफ पहले ही चल रहा है। नतीजतन, केवल नवीनतम स्क्रिप्ट चलती हैं। इसके लिए एक चेतावनी यह है कि एक बार जब स्क्रिप्ट को स्रोत नियंत्रण में चेक किया जाता है और तैनात किया गया है, तो आप इसे संपादित नहीं कर सकते क्योंकि ट्रैकिंग तालिका पहले ही सोचती है कि स्क्रिप्ट चलाई गई है। उन परियोजनाओं के लिए यह ठीक है जिन पर मैंने काम किया है क्योंकि हम स्क्रिप्ट फ़ोल्डर में एक और स्क्रिप्ट जोड़ते हैं।

उम्मीद है कि मैं समझने के लिए पर्याप्त प्रक्रिया को समझा रहा हूं। यह वास्तव में जटिल नहीं है और यदि आपके प्रोजेक्ट पर दृष्टिकोण लागू होता है तो यह काफी उपयोगी हो सकता है।

1

"अब मैं सोच रहा था, इसका मतलब है कि क्या तैनाती का निर्माण होता है (ताकि कोई ग्राहक अपनी तैनाती को अपडेट कर सके)?"

मेरा मानना ​​है कि जोएल टेस्ट # 2 तैनाती की चाल के लिए नहीं है, लेकिन विकास के दौरान continuios एकीकरण के लिए।

प्रोड में डेटाबेस परिवर्तनों के लिए, उन्हें लेन-देन रोलआउट के हिस्से के रूप में या डेटाबेस का बैक अप लेने के बाद स्क्रिप्ट के माध्यम से किया जाना चाहिए।रोलआउट में कुछ विफल होने पर आप हमेशा नेविगेट करने में सक्षम होना चाहते हैं।

+0

(+1) अच्छा जवाब। इसे कार्यान्वित करने के लिए। आपको अपने डेटाबेस स्थिति, आधार स्थिति और स्क्रिप्ट करने के लिए संस्करण संख्याओं की आवश्यकता है और डेटाबेस ऑब्जेक्ट में परिवर्तन पूर्ववत करें। –

+0

हालांकि वे सही नहीं हैं, रेल माइग्रेशन यह काफी अच्छी तरह से करते हैं –

0

ऐसे अनुप्रयोग हैं जो डेटाबेस को सिंक करते हैं, लेकिन मुझे लगता है कि आप जो कर रहे हैं उससे बेहतर है। डेटाबेस अपडेट करने के लिए एक स्क्रिप्ट लिखना आपको त्रुटियों को संभालने और लेनदेन चलाने की क्षमता देता है। यह सबसे अच्छा अभ्यास माना जाता है।

2

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

हमारे पास अपग्रेड स्क्रिप्ट्स यूनिट परीक्षणों में एकीकृत हैं ताकि वे निरंतर एकीकरण के हिस्से के रूप में कोड के साथ परीक्षण कर सकें। मुझे लगता है कि यह "एक कदम में निर्माण करना" का एक महत्वपूर्ण हिस्सा है।

1

अपने डेटाबेस को पैच के सेट के रूप में विकसित करें जो एक दूसरे पर निर्भर करता है। फिर तैनाती के लिए एक एसक्यूएल फ़ाइल बनाने के लिए https://github.com/LuvDaSun/sqlpatch (मेरे द्वारा) जैसे टूल का उपयोग करें।

sqlpatch पैच को सही क्रम में सॉर्ट करेगा और सुनिश्चित करेगा कि प्रत्येक पैच बिल्कुल एक बार निष्पादित किया जाता है, भले ही एक ही स्क्रिप्ट दो बार चलती है।

इस रणनीति का उपयोग सीआई/सीडी पर्यावरण में आपके डेटाबेस की तैनाती के लिए किया जा सकता है। यह एक शाखा को धक्का देने के रूप में तैनाती आसान बनाता है।

0

माइक्रोसॉफ्ट ने स्वयं SQL Server में Data-tier applications डेटाबेस को तैनात और अपग्रेड करने के लिए एक निःशुल्क विकल्प के रूप में पेश किया।

मैं इस उपकरण का उपयोग करता हूं और उत्पादन तैनाती सहित।

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

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