2008-08-07 11 views
11

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

मेरे वर्तमान सोच: भागों में

  • तोड़ स्क्रिप्ट (संभवतः अलग लिपियों में):

    1. तालिका बनाने
    2. जोड़ने अनुक्रमित
    3. ऐड
    4. की कमी को जोड़ने से चलाता है
  • प्रत्येक स्क्रिप्ट मास्टर स्क्रिप्ट द्वारा बुलाया जाएगा।

  • मैं स्कीमा में
  • वहाँ अनाथ हो सकता है तालिकाओं के परीक्षण के लिए अस्थायी रूप से कमी ड्रॉप करने के लिए एक स्क्रिप्ट की जरूरत हो सकती है, मैं संदिग्ध तालिकाओं की पहचान करने की योजना है।

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

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

उत्तर

1

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

@ जस्टिन

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

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

1

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

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

Select * From Information_Schema.Table_Constraints 

Select * From Information_Schema.Referential_Constraints 
1

@Adam

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

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

0

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

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

मैंने हाल ही में Visual Studio Team System for Database professionals का उपयोग करने के लिए स्विच किया है। अब तक यह ठीक काम करता है, लेकिन यदि आप डेटाबेस के भीतर सीएलआर कार्यों का उपयोग करते हैं तो कुछ ग्लिच हैं।

3

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

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

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

तो आदेश होगा

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

जोड़ने फिर

  1. ऐड से चलाता है
  2. संग्रहित पीआर जोड़ें ocedures

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

+0

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

+0

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

1

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

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

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

1

एक साफ उपकरण है जो पूरे SQL सर्वर के माध्यम से पुन: सक्रिय होगा और स्थानीय फ़ाइल सिस्टम में सभी तालिका, दृश्य, संग्रहीत कार्यवाही और यूडीएफ परिभाषा निकालेगा एसक्यूएल स्क्रिप्ट (पाठ फ़ाइलें)। मैंने इसका इस्तेमाल 2005 और 2008 के साथ किया है, यह सुनिश्चित नहीं है कि यह 2000 के साथ कैसे काम करेगा।http://www.antipodeansoftware.com/Home/Products