मुझे डेटाबेस स्कीमा और विकास, परीक्षण और उत्पादन सर्वर के बीच डेटा को प्रबंधित करने के अच्छे उदाहरण खोजने का प्रयास करने में कठिनाई हुई है।
यहां हमारा सेटअप है। प्रत्येक डेवलपर में एक वर्चुअल मशीन है जो हमारे ऐप और MySQL डेटाबेस चला रही है। जो कुछ भी वे चाहते हैं वह करने के लिए यह उनका व्यक्तिगत सैंडबॉक्स है। वर्तमान में, डेवलपर SQL स्कीमा में बदलाव करेंगे और डेटाबेस की डंप को एक टेक्स्ट फ़ाइल में करेंगे जो वे एसवीएन में करते हैं।
हम निरंतर एकीकरण विकास सर्वर को तैनात करना चाहते हैं जो हमेशा नवीनतम प्रतिबद्ध कोड चलाएगा। अगर हम अब ऐसा करते हैं, तो यह प्रत्येक बिल्ड के लिए एसवीएन से डेटाबेस को फिर से लोड करेगा।
हमारे पास एक परीक्षण (आभासी) सर्वर है जो "रिलीज उम्मीदवार" चलाता है। परीक्षण सर्वर पर तैनाती वर्तमान में एक बहुत ही मैन्युअल प्रक्रिया है, और आमतौर पर मुझे एसवीएन से नवीनतम एसक्यूएल लोड करना और इसे ट्वीव करना शामिल है। साथ ही, परीक्षण सर्वर पर डेटा असंगत है। आप अपने सैंडबॉक्स सर्वर पर प्रतिबद्ध करने वाले अंतिम डेवलपर के परीक्षण डेटा के साथ समाप्त हो जाते हैं।
जहां सब कुछ टूट जाता है वह उत्पादन के लिए तैनाती है। चूंकि हम परीक्षण डेटा के साथ लाइव डेटा को ओवरराइट नहीं कर सकते हैं, इसमें मैन्युअल रूप से सभी स्कीमा परिवर्तनों को फिर से बनाना शामिल है। यदि डेटा में हेरफेर करने के लिए बड़ी संख्या में स्कीमा परिवर्तन या रूपांतरण स्क्रिप्ट होते हैं, तो यह वास्तव में बालों वाली हो सकती है।
यदि समस्या सिर्फ स्कीमा थी, तो यह एक आसान समस्या होगी, लेकिन डेटाबेस में "आधार" डेटा है जो विकास के दौरान अद्यतन किया गया है, जैसे सुरक्षा और अनुमति तालिकाओं में मेटा-डेटा।
निरंतर एकीकरण और एक-चरण-निर्माण की ओर बढ़ने में यह सबसे बड़ा बाधा है। आप इसे कैसे हल करें?
एक फॉलो-अप प्रश्न: आप डेटाबेस संस्करणों को कैसे ट्रैक करते हैं ताकि आपको पता चल सके कि किसी दिए गए डेटाबेस इंस्टेंस को अपग्रेड करने के लिए कौन सी स्क्रिप्ट चलाना है? क्या लांस जैसी संस्करण तालिका मानक प्रक्रिया के नीचे उल्लेख करती है?
Thanks for the reference to Tarantino. I'm not in a .NET environment, but I found their DataBaseChangeMangement wiki page to be very helpful. Especially this Powerpoint Presentation (.ppt)
मैं एक पायथन स्क्रिप्ट लिखने जा रहा हूं जो डेटाबेस में किसी तालिका के विरुद्ध किसी दिए गए निर्देशिका में *। Sql
स्क्रिप्ट के नामों की जांच करता है और पूर्णांक के आधार पर क्रम में नहीं चलता है जो फ़ाइल नाम के पहले भाग को बनाता है। यदि यह एक बहुत ही सरल समाधान है, जैसा कि मुझे संदेह है कि यह होगा, तो मैं इसे यहां पोस्ट करूंगा।
मेरे पास इसके लिए एक वर्किंग स्क्रिप्ट है। यह डीबी शुरू करने में संभालता है अगर यह अस्तित्व में नहीं है और आवश्यकतानुसार उन्नयन स्क्रिप्ट चला रहा है। किसी मौजूदा डेटाबेस को पोंछने और फ़ाइल से परीक्षण डेटा आयात करने के लिए स्विच भी हैं। यह लगभग 200 लाइनें है, इसलिए मैं इसे पोस्ट नहीं करूंगा (हालांकि यदि दिलचस्पी है तो मैं इसे पेस्टबिन पर डाल सकता हूं)।