2009-07-01 18 views
20

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

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

मेरा सपना एक ऐसी प्रणाली है जहां एक देव जाता है और संग्रहीत प्रक्रिया की जांच करता है। फिर परिवर्तन किए जाने के बाद डेटाबेस स्वचालित रूप से अपडेट हो जाता है।

क्या यह सिर्फ एक सपना है? स्रोत नियंत्रण SQL सर्वर का सबसे अच्छा तरीका क्या है?

+0

यह एक बड़ी समस्या है, मैंने बहुत समय से पूछा है, लेकिन अभी तक कोई अच्छा जवाब नहीं है, केवल एक ही जवाब परिचालन प्रक्रियाओं के माध्यम से समन्वयित प्रतीत होता है। – tekBlues

+0

हमने इस कारण से http://tessik.com/sqlhistorian बनाया है: डीबी पर पहले से किए गए कार्यों के खिलाफ अपने संस्करण नियंत्रण को अद्यतन करने के लिए एक देव पर भरोसा करना व्यर्थता में एक अभ्यास है। एक बार जब कोई अतिरिक्त उपयोगकर्ता इंटरैक्शन के बिना टी-एसक्यूएल सर्वर हिट करता है तो हमारी प्रणाली स्वचालित रूप से स्रोत नियंत्रण में परिवर्तन रिकॉर्ड करती है। –

+0

