SQL सर्वर के साथ संस्करण नियंत्रण


14

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

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

मैंने रेड गेट को देखा और सुना है, लेकिन मैं कुछ मुफ्त (या कम से कम बहुत कम लागत) की तलाश में हूं। मुझे पता है कि मैं हमेशा खुद कुछ लिख सकता हूं, लेकिन मैं वास्तव में उस पर समय बिताने की कोशिश नहीं कर रहा हूं।

एक बात जो मुझे पता चली, वह थी एक ओपन सोर्स पैकेज, जिसे ScriptDB4Svn कहा जाता था । क्या किसी ने इससे पहले इसका इस्तेमाल किया है? अच्छी है? क्या यह उन चीजों को कर सकता है जो मुझे करने की आवश्यकता है और क्या सेटअप प्राप्त करना बहुत सरल है?


1
Has anyone used this before? Is it good? Can it do the things I need it to do and is it pretty simple to get setup?आप अपने लिए प्रयास करने से क्यों डरते हैं? बस इसे पकड़ो और चारों ओर खेलते हैं।
यानिस

@YannisRizos - अगर मैं इससे बहुत अधिक प्रतिक्रिया नहीं प्राप्त करता हूं, तो मैं निश्चित रूप से करूंगा, मैं मूल रूप से सिर्फ कोशिश करना चाहता था और कुछ समय बचाना चाहता था और यह देखना चाहता था कि किसी ने पहले इसके साथ काम किया था, या यदि किसी ने कुछ भी कोशिश की और बल्ले से सही परीक्षण किया। यह मेरी जरूरतों को पूरा करता है इसलिए मैं कुछ प्रयोग समय बचा सकता हूं।

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

@YannisRizos - धन्यवाद। मुझे यह देखने के लिए चैट में आशा है कि क्या मुझे ScriptDB4Svn के लिए कुछ प्रतिक्रिया मिल सकती है, और मुख्य प्रश्न के किसी भी अपडेट के लिए यहां वापस देख सकते हैं। संपादित करें: ऐसा लगता है कि मैं 20 प्रतिनिधि होने तक चैट नहीं कर सकता। ओह, धैर्य मुझे लगता है।

जवाबों:


2

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

BTW: मैंने RedGate टूल का उपयोग किया है और यह बहुत चालाक है और पैसे के लायक है।


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

@ सेट - मैनुअल तरीका काम कर सकता है, आपको बस अपने SQL विकास के बारे में अलग तरह से सोचना होगा। ऑब्जेक्ट्स के स्क्रिप्ट किए गए संस्करण "आधिकारिक" हैं और SQL में एक इसका एक संकलित संस्करण है। जैसे आपका सोर्स कोड।
JohnFx

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

1

ऐसा लगता है कि आपके पास ज्यादातर Microsoft सेटअप है। आप डेटाबेस प्रोजेक्ट्स (पहले DataDude के रूप में जाना जाता है) में देख सकते हैं। वे मूल रूप से T-SQL को Visual Studio में प्रथम श्रेणी की भाषा में बदलते हैं; आप ऐसा कर सकते हैं:

  • संकलित परियोजनाएं - यह केवल एक अंतिम स्क्रिप्ट नहीं बनाती है, यह सुनिश्चित करती है कि ऑब्जेक्ट नाम आदि मौजूद हैं।
  • स्थिर कोड विश्लेषण करें - उदाहरण के लिए, यह सुनिश्चित करना कि आप हमेशा अपने स्कीमा (उदाहरण [dbo]के लिए ज्यादातर मामलों में) वस्तुओं को संदर्भित करते हैं , जो कि अच्छा 30% प्रदर्शन को बढ़ावा देते हैं।
  • प्रोजेक्ट के विभिन्न संस्करणों की तुलना करके अलग स्क्रिप्ट बनाएं।
  • डेटाबेस या स्क्रिप्ट (रिवर्स इंजीनियर) से अपनी परियोजना को अपडेट करें।
  • IntelliSense।
  • कोई आरेख उपकरण नहीं हैं।

वे आपके कोड और आपके डेटाबेस कोड को अच्छी तरह से स्रोत नियंत्रण के तहत एकीकृत करते हैं। आप तो मनुष्य-अप जो अच्छा है - और स्क्रिप्ट अपने डेटाबेस वस्तुओं (बजाय SSMS में Davinci टूल का उपयोग करके) आप भी एक आईडीई का उपयोग कर भूमि।


0

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

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


कोई भी मार्गदर्शक इसे थोड़ा और समझाने के लिए और कुछ इस तरह सेट करने में जाता है?

दरअसल, .NET नेटवर्क्स के साथ रेल का उपयोग करना बहुत अच्छा विचार नहीं है।
वैकल्पिक

रेल माइग्रेशन पर अध्याय ( guide.rubyonrails.org/migrations.html )। यह आपको शुरू करने के लिए पर्याप्त होना चाहिए और आपको वह सभी पृष्ठभूमि प्रदान करनी चाहिए जिनकी आपको आवश्यकता है कि यह एक अच्छा विचार क्यों है। @altern - चूंकि आप केवल डेटाबेस में हेरफेर और संस्करण के लिए रेल का उपयोग कर रहे हैं, इस पर .NET नेट टेक्नोलॉजीज पर कोई प्रभाव होना चाहिए। आप DB का उपयोग और उपयोग उसी तरीके से करने में सक्षम हैं जैसे आप रेल का उपयोग नहीं कर रहे थे। मुझे आपकी चिंताओं के कुछ संदर्भों को देखकर बुरा नहीं लगेगा। क्या रूबी और रेल का आयरनआरयूबी एक .Net कार्यान्वयन नहीं है?
विन्नी

