दिलचस्प पोस्ट
जेडीके गतिशील प्रॉक्सी और सीजीएलबी के बीच क्या अंतर है? जावास्क्रिप्ट सरणी के सभी संयोजन खोजना इकाई फ़्रेमवर्क: प्राथमिक कुंजी के बिना तालिका कैसे हेक्साडेसिमल को varchar (datetime) डालने के लिए? एंड्रॉइड में टैब सूचक टेक्स्ट का रंग कैसे बदल सकता है? प्रबंधन स्टूडियो से तेज़ी से वेब से बुलाया जाने पर संग्रहीत प्रक्रिया धीमी हो जाती है पासवर्ड इनपुट के बाद चमकदार ऐप प्रारंभ करना समय के साथ GameObject घुमाएँ बूस्ट एएसआईओ को अवरुद्ध करने के लिए समय-निर्धारण कैसे सेट करें? सीएसएस का इस्तेमाल करते हुए एक तत्व से पहले लाइन ब्रेक कैसे सम्मिलित करें कैसे PHP में स्कैंडर का उपयोग केवल छवियों को पाने के लिए? java: एक निश्चित सेकंड के बाद एक फ़ंक्शन चलाएँ Linq क्वेरी परिणाम में एक लाइन संख्या प्रोजेक्ट कैसे करें मैं एक सूची <T> में एक विशिष्ट तत्व कैसे प्राप्त करूं? रेल पर रूबी – एक CSV फ़ाइल से डेटा आयात करें

संस्करण SQL सर्वर डेटाबेस

मैं संस्करण नियंत्रण के तहत अपने डाटाबेस प्राप्त करना चाहता हूं। क्या मुझे किसी भी सलाह या अनुशंसित लेखों की शुरुआत करने के लिए है?

मैं हमेशा वहां कम से कम कुछ डेटा प्राप्त करना चाहता हूं (जैसे उल्लुओं का उल्लेख है: उपयोगकर्ता प्रकार और व्यवस्थापक)। मैं प्रदर्शन माप के लिए उत्पन्न परीक्षण डेटा का एक बड़ा संग्रह भी चाहता हूं।

वेब के समाधान से एकत्रित समाधान "संस्करण SQL सर्वर डेटाबेस"

मार्टिन फोवलर ने विषय पर मेरा पसंदीदा लेख लिखा, http://martinfowler.com/articles/evodb.html । मैं संस्करण नियंत्रण के तहत स्लममा डंप्स को ढेर के रूप में नहीं रखता है और अन्य सुझाव देते हैं क्योंकि मैं अपने उत्पादन डेटाबेस को अपग्रेड करने का एक आसान तरीका चाहता हूं।

एक वेब अनुप्रयोग के लिए जहां मेरे पास एक एकल उत्पादन डेटाबेस उदाहरण होगा, मैं दो तकनीकों का उपयोग करता हूं:

डेटाबेस अपग्रेड लिपियों

अनुक्रम डेटाबेस अपग्रेड स्क्रिप्ट जिसमें स्कीमा को संस्करण N से N + 1 तक ले जाने के लिए आवश्यक DDL को शामिल किया गया था (ये आपके संस्करण नियंत्रण प्रणाली में जाते हैं।) एक _version_history_ तालिका, ऐसा कुछ

create table VersionHistory ( Version int primary key, UpgradeStart datetime not null, UpgradeEnd datetime ); 

हर बार एक नवीनीकरण स्क्रिप्ट चलाता है जो नए संस्करण से मेल खाती है।

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

डेवलपर सैंडबॉक्स सिंक्रनाइज़ेशन

  1. एक उत्पादन डेटाबेस को बैकअप, स्वच्छ, और सिकुड़ने के लिए एक स्क्रिप्ट उत्पादन डीबी के प्रत्येक अपग्रेड के बाद इसे चलाएं
  2. एक डेवलपर के वर्कस्टेशन पर बैकअप को पुनर्स्थापित करने के लिए एक स्क्रिप्ट (और ज़्यादा ज़्यादा ज़्यादा ज़्यादा ज़्यादा ज़रूरी हो) प्रत्येक डेवलपर उत्पादन डीबी के प्रत्येक अपग्रेड के बाद यह स्क्रिप्ट चलाता है।

