2009-02-11 14 views
13

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

"डेटाबेस परिवर्तनों को व्यवस्थित, संगठित और अभी तक रखने के लिए सर्वोत्तम तरीकों या तकनीकों में से एक क्या है, एक एकल डेवलपर या बहु-डेवलपर वातावरण में या तो प्रभावी ढंग से रोल करने में सक्षम। "

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

उत्तर

4

बाहरी टूल की सहायता के बिना मैंने इसे देखा सबसे आसान तरीका यह है कि यदि आप चाहें तो "स्कीमा पैच" बनाना है। स्कीमा पैच सिर्फ एक साधारण टी-एसक्यूएल स्क्रिप्ट है। स्कीमा पैच को स्क्रिप्ट के भीतर एक संस्करण संख्या दी जाती है और यह संख्या परिवर्तन प्राप्त करने के लिए डेटाबेस में किसी तालिका में संग्रहीत होती है।

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

इस तरह के विवरण में जाने वाली एक अच्छी पुस्तक को Refactoring Databases कहा जाता है।

यदि आप बाहरी उपकरण का उपयोग करना चाहते हैं तो आप Ruby's Migrations प्रोजेक्ट यानामक एक समान टूल देख सकते हैं। ये उपकरण सी # कक्षाओं/रूबी वर्गों को "फॉरवर्ड" और "पिछड़ा" माइग्रेशन के साथ बनाकर काम करते हैं। ये उपकरण अधिक सुविधा समृद्ध हैं क्योंकि वे जानते हैं कि आगे बढ़ने के साथ-साथ स्कीमा पैच में आगे बढ़ना है। जैसा कि आपने कहा है, आप बाहरी उपकरण में रूचि नहीं रखते हैं, लेकिन मैंने सोचा कि मैं इसे अन्य पाठकों के लिए जोड़ दूंगा।

4

मैं नहीं बल्कि इस श्रृंखला पसंद आया: http://odetocode.com/Blogs/scott/archive/2008/02/03/11746.aspx

+1

मुझे यह लिंक बहुत पसंद आया। यह सोचा और जानकारीपूर्ण था। मेरे स्वीकृत उत्तर से कहीं ज्यादा। हालांकि, अगर मुझे सही तरीके से याद किया जाता है, तो स्टैक ओवरफ़्लो उत्तर एक उत्तर/संक्षेपण का अधिक होना चाहिए और लिंक देना चाहिए; केवल एक लिंक के बजाय। माफ़ कीजिये। लेकिन अधिक महत्वपूर्ण बात, धन्यवाद यह बहुत अच्छा था !! इसे पढ़ें! – SnapJag

1

मेरे मामले में मैं एक स्क्रिप्ट हर बार जब मैं डेटाबेस बदल उत्पन्न हो रहा 00001.sql, n.sql तरह स्क्रिप्ट नामित और मैं डे के साथ एक मेज है मैंने अंतिम स्क्रिप्ट की संख्या निष्पादित की है। आप Database Documentation

0

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

एक अच्छा समाधान प्रति फ़ाइल एक फ़ाइल बनाना होगा, ताकि इस तालिका से संबंधित सभी परिवर्तन इस बात पर दिखाई दे सकें कि तालिका में कौन काम कर रहा है (इसकी कक्षा में काम करना)। संग्रहीत प्रक्रियाओं या विचारों के लिए मान्य है।

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

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

मेरे पास मेरे दिमाग में एक मॉडल-आधारित दृष्टिकोण है (क्षमा करें, इस समय लागू नहीं किया गया है) जिसमें स्कीमा-परिवर्तन "मॉडलिंग" (उदाहरण के लिए xml) हैं और एक प्रोसेसर (उदाहरण के लिए एसी # प्रोग्राम) अपडेट के दौरान सभी आवश्यक "एसक्यूएल" और उदाहरण के लिए डेटा को "ड्रॉपडाबेस" पर ले जाता है। डेटा वहां रह सकता है, और यदि किसी कारण से मुझे कुछ गिराए गए डेटा को पुनर्स्थापित करने की आवश्यकता है, तो मैं इसे प्रोसेसर के साथ कर सकता हूं। मुझे लगता है कि कुछ समय (वर्षों) में यह दृष्टिकोण उतना बुरा नहीं है क्योंकि अन्यथा डेवलपर्स "पुरानी" तालिकाओं को नहीं छूते हैं क्योंकि यदि तालिका या कॉलम वास्तव में आवश्यक है तो वे अब और नहीं जानते हैं। इस दृष्टिकोण के साथ यदि आप कुछ छोड़ देते हैं तो आपको बहुत जोखिम नहीं होता है!

0

मैं क्या है: स्कीमा (और संग्रहित प्रक्रियाओं और अनुक्रमित, आदि) को पुन: करने के लिए आवश्यक

  • सभी DDL आदेशों एक स्क्रिप्ट में हैं।
  • यह सुनिश्चित करने के लिए कि स्क्रिप्ट ठीक है, यह समय-समय पर परीक्षण किया जाता है (डेटाबेस बनाएं, स्क्रिप्ट चलाएं और बैकअप को पुनर्स्थापित करें और डेटाबेस को अच्छी तरह से जांचें)।
  • परिवर्तन नियंत्रण के लिए, स्क्रिप्ट को संस्करण नियंत्रण प्रणाली में रखा जाता है (मैं आमतौर पर सबवर्सन का उपयोग करता हूं)।

चाल है कि, अगर डेटाबेस नीचे लाया जा सकता है, के साथ, कहते हैं पुन: बनाने के लिए एक जोड़ा स्तंभ, मैं बनाने के लिए दो परिवर्तन, एक ALTER तालिका + लिपि में एक संशोधन है। थोड़ा और काम, लेकिन, लंबी अवधि में, यह जीतता है।

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