डेटाबेस संरचना परिवर्तन के लिए एक संस्करण नियंत्रण प्रणाली है?

मैं अक्सर निम्नलिखित समस्या में भाग लेता हूं।

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

इसलिए, मैं लाइव सिस्टम को धक्का देता हूं और एक बड़ी, स्पष्ट त्रुटि प्राप्त करता हूं कि कोई NewColumnX नहीं है, ugh।

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

0
जोड़ा संपादित
विचारों: 1
हमारे ऑन-विषय मार्गदर्शन के अनुसार, " कुछ प्रश्न अभी भी विषय-वस्तु हैं, भले ही वे एक में फिट हों ऊपर सूचीबद्ध श्रेणियों में से: ... हमें पूछे जाने वाले प्रश्न एक पुस्तक, उपकरण, सॉफ़्टवेयर लाइब्रेरी, ट्यूटोरियल या अन्य ऑफ़-साइट संसाधन की सिफारिश या ढूंढें ऑफ-विषय हैं ... "
जोड़ा लेखक Robert Columbia, स्रोत

19 उत्तर

रेल पर रूबी में, एक माइग्रेशन की एक अवधारणा है - एक त्वरित स्क्रिप्ट बदलने के लिए डेटाबेस।

आप एक माइग्रेशन फ़ाइल जेनरेट करते हैं, जिसमें डीबी संस्करण (जैसे कॉलम जोड़ने) और संस्करण को डाउनग्रेड करने के नियम (जैसे कॉलम को हटाने) के नियम हैं। प्रत्येक माइग्रेशन गिना जाता है, और एक टेबल आपके वर्तमान डीबी संस्करण का ट्रैक रखती है।

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

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

0
जोड़ा
यह रूबी परियोजनाओं के लिए पसंद है। जावा में इस डिजाइन के नजदीकी समकक्ष mybatis स्कीमा माइग्रेशन है। .NET के बराबर के लिए code.google.com/p/migratordotnet है। वे इस नौकरी आईएमओ के लिए सभी उत्कृष्ट उपकरण हैं।
जोड़ा लेखक Dan Tanner, स्रोत

रेडगेट में एक उत्पाद है जिसे SQL स्रोत नियंत्रण कहा जाता है। यह टीएफएस, एसवीएन, सोर्सगियर वॉल्ट, वॉल्ट प्रो, मर्कुरियल, पर्सफोर्स और गिट के साथ एकीकृत करता है।

0
जोड़ा

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

0
जोड़ा

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

0
जोड़ा
हाँ, लेकिन एसक्यूएल फाइलों को अलग करने से आप अपने देव / प्रोड डीबी को एक संशोधन से दूसरे में अपग्रेड करने के लिए निरंतर स्क्रिप्ट नहीं देंगे
जोड़ा लेखक Asaf Mesika, स्रोत

Ruckusing नामक एक PHP5 "डेटाबेस माइग्रेशन फ्रेमवर्क" है। मैंने इसका उपयोग नहीं किया है, लेकिन यदि आप उपयोग करते हैं तो उदाहरण विचार दिखाते हैं जब आवश्यक हो तब डेटाबेस बनाने के लिए भाषा, आपको केवल स्रोत फ़ाइलों को ट्रैक करना होगा।

0
जोड़ा

ओरेकल पैकेज डीबीएमएस_एमटीएडीएटीएए पर एक नज़र डालें।

विशेष रूप से, निम्नलिखित विधियां विशेष रूप से उपयोगी होती हैं:

  • DBMS_METADATA.GET_DDL
  • DBMS_METADATA.SET_TRANSFORM_PARAM
  • DBMS_METADATA.GET_GRANTED_DDL

एक बार जब आप परिचित होते हैं कि वे कैसे काम करते हैं (सुंदर आत्म व्याख्यात्मक) आप उन विधियों के परिणामों को उन स्रोत फ़ाइलों में डंप करने के लिए एक साधारण स्क्रिप्ट लिख सकते हैं जिन्हें स्रोत नियंत्रण में रखा जा सकता है। सौभाग्य!

सुनिश्चित नहीं है कि MSSQL के लिए यह कुछ आसान है या नहीं।

0
जोड़ा

मैं अत्यधिक SQL डेल्टा की अनुशंसा करता हूं। जब मैं अपनी सुविधा को कोडिंग करता हूं और उन स्क्रिप्ट को अपने स्रोत नियंत्रण उपकरण (Mercurial :)) में जांचता हूं तो मैं बस diff स्क्रिप्ट उत्पन्न करने के लिए इसका उपयोग करता हूं।

They have both an SQL server & Oracle version.

0
जोड़ा

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

From the web:

The Version Control Plug-In provides a tight integration between the PL/SQL Developer IDE >>and any Version Control System that supports the Microsoft SCC Interface Specification. >>This includes most popular Version Control Systems such as Microsoft Visual SourceSafe, >>Merant PVCS and MKS Source Integrity.

http://www.allroundautomations.com/plsvcs.html

0
जोड़ा

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

 
   

इसलिए आपको इसे स्वयं संभालने की आवश्यकता नहीं है

शुद्ध एसक्यूएल कथन या डेटा आयात भी समर्थित हैं।

