sql - यवस - संबंधपरक डेटाबेस प्रबंधन प्रणाली




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

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

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

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

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


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

वेब से:

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

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


Redgate में SQL सोर्स कंट्रोल नामक एक उत्पाद है। यह TFS, SVN, SourceGear Vault, Vault Pro, Mercurial, Perforce और Git के साथ एकीकृत होता है।


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


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


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


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

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

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

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

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


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

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


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

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

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

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


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


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

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

इसके अलावा, मेरे पास आमतौर पर 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 $ से उन्हें फ्रीज करने के लिए।


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

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


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

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

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


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

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


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

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


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

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

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






version-control