2012-09-25 4 views
5

हमारे पर्यावरण में डेटाबेस को 2 अलग-अलग वातावरण/अनुप्रयोगों द्वारा साझा किया जा रहा है। 2 अनुप्रयोगों में से, पहले एक -लेट ए कहते हैं, अक्सर अपडेट हो जाता है, जबकि दूसरा एप्लिकेशन बी अक्सर अपडेट नहीं होता है।एक ही डेटाबेस का उपयोग कर एकाधिक अनुप्रयोगों से संग्रहीत प्रक्रिया कोड परिवर्तनों को कैसे प्रबंधित करें?

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

आप इस स्थिति को सुंदर तरीके से कैसे संभालेंगे?

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

लेकिन जब सी # कोड एक प्रक्रिया को कॉल करता है, तो हमें पैरा मानों को पारित किया जाना चाहिए, और यदि नए पैरामीटर जोड़े गए हैं, तो यह टूट जाता है। क्या यह सुनिश्चित करने का कोई तरीका है कि यदि कॉलम पैरामीटर गुम है, तो इसे अनदेखा किया जाना चाहिए (सी # या SQL सर्वर से)?

मेरे शोध से पता चलता है -

  1. कि मैं sproc पहले से मानकों की सूची प्राप्त कर सकते हैं, और उसके बाद के माध्यम से प्रक्रिया पाश करने के लिए उस सूची का उपयोग कर फोन और देखें कि क्या परम मौजूद है। ताकि अगर एप्लिकेशन ए नए पैरा जोड़ता है, तो इसे स्वचालित रूप से एप्लिकेशन बी द्वारा नियंत्रित किया जा सकता है। यह पैरा सूची प्राप्त करने के लिए सी # या SQL क्वेरी में DeriveParameters का उपयोग करके किया जा सकता है।

  2. सीएसवी के रूप में पैरामीटर लेने के लिए सभी एसपीआरओसी बदलें। और उन्हें एसपीआरओसी में विभाजित करें और तदनुसार इसका इस्तेमाल करें। यह सैकड़ों मौजूदा sprocs के लिए लंगड़ा लगता है।

फिर, जैसा कि मैंने कहा - यह does not एक अच्छा समाधान की तरह लग रही है, और अगर आप एक ऐसी ही स्थिति थी, आप इसे कैसे अलग ढंग से संभाला होता? क्या वहां कोई ढांचा है, जो मुझे नहीं पता कि इस परिदृश्य के आसपास कौन सा काम कर सकता है?

पर्यावरण - ASP.NET/C# 4.0, एसक्यूएल सर्वर 2008 R2

संपादित करें - मुझे अलग तरीके से व्यक्त और यहाँ एक छोटे से अधिक जानकारी प्रदान करते हैं।

  1. आवेदन/टीम ए कोड बदलता है, लेकिन केवल सी # कोड उत्पादन में लुढ़का जाता है, डीबी परिवर्तन नहीं। यह वह जगह है जहां अंतर है। और डीबी कोड केवल अगली रिलीज के साथ ही जाएगा।

  2. एप्लिकेशन/टीम बी का नवीनतम कोड है, लेकिन डीबी परिवर्तन अभी तक उत्पादन में नहीं हैं, और अभी भी पुराने डेटाबेस का उपयोग करते हैं।

+0

अब तक पोस्ट किए गए 3 उत्तरों के अनुसार, चूंकि समस्या साझा डेटाबेस है, समाधान डेटाबेस में सबसे अच्छा है, न कि अनुप्रयोगों का उपयोग करने वाले अनुप्रयोगों में। –

+0

क्या आप अंततः दूसरी टीम के साथ क्या करना है इस पर एक समझौते की व्यवस्था की? –

उत्तर

2

क्या कोई कारण हैं कि आप नए मानकों पर डिफ़ॉल्ट मान क्यों निर्दिष्ट नहीं कर सकते हैं? जैसे

CREATE PROCEDURE xxx 

    @OldParam int 
    ,@NewParam int = 0 

AS 

    <etc> 

एप्लिकेशन "ए" दोनों पैरामीटर में गुजरता है।

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


[जोड़ा गया]

एक संभावित दीर्घकालिक समाधान होगा डेटाबेस अद्यतन होने पर हर बार अद्यतन किया जाता है।

  • किसी एप्लिकेशन को ऊपर,, इस तरह के

    हैं के रूप में शुरू होता है वहाँ कॉल जिसका मापदंडों संस्करणों में अलग हैं, तो यह वर्तमान संस्करण

  • हो जाता है, तो आप उचित रूप से कॉल के समय की जाँच करें और प्रारूप संस्करण < 3 तब

    2 मानकों

साथ वरना कॉल proc 1 पैरामीटर के साथ proc फोन

यह समय के साथ ट्रैक और बनाए रखने के लिए उग्र और गन्दा होगा, लेकिन यदि आप एक ही समय में सभी सिस्टम (ए, बी, और डेटाबेस) को अपडेट नहीं कर सकते हैं, तो आपके विकल्प सीमित हैं।

+0

धन्यवाद। लेकिन कृपया उपरोक्त संपादन की जांच करें। जैसा कि संपादन में उल्लेख किया गया है, डीबी अद्यतन नहीं है। मुझे शायद इसे कोड में ही संभालना होगा, आवेदन बी में। कोई सुझाव? – snakepitbean

2

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

4

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

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

आपको कुछ कोड को फिर से लिखना होगा निश्चित रूप से कनेक्शन तारों को बदलने के लिए अनुप्रयोग।

संबंधित मुद्दे