> क्या रूबी और रेल का आयरनआरयूबी .नेट कार्यान्वयन नहीं है? IronRuby रूबी का .NET कार्यान्वयन है । मुझे यकीन नहीं है कि रेल्स आयरनरबी पर ठीक से काम करती हैं। डीबी वर्जनिंग के उद्देश्य से रेल का उपयोग करने के खिलाफ मेरा सामान्य तर्क यह है कि रूबी और संबंधित प्रौद्योगिकियों (आरओआर, माइग्रेटिनोस) में काफी सीखने की अवस्था है, विशेष रूप से डीबी वर्जनिंग जैसे सरल कार्य के लिए। माइग्रेशन ही नहीं बल्कि अन्य उद्देश्यों के लिए भी इसका इस्तेमाल करना ठीक है। अन्यथा, यह सिर्फ सकारात्मक प्रभाव के बिना परियोजना की जटिलता को बढ़ाएगा।
वैकल्पिक

0

स्टैकओवरफ्लो पर इससे पहले चर्चा की गई है: /programming/2750278/sql-server-2008-create-database-script-schema-data-with-command-line

इसके अलावा, यह बाहरी लेख कुछ अतिरिक्त जानकारी प्रदान करता है http://www.sqlteam.com/article/scripting-database-objects-use-smo-updated एक साथ Windows अनुप्रयोग के रूप में नमूना कोड।

चूंकि आप जो करना चाहते हैं, वह कुछ ऐसा है जो मैंने एमएस एक्सेस के लिए खुद से किया है, मैं आपको बताऊंगा कि मैंने क्या किया है अगर यह आपको कुछ विचार देता है: मैंने Ado2Xml नामक एक मॉड्यूल लिखा है जो किसी भी ADO के स्कीमा और डेटा को परिवर्तित करता है। Xml, और वापस करने के लिए -अतिरिक्त डेटाबेस। यह केवल तालिकाओं और विचारों के बारे में जानता है; कोई संग्रहीत कार्यविधियाँ, कोई ट्रिगर नहीं, कुछ भी नहीं। वैसे भी, आपके मामले में यह मॉड्यूल उस उपकरण द्वारा प्रतिस्थापित हो जाता है जिसे आप संभवतः उस स्थान पर पाएंगे जो एमएस-एसक्यूएल के साथ आपको चाहिए। इसलिए, हर बार जब मेरा एप्लिकेशन लॉन्च होता है, तो यह डेटाबेस की टाइमस्टैम्प की तुलना सहेजे गए xml फ़ाइल के टाइमस्टैम्प से करता है; यदि xml फ़ाइल अधिक हाल ही में है, तो यह डेटाबेस को नष्ट कर देता है और Ado2Xml को फिर से xml फ़ाइल से बनाने के लिए आमंत्रित करता है। जब मेरा आवेदन समाप्त हो जाता है, तो यह रिवर्स करता है: यह एक्सएमएल फ़ाइल में डेटाबेस को निर्यात करने के लिए Ado2Xml को आमंत्रित करता है। वास्तव में, ADO ऑब्जेक्ट जो डेटाबेस स्कीमा को निकालते हैं वे किसी कारण से धीमी गति से होते हैं, जिससे निर्यात प्रक्रिया में कुछ समय लगता है। इसलिए, डिबगिंग लेआउट से संपादन लेआउट में स्विच करने के लिए मेरे आवेदन को समाप्त करने और दृश्य स्टूडियो के लिए हर बार प्रतीक्षा करने से बचने के लिए, इससे पहले कि यह मेरा ऐप निर्यात करने के लिए एक बाहरी ऐप लॉन्च करता है, ताकि इसे समाप्त कर सके। हाथोंहाथ।


आपके द्वारा प्रदान किए गए दो लिंक कुछ ऐसे हैं जो मैं शायद खुद को सेटअप करने में रुचि रखता हूं, इसलिए मैं मूल रूप से मैन्युअल कदमों को स्वचालित कर सकता हूं जो मैं अभी कर रहा हूं। उन लोगों के लिए धन्यवाद!

0

हां, मैंने पिछले प्रोजेक्ट पर एक समान टूल (इन-हाउस विकसित) का उपयोग किया है। यह अलग-अलग .sql फाइलों में सभी टेबल, व्यू, स्पोक, ट्रिगर आदि को स्क्रिप्ट करेगा। फिर, हमारे पास एक स्क्रिप्ट थी जो हर रात "मान्य" करने के लिए चलती थी कि हमारे "विकास" डेटाबेस में सब कुछ स्रोत नियंत्रण में परिलक्षित होता था।

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

समस्या यह थी कि यदि आप टूल चलाना भूल गए, तो कोड "काम" (और यूनिट टेस्ट पास करेगा) क्योंकि डेटाबेस "सही" था, लेकिन नए स्प्रोक्स / टेबल सोर्स कंट्रोल नहीं होंगे।

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

यह थोड़ा कष्टप्रद था क्योंकि इसने कई दिनों तक फैलने वाले परिवर्तनों पर काम करना कठिन बना दिया, लेकिन यह कुछ भी नहीं होने से बेहतर था ...


क्या आप विस्तृत कर सकते हैं Then, we had a script that ran every night to "validate" that everything in our "development" database was reflected in source control.? आपके प्रतिक्रिया के लिए धन्येवाद।

@ स्थिति: मैंने उत्तर को थोड़ा और विस्तार से शामिल करने के लिए संपादित किया है।
डीन हार्डिंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.