कई कंपनियां ** ** डेवलपर्स को स्क्रिप्ट को सीधे उत्पादन में लागू करने की अनुमति नहीं देती हैं, इसलिए मेरा मानना ​​है कि सबसे अच्छा परिदृश्य (डीबीए) को स्क्रिप्ट से डेटाबेस में ** अपडेट करने की अनुमति देना है ** और दूसरी तरफ नहीं। हालांकि, वास्तविक दुनिया में यह संभव है कि कोई व्यक्ति सही ढंग से परिवर्तन प्रक्रियाओं का पालन न करे, इसलिए ** सबसे अच्छा बोली लगाने की तुलना करने की अनुमति देना है। इस मुफ्त टूल को आज़माएं: ** [http://servantt.com] (http://servantt.com/?so) - यह आपको अपनी ऑब्जेक्ट्स को रिवर्स करने, स्क्रिप्ट पर सहेजने, स्क्रिप्ट पर डेटाबेस की तुलना करने, WinMerge लॉन्च करने की अनुमति देता है तुलना, अद्यतन स्क्रिप्ट या डेटाबेस में परिवर्तन लागू करें। – drizin

उत्तर

11

हमने हाल ही में Visual Studio Team System Database Edition उपयोग किया गया है, और मैं कहना है कि यह बहुत अच्छी तरह से काम किया है की है। सभी संग्रहीत प्रक्रियाओं को फाइलों के रूप में संग्रहीत किया जाता है, और स्रोत नियंत्रण में चेक आउट किया जाता है, और इसमें स्क्रिप्ट उत्पन्न करने के लिए उपकरण होते हैं, आदि

इसके अलावा, हमने पहले ही टेक्स्ट फ़ाइलों के रूप में संग्रहीत स्क्रिप्ट का उपयोग किया है, स्रोत नियंत्रण से बाहर। नियम यह था कि आपको फ़ाइल को देखना था, फिर इसे प्रबंधित करें, उदाहरण के लिए, प्रबंधन स्टूडियो, और इसे सेव करें, और इसे वापस जांचें। प्रत्येक संग्रहित प्रक्रिया स्क्रिप्ट फ़ाइल के शीर्ष पर यह मौजूदा संग्रहीत प्रोसेस को छोड़ देगा, और फिर एक नया निर्माण करने के लिए CREATE कथन का उपयोग करें (CREATE/ALTER समस्या के आसपास हो जाता है)। उसके बाद हमारे पास एक उपकरण था जो स्क्रैच से रिक्त डेटाबेस बनाने के लिए सही क्रम में सभी स्क्रिप्ट चलाएगा, और फिर हमने अपने मौजूदा डेटाबेस को अद्यतित करने के लिए स्क्रिप्ट उत्पन्न करने के लिए RedGate's SQL Compare उत्पाद का उपयोग किया था। मैं स्वीकार करता हूं कि यह थकाऊ था।

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

अधिक दूर अतीत में, छोटी परियोजनाओं है कि और अधिक डेटासंग्रह, हर बार एप्लिकेशन शुरू कर दिया के रूप में एक डाटाबेस के साथ डेस्कटॉप क्षुधा की तरह थे के साथ, मैं होगा:

  • जांच करें कि डेटाबेस से ही अस्तित्व में देखने के लिए, और अगर नहीं, तो यह है कि सभी तालिकाओं अस्तित्व में
  • चेक बनाते हैं, और यदि नहीं, तो उन्हें
  • चेक, कि सभी स्तंभों अस्तित्व में बनाते हैं, और नहीं तो उन्हें

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

आप ADO.Net इकाइयों या Entity Spaces जैसे अन्य समान इकाई फ्रेमवर्क को अपनाने से इन समस्याओं में से कुछ को कम कर सकते हैं। ये ऑब्जेक्ट-रिलेशनल मैपिंग परतें हैं। वे प्रत्येक डेटाबेस के लिए गुणों सहित आपके डेटाबेस में प्रत्येक इकाई (तालिका) के लिए कक्षाएं स्वत: उत्पन्न करते हैं। फिर वे आपको उन वर्गों को कस्टम तर्क के साथ विस्तारित करने की अनुमति देते हैं। यदि आप संग्रहीत प्रक्रियाओं में अपना व्यावसायिक तर्क रखने से दूर हो सकते हैं, और उन्हें इकाई कक्षाओं में डाल सकते हैं, तो लाभ यह है कि वे दृढ़ता से टाइप किए जाते हैं। इसलिए यदि आप किसी कॉलम का नाम बदलते हैं, या कॉलम हटाते हैं और आप अपनी इकाई कक्षाओं को पुन: उत्पन्न करते हैं, तो आपका आईडीई या कंपाइलर स्वचालित रूप से उन सभी स्थानों को ध्वजांकित करेगा जहां कोड टूटा हुआ है। जाहिर है, सभी इकाई कोड स्वाभाविक रूप से स्रोत नियंत्रण में आपके शेष स्रोत कोड के साथ भी हैं।

+2

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

+0

@ रीमस - हाँ, और मुझे प्रभावित हुआ कि यह पुरानी संग्रहित प्रोसेस जैसी त्रुटियों को पाता है जो कुछ लंबे समय तक भुलाए गए टेबल आदि में एक अस्तित्व वाले कॉलम का संदर्भ दे रहे हैं। यह वास्तव में चीजों को साफ करने में मदद करता है। –

+0

इस मुफ्त टूल को आज़माएं: [http://servantt.com] (http://servantt.com/?so) - यह आपको अपनी ऑब्जेक्ट्स को रिवर्स करने, स्क्रिप्ट पर सहेजने, स्क्रिप्ट पर डेटाबेस की तुलना करने, तुलना करने के लिए WinMerge लॉन्च करने की अनुमति देता है , स्क्रिप्ट अपडेट करें या डेटाबेस में परिवर्तन लागू करें। यह जटिल परिदृश्यों को आपके रूप में संभाल नहीं सकता है, लेकिन शायद कई अन्य कंपनियों में फिट हो सकता है। – drizin

1

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

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

विधेयक

0

मैंने ऐसे माहौल में काम किया है जहां स्रोत नियंत्रण रिलीज प्रक्रिया का हिस्सा था।

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

यदि डेटा स्रोत नियंत्रण में जारी नहीं किया गया है तो यह रिलीज़ नहीं होता है।

कोड जारी करने के लिए एकीकरण शाखाओं का उपयोग किया गया था।

0

हमने हमेशा SQL सर्वर 2000 के साथ आता है जो डेटाबेस नियंत्रण के तहत संग्रहीत फ़ाइल में डेटाबेस को स्क्रिप्ट करने के लिए SQL Server 2000 के साथ आता है।

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

0

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

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

8

लाल गेट एसक्यूएल स्रोत नियंत्रण पूरी तरह से SQL सर्वर प्रबंधन स्टूडियो को स्रोत नियंत्रण एकीकृत करता है। यह आपके मौजूदा स्रोत नियंत्रण प्रणाली (टीएफएस और एसवीएन) में आपके विकास डेटाबेस को प्रभावी ढंग से लिंक करता है ताकि परिवर्तनों को कम करने और बटन के क्लिक पर अन्य डेवलपर्स के परिवर्तनों को पुनर्प्राप्त करने की अनुमति मिल सके।

http://www.red-gate.com/products/SQL_Source_Control/

अब हम एक ईए संस्करण के लिए वीएसएस और SourceGear वॉल्ट समर्थन जोड़ दिया है। यहां अधिक जानकारी: http://www.red-gate.com/MessageBoard/viewtopic.php?t=12265

+0

यह ध्यान देने योग्य है कि माइक्रोसॉफ्ट के आने वाले अंत जीवन के कारण रेड गेट अब वीएसएस का समर्थन नहीं कर रहा है। –

+1

इसका उल्लेख करने लायक है कि रेड-गेट का टीएफएस कार्यान्वयन सीधे कार्य पदार्थों की जांच जैसे नीतियों का समर्थन नहीं करता है। उनके पास कार्यान्वयन है लेकिन यह कठिन है। – TheLegendaryCopyCoder

0

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

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

http://trycatchfinally.net/2011/06/roll-your-own-lightweight-sql-server-source-control/

0

हो रही डेवलपर्स प्रतिबद्ध करने के लिए कोड मुश्किल है याद करने के लिए।

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

यह मुफ्त product देखें जो SQL सर्वर डेटाबेस की आधार रेखा सेट अप करने में मदद करेगा।

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

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

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