परीक्षण से लाइव तक SQL सर्वर डेटाबेस को तैनात करना

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

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

या - टी-एसक्यूएल में "EXPLAIN CREATE TABLE" की कमी को देखते हुए - क्या आप ऐसा कुछ करते हैं जो मौजूदा डेटाबेस को SQL-स्क्रिप्ट्स में निर्यात करता है जिसे आप लक्ष्य सर्वर पर चला सकते हैं? यदि हां, क्या कोई ऐसा उपकरण है जो स्वचालित रूप से दिए गए डेटाबेस को SQL क्वेरीज़ में डंप कर सकता है और जो कमांड लाइन से चलाता है? (फिर, एंटरप्राइज़ मैनेजर / प्रबंधन स्टूडियो एक्सप्रेस गिनती नहीं है)।

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

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

तो, आप टेस्ट से लाइव तक स्वचालित रूप से SQL सर्वर डेटाबेस को तैनात करने के लिए क्या उपयोग कर रहे हैं?

0
जोड़ा संपादित
विचारों: 2

14 उत्तर

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

यह दुनिया में सबसे अच्छा संकेत नहीं है, लेकिन यह डीडीएल लिखता है।

0
जोड़ा

रॉब एलन की तरह, मैं Redgate द्वारा एसक्यूएल तुलना / डेटा तुलना का उपयोग करता हूं। मैं माइक्रोसॉफ्ट द्वारा डाटाबेस प्रकाशन विज़ार्ड का भी उपयोग करता हूं। मेरे पास एक कंसोल ऐप भी है जिसे मैंने सी # में लिखा था जो एक एसक्यूएल स्क्रिप्ट लेता है और इसे सर्वर पर चलाता है। इस तरह आप कमांड लाइन से या बैच स्क्रिप्ट में 'GO' कमांड के साथ बड़ी स्क्रिप्ट चला सकते हैं।

मैं कंसोल अनुप्रयोग में Microsoft.SqlServer.BatchParser.dll और Microsoft.SqlServer.ConnectionInfo.dll लाइब्रेरी का उपयोग करता हूं।

0
जोड़ा

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

उनके पास पाठ्यक्रम एसक्यूएल सर्वर सहित अधिकांश लोकप्रिय डेटाबेस के लिए संस्करण हैं।

0
जोड़ा

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

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

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

0
जोड़ा

For my projects I alternate between SQL Compare from REd Gate and the Database Publishing Wizard from Microsoft which you can download free here.

विज़ार्ड एसक्यूएल तुलना या एसक्यूएल डेटा तुलना के रूप में उतना ही छोटा नहीं है, लेकिन यह चाल है। एक मुद्दा यह है कि उत्पन्न होने वाली स्क्रिप्ट को एक शॉट में कुछ पुनर्व्यवस्थित करने और / या संपादन के लिए संपादन की आवश्यकता हो सकती है।

ऊपर की तरफ, यह आपकी स्कीमा और डेटा को स्थानांतरित कर सकता है जो एक मुफ्त उपकरण के लिए बुरा नहीं है।

0
जोड़ा

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

आम तौर पर, मैं "स्क्रिप्ट इट" दृष्टिकोण लेता हूं, लेकिन आप इन पंक्तियों के साथ कुछ विचार करना चाहेंगे:

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

मैंने रेड गेट टूल्स का इस्तेमाल किया है और वे शानदार टूल हैं, लेकिन यदि आप इसे बर्दाश्त नहीं कर सकते हैं, तो टूल बनाना और इस तरह से काम करना आदर्श से बहुत दूर नहीं है।

0
जोड़ा

मैं मानता हूं कि सब कुछ पटकथा जाने का सबसे अच्छा तरीका है और मैं काम पर वकालत करता हूं। आपको डीबी से सबकुछ स्क्रिप्ट करना चाहिए और अपनी लुकअप टेबल को पॉप्युलेट करने के लिए ऑब्जेक्ट सृजन करना चाहिए।

