मुझे अपने मास्टर डीडीएल स्क्रिप्ट को व्यवस्थित कैसे करना चाहिए

मैं वर्तमान में हमारे डेटाबेस के लिए एक मास्टर डीडीएल बना रहा हूँ। ऐतिहासिक रूप से हमने बैकअप / हमारे डेटाबेस के संस्करण को पुनर्स्थापित किया है, और किसी भी डीडीएल स्क्रिप्ट को बनाए रखा नहीं है। स्कीमा काफी बड़ा है।

मेरी वर्तमान सोच:

  • Break script into parts (possibly in separate scripts):

    1. table creation
    2. add indexes
    3. add triggers
    4. add constraints
  • Each script would get called by the master script.

  • I might need a script to drop constraints temporarily for testing
  • There may be orphaned tables in the schema, I plan to identify suspect tables.

कोई अन्य सलाह?

संपादित करें: अगर कोई भी प्रक्रिया के हिस्से को स्वचालित करने के लिए अच्छे उपकरण जानता है, तो हम एमएस एसक्यूएल 2000 (पुराने, मुझे पता है) का उपयोग कर रहे हैं।

0
ro fr bn

7 उत्तर

मैंने पहले एक फ़ाइल प्रति इकाई द्वारा आयोजित मेरे डीडीएल कोड का आयोजन किया और एक उपकरण बनाया जो इसे एक एकल डीडीएल स्क्रिप्ट में मिला।

मेरे पूर्व नियोक्ता ने एक योजना का उपयोग किया जहां सभी तालिका डीडीएल एक फ़ाइल में थी (ऑरैकल सिंटैक्स में संग्रहित), दूसरी तरफ इंडस्ट्रीज, चौथे और तीसरे स्थान पर स्थिर डेटा। इसके साथ पैरालेल में एक बदलाव स्क्रिप्ट रखा गया था (फिर से ओरेकल में)। एसक्यूएल में रूपांतरण मैनुअल था। वहाँ गड़बड़ थी। मैंने वास्तव में एक आसान टूल लिखा था जो ओरेकल डीडीएल को SQL सर्वर में परिवर्तित करेगा (यह 99.9% समय काम करता था)।

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

0
जोड़ा

@Adam

या डोमेन के बारे में कैसे - एक ही फाइल में संबंधित तालिकाओं का एक उपयोगी समूह, लेकिन शेष से अलग?

केवल समस्या यह है कि कुछ डोमेन (इस हद तक विरासत प्रणाली में) कसकर युग्मित होते हैं। इसके अलावा आपको अपनी अलग-अलग उप-स्क्रिप्ट के बीच निर्भरताओं को बनाए रखना होगा।

0
जोड़ा

आपके पास जो कुछ है वह बहुत अच्छा लगता है। मेरी कंपनी ने अवसर पर, बड़े पर्याप्त डेटाबेस के लिए, शायद इसे अलग-अलग ऑब्जेक्ट स्तर पर भी तोड़ दिया है। इस तरह प्रत्येक तालिका / अनुक्रमणिका / ... की अपनी फाइल है। उपयोगी हो सकता है, overkill हो सकता है। वास्तव में इस पर निर्भर करता है कि आप इसका उपयोग कैसे कर रहे हैं।

@Justin

डोमेन द्वारा ज्यादातर हमेशा पर्याप्त है। मैं मानता हूं कि इस तरह से ऐसा करने के साथ निपटने के लिए कुछ जटिलताएं हैं, लेकिन इसे संभालने में काफी आसान होना चाहिए।

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

0
जोड़ा

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

अपने डेटाबेस को लाइन पर रखने से पहले संदर्भ तालिकाओं में डेटा प्रविष्टियां अनिवार्य हो सकती हैं। इसे डीडीएल स्क्रिप्ट के हिस्से के रूप में भी माना जा सकता है। ईएमएस मौजूदा डेटाबेस से डेटा आवेषण के लिए स्क्रिप्ट उत्पन्न कर सकता है।

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

0
जोड़ा

एक सामान्य "सभी बाधाओं को छोड़ने" स्क्रिप्ट लिखने के लिए समय का निवेश करें, इसलिए आपको इसे बनाए रखने की आवश्यकता नहीं है।

निम्नलिखित कथनों पर एक कर्सर चाल करता है।

Select * From Information_Schema.Table_Constraints 

Select * From Information_Schema.Referential_Constraints
0
जोड़ा

मुझे लगता है कि मूल विचार अच्छा है।

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

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

तो आदेश होगा

  1. तालिका निर्माण
  2. अनुक्रमणिका जोड़ें
  3. बाधाएं जोड़ें

फिर

  1. ट्रिगर्स जोड़ें
  2. संग्रहित प्रक्रियाएं जोड़ें

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

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

there is a neat tools that will iterate through the entire sql server and extract all the table, view, stored proceedures and UDF defintions to the local file system as SQL scripts (Text Files). I have used this with 2005 and 2008, not sure how it wil work with 2000 though. Check out http://www.antipodeansoftware.com/Home/Products

0
जोड़ा