एक चेतावनी: मेरे स्वचालित टेस्ट स्कीमा के खिलाफ चलते हैं- सही है लेकिन खाली डेटाबेस, इसलिए यह सलाह आपकी आवश्यकताओं के अनुरूप नहीं होगी।

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

\ कार्य
\ सुरक्षा
\ सुरक्षा \ भूमिकाएँ
\ सुरक्षा \ स्कीमा
\ सुरक्षा \ उपयोगकर्ता
\संग्रहित प्रक्रियाएं
\ टेबल्स

यदि आप परिवर्तन करने के बाद अपनी स्क्रिप्ट को एक ही रूट निर्देशिका में डंप करते हैं, तो आप इसे अपने एसवीएन रेपो को अपडेट करने के लिए उपयोग कर सकते हैं, और प्रत्येक ऑब्जेक्ट का चलने वाला इतिहास अलग-अलग रखें

यह आसपास के विकास के "कठिन परिस्थितियों" में से एक है जहां तक ​​मुझे पता है कि कोई सही समाधान नहीं हैं

यदि आपको डेटाबेस संरचना को संग्रहीत करने की आवश्यकता है और डेटा नहीं है तो आप SQL क्वेरीज़ के रूप में डेटाबेस निर्यात कर सकते हैं। (एंटरप्राइज़ मैनेजर में: डेटाबेस पर राइट क्लिक करें -> एसक्यूएल स्क्रिप्ट उत्पन्न करें। मैं विकल्प टैब पर "ऑब्जेक्ट प्रति एक फ़ाइल बना" सेट करने की सलाह देता हूं) आप इन टेक्स्ट फाइलों को एसडीएन में भेज सकते हैं और एसवीएन के फ़ेफ और लॉगिंग फ़ंक्शन का उपयोग कर सकते हैं।

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