यूआई में जो कुछ भी आप करते हैं, वह केवल अनुवाद नहीं करेगा (विशेष रूप से बदलावों के लिए ... पहले तैनाती के लिए इतना नहीं) और अंत में Redgate ऑफ़र जैसे टूल की आवश्यकता होगी।

0
जोड़ा

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

अन्यथा, मैं सहमत हूं कि यदि आपके पास कंपनी खरीदने के लिए कोई कंपनी नहीं है तो रेडगेट महंगा है। अगर आप इसे खरीदने के लिए एक कंपनी प्राप्त कर सकते हैं, तो यह वास्तव में इसके लायक है!

0
जोड़ा
+1 मैं एसएसएमएस (या एसक्यूएल 2000 में एंटरप्राइज़ मैनेजर) में डिज़ाइन जीयूआई का उपयोग करके परिवर्तन करता हूं लेकिन एक स्क्रिप्ट उत्पन्न करने के लिए "जेनरेट चेंज स्क्रिप्ट" आइकन का उपयोग करता हूं, जिसे मैं अगली रिलीज के लिए चेंज स्क्रिप्ट बनाने के लिए स्टोर करता हूं। यदि आप एक दिन भूल जाते हैं तो एक चेकबॉक्स "स्वचालित रूप से परिवर्तन स्क्रिप्ट बनाएं" चेकबॉक्स होता है!
जोड़ा लेखक Kristen, स्रोत

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

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

मैंने यह भी सीखा है कि इंडेक्स को कोड फ़ाइलों की तरह ही व्यवहार करने की आवश्यकता है और स्रोत नियंत्रण में डाल दिया जाना चाहिए।

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

0
जोड़ा

RedGate SqlCompare is a way to go in my opinion. We do DB deployment on a regular basis and since I started using that tool I have never looked back. Very intuitive interface and saves a lot of time in the end.

प्रो संस्करण स्रोत नियंत्रण एकीकरण के लिए भी स्क्रिप्टिंग का ख्याल रखेगा।

0
जोड़ा

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

मेरे डीबीएस में एक सारणी होती है जो वर्तमान संस्करण को परिभाषित करती है ताकि कोई परीक्षण के अपेक्षाकृत सरल सेट को कोड कर सके:

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

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

लाभ? खैर मेरे पास आत्मविश्वास का एक बहुत ही उच्च स्तर है कि इस पद्धति का उपयोग करने वाले ऐप्स के लिए स्कीमा उन अनुप्रयोगों के सभी उदाहरणों में सुसंगत है। यह सही नहीं है, मुद्दे हैं, लेकिन यह काम करता है ...

टीम के माहौल में विकास करते समय कुछ मुद्दे हैं लेकिन वैसे भी कम या ज्यादा दिया गया है!

Murph

0
जोड़ा

समस्या का माइक्रोसॉफ्ट का समाधान मत भूलना: विजुअल स्टूडियो 2008 डेटाबेस संस्करण । डेटाबेस में परिवर्तनों को तैनात करने के लिए उपकरण शामिल हैं, स्कीमा और / या डेटा परिवर्तन, यूनिट परीक्षण, परीक्षण डेटा पीढ़ी के लिए डेटाबेस के बीच एक अंतर उत्पन्न करना।

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

0
जोड़ा

I'm currently working the same thing to you. Not only deploying SQL Server databases from test to live but also include the whole process from Local -> Integration -> Test -> Production. So what can make me easily everyday is I do NAnt task with Red-Gate SQL Compare. I'm not working for RedGate but I have to say it is good choice.

0
जोड़ा
जवाब में लिंक मर चुका है।
जोड़ा लेखक Pang, स्रोत

मैं अपनी सभी वस्तुओं और डेटा के लिए स्क्रिप्ट बनाए रखता हूं। तैनाती के लिए मैंने यह मुफ्त उपयोगिता लिखी - http://www.sqldart.com । यह आपको अपनी स्क्रिप्ट फाइलों को पुन: व्यवस्थित करने देगा और लेनदेन के भीतर पूरी तरह से चलाएगा।

0
जोड़ा