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


124

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

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

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

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



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

जवाबों:


62

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

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

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

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


2
यह रूबी परियोजनाओं के लिए विकल्प है। जावा में इस डिजाइन के सबसे करीब mybatis स्कीमा माइग्रेशन हैं। .NET के लिए समतुल्य code.google.com/p/migratordotnet है । वे इस नौकरी के लिए सभी उत्कृष्ट उपकरण हैं IMO।
डैन टान्नर

30

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

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

इसके अलावा, मेरे पास आमतौर पर db में एक तालिका होती है - विन्यास - जैसे:

एसक्यूएल

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मुझे इस बात का संकेत कितनी दूर db आधारभूत बंद है देता है।

मैं अपडेट को अपनी अलग फ़ाइलों में रख सकता था, लेकिन मैंने उन सभी को एक साथ मैश करने के लिए चुना और संबंधित अनुभागों को निकालने के लिए कट और पेस्ट का उपयोग किया। कुछ और हाउसकीपिंग क्रम में है, अर्थात, '': '$ संशोधन 1.1 $ से उन्हें फ्रीज करने के लिए।


12

MyBatis (पूर्व में iBatis) के पास कमांड लाइन पर उपयोग के लिए स्कीमा माइग्रेशन , टूल है। यह जावा में लिखा गया है, हालांकि इसे किसी भी परियोजना के साथ उपयोग किया जा सकता है।

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

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


11

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

उनके पास SQL ​​सर्वर और Oracle दोनों संस्करण हैं।


11

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

<createTable tableName="USER"> 
   <column name="firstname" type="varchar(255)"/>
</createTable>

तो आप इसे अपने आप को संभालने की जरूरत नहीं है

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


हम लिबास का उपयोग करते हैं, लेकिन हम विभिन्न जानकारी के लिए 3 अलग-अलग दृष्टिकोणों का उपयोग करते हैं: 1. संरचना (तालिका, विचार, ...): ऐतिहासिक चैंज 2। कोड (प्रक्रियाएं, pl / sql, कार्य): केवल एक बदलाव के साथ चैंज के साथ चिह्नित runalways = true runonchange = true 3. कोड टेबल, अन्य मेटा "स्थिरांक" को तालिकाओं में संग्रहीत किया जाता है: कोड के लिए एक ही दृष्टिकोण, केवल एक बदलाव, से हटाना, सभी जानकारी सम्मिलित करें
Palesz

Java के लिए मैं इन दिनों flywaydb.org पर एक नज़र डालने की अत्यधिक सलाह देता हूं - इस साइट पर फीचर की तुलना भी देखें
Karussell

10

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


12
हाँ, लेकिन एसक्यूएल फाइलों को अलग करने से आपको अपने देव /
ठग

9

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

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

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


8

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

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


8

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


8

ओरेकल पैकेज DBMS_METADATA पर एक नज़र डालें।

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

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

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

यकीन नहीं होता कि MSSQL के लिए यह कुछ सरल है।


7

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


7

मैंने इसे सालों से बंद किया है - स्कीमा संस्करणों का प्रबंधन (या प्रबंधन करने की कोशिश)। सबसे अच्छा दृष्टिकोण आपके पास मौजूद उपकरणों पर निर्भर करता है। यदि आप क्वेस्ट सॉफ्टवेयर टूल "स्कीमा मैनेजर" प्राप्त कर सकते हैं तो आप अच्छे आकार में होंगे। ओरेकल का अपना, अवर टूल है जिसे "स्कीमा मैनेजर" भी कहा जाता है।

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


7

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

वेब से:

संस्करण नियंत्रण प्लग-इन PL / SQL डेवलपर IDE >> और Microsoft SCC इंटरफ़ेस एकीकरण का समर्थन करने वाले किसी भी संस्करण नियंत्रण प्रणाली के बीच एक मजबूत एकीकरण प्रदान करता है। >> इसमें सबसे लोकप्रिय संस्करण नियंत्रण प्रणालियाँ शामिल हैं जैसे कि Microsoft Visual SourceSafe, >> Merant PVCS और MKS Source Integrity।

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


7

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

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

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


6

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


4

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


3

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

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


3

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

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


2

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


2

मैं दो दृष्टिकोणों में से एक की सिफारिश करूँगा। सबसे पहले, Sybase से PowerDesigner में निवेश करें । एंटरप्राइज़ संस्करण। यह आपको फिजिकल डेटामॉडल्स, और पूरी तरह से डिजाइन करने की अनुमति देता है। लेकिन यह एक रिपॉजिटरी के साथ आता है जो आपको अपने मॉडल में जांच करने की अनुमति देता है। प्रत्येक नया चेक एक नया संस्करण हो सकता है, यह किसी भी संस्करण की तुलना किसी भी अन्य संस्करण से कर सकता है और यहां तक ​​कि उस समय आपके डेटाबेस में क्या है। यह तब हर अंतर की एक सूची पेश करेगा और पूछेगा कि किसको माइग्रेट किया जाना चाहिए ... और फिर इसे करने के लिए स्क्रिप्ट बनाता है। यह सस्ता नहीं है, लेकिन कीमत से दोगुना है और यह ROI 6 महीने का है।

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


1

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

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

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