0
जोड़ा
जावा के लिए मैं अत्यधिक अनुशंसा करता हूं कि इन दिनों flywaydb.org देखें - इस साइट पर सुविधा तुलना भी देखें
जोड़ा लेखक Karussell, स्रोत
हम तरल पदार्थ का उपयोग करते हैं, लेकिन हम अलग-अलग जानकारी के लिए 3 अलग-अलग दृष्टिकोण का उपयोग करते हैं: 1. संरचना (तालिका, विचार, ...): ऐतिहासिक चेंजलॉग 2. कोड (प्रक्रियाएं, पीएल / एसक्यूएल, फ़ंक्शंस): चेंजलॉग केवल एक बदलाव के साथ चिह्नित runalways = true runonchange = true 3. कोड तालिकाओं, अन्य मेटा "स्थिरांक" तालिकाओं में संग्रहीत: कोड के लिए एक ही दृष्टिकोण, केवल एक परिवर्तन, हटाएं, सभी जानकारी डालें
जोड़ा लेखक Palesz, स्रोत

संस्करण नियंत्रक में अपना प्रारंभिक निर्माण तालिका विवरण जोड़ें, फिर तालिका विवरणों को परिवर्तित करें, लेकिन फ़ाइलों को कभी भी संपादित न करें, केवल क्रमशः नामित फ़ाइलों को परिवर्तित करें, या यहां तक ​​कि "परिवर्तन सेट" के रूप में भी, ताकि आप किसी विशेष परिनियोजन के लिए सभी परिवर्तन पा सकें।

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

0
जोड़ा

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

http://www.red-gate.com/Products/schema_compare_for_oracle/index। htm

0
जोड़ा

मैं थोड़ा पुराना स्कूल हूं, जिसमें मैं डेटाबेस बनाने के लिए स्रोत फ़ाइलों का उपयोग करता हूं। वास्तव में 2 फाइलें हैं - प्रोजेक्ट-डेटाबेस.sql और project-update.sql - स्कीमा और लगातार डेटा के लिए पहला, और संशोधन के लिए दूसरा। बेशक, दोनों स्रोत नियंत्रण में हैं।

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

इसके अलावा, मेरे पास आमतौर पर डीबी - कॉन्फ़िगर में एक सारणी होती है - जैसे कि:

एसक्यूएल

CREATE TABLE Config
(
    cfg_tag VARCHAR(50),
    cfg_value VARCHAR(100)
);

INSERT INTO Config(cfg_tag, cfg_value) VALUES
( 'db_version', '$Revision: $'),
( 'db_revision', '$Revision: $');

फिर, मैं अद्यतन खंड में निम्नलिखित जोड़ता हूं:

UPDATE Config SET cfg_value='$Revision: $' WHERE cfg_tag='db_revision';

डेटाबेस को पुनर्निर्मित करते समय db_version केवल तभी बदला जाता है, और db_revision मुझे संकेत देता है कि डीबी बेसलाइन से कितनी दूर है।

I could keep the updates in their own separate files, but I chose to mash them all together and use cut&paste to extract relevant sections. A bit more housekeeping is in order, i.e., remove ':' from $Revision 1.1 $ to freeze them.

0
जोड़ा

दो पुस्तक अनुशंसाएं: एम्बलर और सदालेज द्वारा "रिफैक्टरिंग डेटाबेस" और एम्बलर द्वारा "एग्इल डाटाबेस टेक्निक्स"।

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

0
जोड़ा

ER Studio allows you to reverse your database schema into the tool and you can then compare it to live databases.

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

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

0
जोड़ा

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

0
जोड़ा

तालिका परिवर्तनों के लिए वीसीएस की अनुपस्थिति में मैं उन्हें विकी में लॉगिंग कर रहा हूं। कम से कम तब मैं देख सकता हूं कि यह कब और क्यों बदला गया था। यह बिल्कुल सही नहीं है क्योंकि हर कोई ऐसा नहीं कर रहा है और हमारे पास उपयोग में कई उत्पाद संस्करण हैं, लेकिन कुछ भी नहीं है।

0
जोड़ा

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

एमएसडीएन पर एक निर्देशक वीडियो है जो बहुत उपयोगी है।

मुझे डीबीएमएस_एमटीएडीएटीए और टॉड के बारे में पता है, लेकिन अगर कोई ओरेकल के लिए डेटा डुड के साथ आ सकता है तो जीवन वास्तव में मीठा होगा।

0
जोड़ा

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

यह कहना उचित है कि यह संस्करण 1.0 उत्पाद है, हालांकि, और कुछ मुद्दों के बिना नहीं है।

0
जोड़ा

MyBatis (formerly iBatis) has a schema migration, tool for use on the command line. It is written in java though can be used with any project.

एक अच्छा डेटाबेस परिवर्तन प्रबंधन अभ्यास प्राप्त करने के लिए, हमें कुछ महत्वपूर्ण लक्ष्यों की पहचान करने की आवश्यकता है।   इस प्रकार, माईबेटिस स्कीमा माइग्रेशन सिस्टम (या माईबेटिस माइग्रेशन कम के लिए) चाहता है:

  • किसी भी डेटाबेस, नए या मौजूदा
  • के साथ काम करें
  • स्रोत नियंत्रण प्रणाली का लाभ उठाएं (उदा। सबवर्सन)
  • स्वतंत्र रूप से काम करने के लिए समवर्ती डेवलपर्स या टीम सक्षम करें
  • विवादों को बहुत स्पष्ट और आसानी से प्रबंधित करने की अनुमति दें
  • आगे और पिछड़े माइग्रेशन (क्रमशः विकसित, क्रमशः devolve) के लिए अनुमति दें
  • डेटाबेस की वर्तमान स्थिति आसानी से सुलभ और समझदार
  • बनाएं
  • अभिगम विशेषाधिकार या नौकरशाही के बावजूद माइग्रेशन सक्षम करें
  • किसी भी पद्धति के साथ काम करें
  • अच्छी, सुसंगत प्रथाओं को प्रोत्साहित करता है
0
जोड़ा