यदि आपको सभी डेटा को भी रखने की आवश्यकता है, तो मैं सलाह देता हूं कि डेटाबेस का बैक अप बनाए रखने और तुलना करने के लिए रेडगेट ( http://www.red-gate.com/ ) उत्पादों का उपयोग करना। वे सस्ता नहीं आते हैं, लेकिन वे हर पैसे के लायक हैं।

सबसे पहले, आपको संस्करण नियंत्रण प्रणाली का चयन करना होगा जो आपके लिए सही है:

  • केंद्रीकृत संस्करण नियंत्रण प्रणाली – एक मानक प्रणाली जहां उपयोगकर्ता फाइलों पर काम करने से पहले / बाद में चेक / जांचते हैं, और फ़ाइलों को एक केंद्रीय सर्वर में रखा जा रहा है

  • वितरित संस्करण नियंत्रण प्रणाली – एक प्रणाली जहां रिपॉजिटरी को क्लोन किया जा रहा है, और प्रत्येक क्लोन वास्तव में रिपॉज़िटरी का पूर्ण बैकअप है, इसलिए यदि कोई सर्वर क्रैश करता है, तो किसी भी क्लोन रिपॉजिटरी का उपयोग इसे पुनर्स्थापित करने के लिए किया जा सकता है ताकि आपकी आवश्यकताओं के लिए सही सिस्टम चुनने के बाद , आपको प्रत्येक संस्करण नियंत्रण प्रणाली का मूल है जो रिपॉजिटरी सेटअप करने की आवश्यकता होगी यह सब निम्नलिखित लेख में समझाया गया है: http://solutioncenter.apexsql.com/sql-server-source-control-part-i-understanding स्रोत नियंत्रण-मूल बातें /

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

  • SQL सर्वर प्रबंधन स्टूडियो MSSCCI प्रदाता के माध्यम से,

  • दृश्य स्टूडियो और SQL सर्वर डेटा उपकरण

  • एक तृतीय पक्ष उपकरण ApexSQL स्रोत नियंत्रण

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

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

SQL स्रोत नियंत्रण में यह स्थिर डेटा सारणी निर्दिष्ट करना संभव है। इन्हें स्रोत नियंत्रण में INSERT स्टेटमेंट के रूप में संग्रहित किया जाता है।

यदि आप टेस्ट डेटा के बारे में बात कर रहे हैं, तो हम चाहते हैं कि आप या तो एक उपकरण के साथ टेस्ट डेटा जनरेट करें या पोस्ट डिप्लॉयमेंट स्क्रिप्ट के माध्यम से परिभाषित करें, या आप बस देव वातावरण को एक उत्पादन बैकअप बहाल करें।

आप Liquibase ( http://www.liquibase.org/ ) को देखना चाह सकते हैं। यहां तक ​​कि अगर आप उपकरण का उपयोग नहीं करते हैं, तो यह डाटाबेस परिवर्तन प्रबंधन की अवधारणाओं को व्यवस्थित करता है या बहुत अच्छा रीफैक्चरिंग करता है।

एक अतिरिक्त सिफारिश और एक चेतावनी के साथ, RedGate उपकरण की सिफारिश करने वाले सभी के लिए +1

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

एक चेतावनी यह है कि एक पटकथा वाले समाधान के साथ या अन्यथा, रेडगेट उपकरण पर्याप्त रूप से चिकनी होते हैं, क्योंकि अमूर्त अव्यवस्था वाले एसक्यूएल वास्तविकताओं के बारे में भूलना आसान है। यदि आप किसी तालिका में सभी कॉलम का नाम बदलते हैं, तो SqlCompare के पास नए कॉलम में पुराने कॉलमों को मैप करने का कोई तरीका नहीं है और तालिका में सभी डेटा को छोड़ देगा। यह चेतावनियां उत्पन्न करेगी लेकिन मैंने लोगों को देखा है कि पिछले पर क्लिक किया गया था। यहां एक सामान्य बिंदु है, मुझे लगता है कि, आप केवल डीबी संस्करण को स्वचालित कर सकते हैं और अब तक उन्नयन कर सकते हैं – अबाउट्स बहुत छेड़छाड़ हैं।

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

वीएस 2010 के साथ, डेटाबेस प्रोजेक्ट का उपयोग करें।

  1. अपने डेटाबेस को स्क्रिप्ट दें
  2. स्क्रिप्ट में या सीधे अपने डीबी सर्वर पर परिवर्तन करें
  3. डेटा> स्कीमा का उपयोग करके समन्वयित करें

एक परिपूर्ण डीबी संस्करण समाधान बनाता है, और डीबी की हवा को सिंक करता है

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

मुझे लगता है कि हर डेवलपर के लिए एक अलग डाटाबेस होना जरूरी है और किसी साझा डेटाबेस का उपयोग नहीं करना है। इस तरह से डेवलपर्स अन्य मामलों से स्वतंत्र रूप से परीक्षण के मामलों और विकास चरणों बना सकते हैं।

स्वचालित उपकरण का डाटाबेस मेटाडेटा से निपटने के लिए साधन होना चाहिए, जो बताता है कि किस डेटाबेस में विकास की स्थिति है और किस तालिका में संस्करण नियंत्रणीय डेटा और इतने पर है

आपने अपने लक्षित माहौल या बाधाओं के बारे में कोई विशेष जानकारी नहीं दी है, इसलिए यह पूरी तरह से लागू नहीं हो सकता है … लेकिन अगर आप एक विकसित डीबी स्कीमा को प्रभावी ढंग से ट्रैक करने का एक तरीका तलाश रहे हैं और इसका इस्तेमाल करने के विचार के विपरीत नहीं हैं रूबी, एक्टिवर्करॉर्ड की माइग्रेशन आपके गली सही हैं

माइग्रेशन प्रोग्रामेटिक रूप से रूबी डीएसएल का उपयोग करते हुए डाटाबेस परिवर्तनों को परिभाषित करते हैं; प्रत्येक परिवर्तन लागू किया जा सकता है या (आमतौर पर) वापस लुढ़काया जा सकता है, जिससे आपको समय पर किसी भी बिंदु पर अपने डीबी स्कीमा के एक अलग संस्करण पर कूदने की अनुमति मिलती है। इन परिवर्तनों को परिभाषित करने वाली फाइल को वर्जन नियंत्रण में स्रोत कोड के किसी अन्य टुकड़े की तरह जाँच कर सकते हैं।

क्योंकि माइग्रेशन ActiveRecord का एक हिस्सा हैं, क्योंकि वे आमतौर पर पूर्ण-स्टैक रेल ऐप्स में उपयोग करते हैं; हालांकि, आप कम से कम प्रयास के साथ पटरियों से स्वतंत्र ActiveRecord का उपयोग कर सकते हैं रेल के बाहर एआर के माइग्रेशन का उपयोग करने के अधिक विस्तृत उपचार के लिए यहां देखें।

आप एक माइग्रेशन समाधान भी देख सकते हैं ये आपको सी # कोड में अपना डेटाबेस स्कीमा निर्दिष्ट करने की अनुमति देते हैं, और MSBuild का उपयोग करके अपने डेटाबेस संस्करण को ऊपर और नीचे रोल कर सकते हैं।

मैं वर्तमान में डीबीईटी का उपयोग कर रहा हूं, और यह अच्छी तरह से काम कर रहा है

प्रत्येक डेटाबेस स्रोत कोड नियंत्रण के तहत होना चाहिए। क्या कमी है, यह एक उपकरण है कि स्वचालित रूप से सभी डेटाबेस ऑब्जेक्ट्स स्क्रिप्ट – और "कॉन्फ़िगरेशन डेटा" – फाइल करने के लिए, जिसे किसी भी स्रोत नियंत्रण प्रणाली में जोड़ा जा सकता है यदि आप SQL सर्वर का प्रयोग कर रहे हैं, तो मेरा समाधान यहां है: http://dbsourcetools.codeplex.com/ मज़े करो। – नाथन

यह आसान है।

  1. जब बेस प्रोजेक्ट तैयार हो जाता है तो आपको पूर्ण डेटाबेस स्क्रिप्ट बनाना चाहिए। यह स्क्रिप्ट एसवीएन के लिए प्रतिबद्ध है यह पहला संस्करण है

  2. उसके बाद सभी डेवलपर्स परिवर्तन स्क्रिप्ट (वैकल्पिक …, नई टेबल, sprocs, आदि) बनाता है।

  3. जब आपको वर्तमान संस्करण की आवश्यकता होती है तो आपको सभी नई परिवर्तन स्क्रिप्ट निष्पादित करनी चाहिए।

  4. जब ऐप को उत्पादन के लिए जारी किया जाता है, तो आप 1 पर वापस जाते हैं (लेकिन फिर यह पाठ्यक्रम का क्रमिक संस्करण होगा)।

नैन उन परिवर्तन स्क्रिप्ट को निष्पादित करने में आपकी सहायता करेगा। 🙂

और याद रखें। अनुशासन जब सब कुछ ठीक काम करता है हर बार जब डेटाबेस में बदलाव किया जाता है तो कोड में संबंधित कार्य भी किए जाते हैं।

यदि आपके पास एक छोटा डाटाबेस है और आप पूरी चीज संस्करण चाहते हैं, तो यह बैच स्क्रिप्ट मदद कर सकता है। यह एक MSSQL डेटाबेस MDF फ़ाइल को सबवर्जन में पहचानता है, संपीड़ित करता है और जांचता है।

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

डंप को एक स्रोत कोड नियंत्रण प्रणाली बनाने के लिए जो थोड़ा सा तेज है, आप यह देख सकते हैं कि sysobjects में संस्करण की जानकारी का उपयोग करते हुए अंतिम बार से कौन से ऑब्जेक्ट बदल गए हैं।

सेटअप: प्रत्येक डेटाबेस में एक तालिका बनाएँ जिसे आप संस्करण की जानकारी को पिछली बार जब आपने चेक किया था (पहले भाग पर खाली) को पकड़ने के लिए बढ़ते हुए जांचना चाहते हैं। अगर आप अपना संपूर्ण डेटा संरचना पुनः स्कैन करना चाहते हैं तो इस तालिका को साफ़ करें।

 IF ISNULL(OBJECT_ID('last_run_sysversions'), 0) <> 0 DROP TABLE last_run_sysversions CREATE TABLE last_run_sysversions ( name varchar(128), id int, base_schema_ver int, schema_ver int, type char(2) ) 

सामान्य चलने वाला मोड: आप इस एसक्यूएल से परिणाम ले सकते हैं, और केवल उन लोगों के लिए एसक्यूएल स्क्रिप्ट जेनरेट कर सकते हैं, और उन्हें अपनी पसंद के स्रोत नियंत्रण में डाल सकते हैं।

 IF ISNULL(OBJECT_ID('tempdb.dbo.#tmp'), 0) <> 0 DROP TABLE #tmp CREATE TABLE #tmp ( name varchar(128), id int, base_schema_ver int, schema_ver int, type char(2) ) SET NOCOUNT ON -- Insert the values from the end of the last run into #tmp INSERT #tmp (name, id, base_schema_ver, schema_ver, type) SELECT name, id, base_schema_ver, schema_ver, type FROM last_run_sysversions DELETE last_run_sysversions INSERT last_run_sysversions (name, id, base_schema_ver, schema_ver, type) SELECT name, id, base_schema_ver, schema_ver, type FROM sysobjects -- This next bit lists all differences to scripts. SET NOCOUNT OFF --Renamed. SELECT 'renamed' AS ChangeType, t.name, o.name AS extra_info, 1 AS Priority FROM sysobjects o INNER JOIN #tmp t ON o.id = t.id WHERE o.name <> t.name /*COLLATE*/ AND o.type IN ('TR', 'P' ,'U' ,'V') UNION --Changed (using alter) SELECT 'changed' AS ChangeType, o.name /*COLLATE*/, 'altered' AS extra_info, 2 AS Priority FROM sysobjects o INNER JOIN #tmp t ON o.id = t.id WHERE ( o.base_schema_ver <> t.base_schema_ver OR o.schema_ver <> t.schema_ver ) AND o.type IN ('TR', 'P' ,'U' ,'V') AND o.name NOT IN ( SELECT oi.name FROM sysobjects oi INNER JOIN #tmp ti ON oi.id = ti.id WHERE oi.name <> ti.name /*COLLATE*/ AND oi.type IN ('TR', 'P' ,'U' ,'V')) UNION --Changed (actually dropped and recreated [but not renamed]) SELECT 'changed' AS ChangeType, t.name, 'dropped' AS extra_info, 2 AS Priority FROM #tmp t WHERE t.name IN ( SELECT ti.name /*COLLATE*/ FROM #tmp ti WHERE NOT EXISTS (SELECT * FROM sysobjects oi WHERE oi.id = ti.id)) AND t.name IN ( SELECT oi.name /*COLLATE*/ FROM sysobjects oi WHERE NOT EXISTS (SELECT * FROM #tmp ti WHERE oi.id = ti.id) AND oi.type IN ('TR', 'P' ,'U' ,'V')) UNION --Deleted SELECT 'deleted' AS ChangeType, t.name, '' AS extra_info, 0 AS Priority FROM #tmp t WHERE NOT EXISTS (SELECT * FROM sysobjects o WHERE o.id = t.id) AND t.name NOT IN ( SELECT oi.name /*COLLATE*/ FROM sysobjects oi WHERE NOT EXISTS (SELECT * FROM #tmp ti WHERE oi.id = ti.id) AND oi.type IN ('TR', 'P' ,'U' ,'V')) UNION --Added SELECT 'added' AS ChangeType, o.name /*COLLATE*/, '' AS extra_info, 4 AS Priority FROM sysobjects o WHERE NOT EXISTS (SELECT * FROM #tmp t WHERE o.id = t.id) AND o.type IN ('TR', 'P' ,'U' ,'V') AND o.name NOT IN ( SELECT ti.name /*COLLATE*/ FROM #tmp ti WHERE NOT EXISTS (SELECT * FROM sysobjects oi WHERE oi.id = ti.id)) ORDER BY Priority ASC 

नोट: यदि आप अपने किसी भी डेटाबेस में एक गैर-मानक /* COLLATE */ का उपयोग करते हैं, तो आपको अपने डेटाबेस कोलेशन के साथ /* COLLATE */ को बदलने की आवश्यकता होगी। यानी COLLATE Latin1_General_CI_AI

चूंकि हमारे ऐप को कई RDBMSs पर काम करना है, इसलिए हम डेटाबेस नियंत्रण तटस्थ टोक़ प्रारूप (एक्सएमएल) का उपयोग करते हुए संस्करण नियंत्रण में हमारी स्कीमा परिभाषा को स्टोर करते हैं। हम XML प्रारूप में हमारे डेटाबेस के लिए संदर्भ डेटा को भी संस्करण-नियंत्रण करते हैं (जहां "संबंध" संदर्भ तालिकाओं में से एक है):

  <Relationship RelationshipID="1" InternalName="Manager"/> <Relationship RelationshipID="2" InternalName="Delegate"/> etc. 

फिर हम स्कीमा अपग्रेड और संदर्भ डेटा अपग्रेड स्क्रिप्ट जनरेट करने के लिए घरेलू-उगने वाले टूल का उपयोग करते हैं जो संस्करण X के संस्करण X से संस्करण X + 1 पर जाने के लिए आवश्यक हैं।

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

हमें हमारे एसक्यूएल डाटाबेस के संस्करण की जरूरत थी, जब हमने एक x64 प्लेटफॉर्म पर चले गए और हमारे पुराने संस्करण को माइग्रेशन से तोड़ दिया। हमने एक सी # एप्लिकेशन लिखा है जो एसक्यूएलएमएमओ को सभी एसक्यूएल ऑब्जेक्ट्स को एक फ़ोल्डर में मैप करने के लिए इस्तेमाल किया था:

                 जड़
                     सर्वर का नाम
                        डेटाबेस नाम
                           स्कीमा ऑब्जेक्ट्स
                              डेटाबेस ट्रिगर *
                                 .ddltrigger.sql
                              कार्य
                                 ..function.sql
                              सुरक्षा
                                 भूमिकाएँ
                                    एप्लिकेशन भूमिकाएं
                                       .approle.sql
                                    डाटाबेस भूमिकाएं
                                       .role.sql
                                 स्कीमा *
                                    .schema.sql
                                 उपयोगकर्ता
                                    .user.sql
                              भंडारण
                                 पूर्ण पाठ कैटलॉग *
                                    .fulltext.sql
                              संग्रहित प्रक्रियाएं
                                 ..proc.sql
                              समानार्थक शब्द*
                                 .synonym.sql
                              टेबल्स
                                 ..table.sql
                                 प्रतिबन्ध
                                    ... chkconst.sql
                                    ... defconst.sql
                                 इंडेक्स
                                    ... index.sql
                                 चांबियाँ
                                    ... fkey.sql
                                    ... pkey.sql
                                    ... ukey.sql
                                 ट्रिगर
                                    ... trigger.sql
                              प्रकार
                                 उपयोगकर्ता परिभाषित डेटा प्रकार
                                    ..uddt.sql
                                 एक्सएमएल स्कीमा संग्रह *
                                    ..xmlschema.sql
                              दृश्य
                                 ..view.sql
                                 इंडेक्स
                                    ... index.sql
                                 ट्रिगर
                                    ... trigger.sql

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

मैंने कुछ समय पहले इस ऐप को लिखा था, http://sqlschemasourcectrl.codeplex.com/ जो कि आपके एसएसएफ़ डीबी के एसएफ़एन में जितनी बार आप चाहें स्कैन करेंगे और स्वचालित रूप से अपने ऑब्जेक्ट्स (टेबल, विज़ुअल, प्रोसेस्, फ़ंक्शन, एसक्यूएल सेटिंग्स) को डंप करेंगे। एक जादू की तरह काम करता है। मैं इसे Unfuddle (जो मुझे चेकइन पर अलर्ट प्राप्त करने की अनुमति देता है) के साथ प्रयोग करता है

विशिष्ट समाधान डेटाबेस को आवश्यकतानुसार डंप करना और उन फ़ाइलों को बैकअप करना है

आपके विकास प्लेटफॉर्म पर निर्भर करते हुए, हो सकता है कि ओपनसोर्स प्लग इन उपलब्ध हो। यह करने के लिए अपना स्वयं का कोड रोलिंग आमतौर पर काफी तुच्छ है

नोट: आप इसे संस्करण नियंत्रण में डालने के बदले डेटाबेस डंप को बैकअप लेना चाह सकते हैं। फ़ाइलें संस्करण नियंत्रण में बहुत तेज़ हो सकती हैं, और आपका संपूर्ण स्रोत नियंत्रण प्रणाली धीमे हो सकती है (मैं इस समय सीवीएस हॉरर कहानी को याद कर रहा हूं)।

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

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

टीएफएस डाटाबेस प्रमुख आर्क ब्लॉग

एमएस टीएफएस साइट

मैं ईएसवी के उत्तर से सहमत हूं और उसी सटीक कारण के लिए मैंने एक बहुत ही सरल फाइल में डाटाबेस अपडेट बनाए रखने में कुछ समय पहले थोड़ी परियोजना शुरू की थी, जो तब स्रोत कोड के बाहर एक लंबा पक्ष बनाए रखा जा सकता था। यह डेवलपर के साथ-साथ यूएटी और प्रोडक्शन के लिए आसान अपडेट की अनुमति देता है। उपकरण पर काम करता है लेकिन SQL सर्वर और MySql

कुछ परियोजना विशेषताएं:

  • स्कीमा परिवर्तन की अनुमति देता है
  • मूल्य ट्री आबादी की अनुमति देता है
  • उदाहरण के लिए अलग परीक्षण डेटा सम्मिलित करता है UAT
  • रोलबैक के लिए विकल्प की अनुमति देता है (स्वचालित नहीं)
  • SQL सर्वर और MySQL के लिए समर्थन बनाए रखता है
  • अपने मौजूदा डेटाबेस को एक सरल कमान के साथ संस्करण नियंत्रण में आयात करने की क्षमता (केवल एसक्यूएल सर्वर … अभी भी mysql पर काम कर रहा है)

कोड को Google कोड पर होस्ट किया गया है कुछ और जानकारी के लिए कृपया Google कोड देखें

http://code.google.com/p/databaseversioncontrol/

थोड़ी देर पहले मुझे एक वीबी बस मॉड्यूल मिला जिसने डीएमओ और वीएसएस ऑब्जेक्ट का इस्तेमाल किया ताकि पूरे डीबी को पटकथा और वीएसएस में मिल सके। मैंने इसे वीबी स्क्रिप्ट में बदल दिया और इसे यहां पोस्ट किया। आप आसानी से वीएसएस कॉल्स ले सकते हैं और सभी लिपियों को जनरेट करने के लिए डीएमओ सामान का उपयोग कर सकते हैं, और फिर उसी बैच फ़ाइल से एसवीएन को कॉल कर सकते हैं जो वीबीएसपीट को इन्हें चेक करने के लिए कॉल करता है?

डेव जे

मैं डाटाबेस विस्तारित संपत्तियों के माध्यम से संग्रहीत डेटाबेस में भी एक संस्करण का उपयोग कर रहा हूँ परिवारों की प्रक्रियाओं मेरे आवेदन में प्रत्येक संस्करण चरण के लिए लिपियां हैं (यानी 1.1 से 1.2 तक बढ़ें)। जब तैनात किया जाता है, तो यह वर्तमान संस्करण को देखता है और तब स्क्रिप्ट को एक-एक करके चलाता है जब तक कि वह अंतिम ऐप संस्करण तक नहीं पहुंचता है। कोई स्क्रिप्ट नहीं है जिसमें सीधे 'फाइनल' संस्करण है, यहां तक ​​कि क्लीन डीबी पर भी तैनात किया जाता है जो अपग्रेड चरणों की एक श्रृंखला के माध्यम से तैनात करता है।

अब मैं क्या जोड़ना चाहूंगा कि मैंने दो दिन पहले एमएस परिसर में एक नया और आगामी वी.एस. डीबी संस्करण के बारे में एक प्रस्तुति देखी है। प्रस्तुति विशेष रूप से इस विषय पर केंद्रित थी और मुझे पानी से उड़ा दिया गया था। आपको निश्चित रूप से इसे जांचना चाहिए, नई सुविधाएं स्कीमा परिभाषा को टी-एसक्यूएल लिपियों (CREATEs) में रखते हुए, निर्धारित स्कीमा के साथ तैनाती स्कीमा की तुलना करने के लिए एक रनटाइम डेल्टा इंजन और डेल्टा एल्टर और स्रोत कोड एकीकरण के साथ एकीकरण करने पर केंद्रित है और स्वचालित बिल्ड ड्रॉप के लिए MSBUILD निरंतर एकीकरण भी शामिल है। ड्रॉप में एक नया फ़ाइल प्रकार, .dbschema फ़ाइलें, जो कि तैनाती साइट पर ले जा सकते हैं और एक कमांड लाइन उपकरण वास्तविक 'deltas' कर सकते हैं और तैनाती को चला सकते हैं। वीएसडीई डाउनलोड के लिंक के साथ मेरे पास इस विषय पर एक ब्लॉग एंट्री है, आपको उन्हें जांचना चाहिए: http://rusanu.com/2009/05/15/version-control-and-your-database/

यह एक बहुत पुराना सवाल है, हालांकि कई लोग अब भी इसे हल करने की कोशिश कर रहे हैं। उन सभी को करना है जो दृश्य स्टूडियो डाटाबेस प्रोजेक्ट्स के बारे में शोध करना है। इसके बिना, कोई भी डेटाबेस विकास बहुत कमजोर लग रहा है। कोड संगठन से लेकर संस्करण को तैनात करने के लिए, यह सब कुछ सरल करता है

मेरे अनुभव में समाधान दुगुना है:

  1. विकास के दौरान कई डेवलपर्स द्वारा किए गए विकास डेटाबेस में आपको परिवर्तनों को संभालना आवश्यक है।

  2. आपको ग्राहकों की साइट्स में डेटाबेस उन्नयन को संभालना होगा

# 1 को संभालने के लिए आपको एक मजबूत डेटाबेस अंतर / मर्ज टूल की आवश्यकता होगी। सबसे अच्छा टूल स्वचालित रूप से मर्ज को जितना संभव हो सके, आपको मैन्युअल रूप से अनियंत्रित विरोधों को हल करने की अनुमति देनी चाहिए।

सही उपकरण को 3-रास्ता मर्ज एल्गोरिथ्म का उपयोग करके मर्ज ऑपरेशन को संभाल करना चाहिए जो आधार डेटाबेस और MINE डाटाबेस में किए गए परिवर्तनों को आधार डेटाबेस के सापेक्ष में लाया गया है।

मैंने एक व्यावसायिक उपकरण लिखा है जो SQLite डेटाबेस के लिए मैनुअल मर्ज सपोर्ट प्रदान करता है और मैं वर्तमान में SQLite के लिए 3-रास्ता मर्ज एल्गोरिथ्म के लिए समर्थन जोड़ रहा हूं। इसे http://www.sqlitecompare.com पर देखें

# 2 को संभालने के लिए आपको एक अपग्रेड फ्रेमवर्क की आवश्यकता होगी

मूल विचार एक स्वत: उन्नयन ढांचे का विकास करना है जो कि एक मौजूदा एसक्यूएल स्कीमा से नए एसक्यूएल स्कीमा में अपग्रेड कैसे कर सकता है और प्रत्येक मौजूदा डीबी स्थापना के लिए नवीनीकरण पथ बना सकता है।

http://www.codeproject.com/KB/database/sqlite_upgrade.aspx में इस विषय पर अपना आलेख देखें, जिसके बारे में मैं बात कर रहा हूं।

शुभ लाभ

लिरोन लेवी

डीबीएचहोस्ट http://www.innovartis.co.uk/ देखें । मैंने 2 साल के लिए एक स्वचालित फैशन में उपयोग किया है और यह महान काम करता है यह डेटाबेस को छोड़कर, हमारे डीबी जावा या सी निर्माण की तरह ही ऐसा होने की अनुमति देता है। आप जानते हैं कि मेरा क्या मतलब है।

मैं आपके डेटाबेस के लिए संस्करण नियंत्रण प्रणाली को सुधारने के लिए तुलना टूल का उपयोग करने का सुझाव दूंगा। एक अच्छा विकल्प xSQL स्कीमा तुलना कर रहे हैं और एक्सएसक्यूएल डाटा तुलना करें ।

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

हाय, अगर आप संस्करण नियंत्रण के तहत डेटा भी चाहते हैं, तो आप एक्सएसक्यूएल डेटा का उपयोग कर सकते हैं आप अपने डेटाबेस के लिए बदलाव स्क्रिप्ट्स बनाने और अपने संस्करण नियंत्रण में एसक्यूएल फाइलों को जोड़ते हैं। फिर आप इन स्क्रिप्ट को किसी भी संस्करण में वापस लाने / अपडेट करने के लिए निष्पादित कर सकते हैं। ध्यान रखें कि 'वापस' कार्यक्षमता के लिए आपको परिवर्तन स्क्रिप्ट जनरेट करने की आवश्यकता होती है, जो कि निष्पादित होने पर संस्करण 3 को संस्करण 2 और 'अपडेट' कार्यक्षमता के रूप में बना देगा, आपको इसके विपरीत परिवर्तन स्क्रिप्ट उत्पन्न करने की जरूरत है

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

अस्वीकरण: मैं xSQL से संबद्ध हूं