oracle software दो चरणबद्ध/साझा लेनदेन




oracle software (4)

परिदृश्य यह है

हमारे पास दो ए और बी अनुप्रयोग हैं, जो दोनों अलग-अलग डाटाबेस (ओरेकल 9i) लेनदेन में चल रहे हैं

ए ए - डेटाबेस में कुछ डेटा सम्मिलित करता है, फिर आवेदन बी आवेदन करता है बी बी - डेटाबेस में कुछ डेटा सम्मिलित करता है, संबंधित (विदेशी कुंजियों के द्वारा) ए के डेटा पर। आवेदन करने के लिए एक "आईडी" लौटाता है ए ए - ए को बी से आईडी सहित आगे डेटा डालने के लिए आईडी का उपयोग करता है

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

कोड की न्यूनतम पुनर्संरचना के साथ आप इस समस्या का कैसे सामना करेंगे? निश्चित रूप से इस तरह की एसओए दुनिया में एक आम समस्या है?

------ अद्यतन करें --------

मुझे ओरेकल 9i में कुछ भी नहीं मिल पा रहा है, हालांकि ओरेकल 11 जी डीबीएमएस_एक्सए प्रदान करता है, जो वास्तव में बाद में क्या होता है।


App_A =={0}=>               database # App_A stores information for App_B
App_A ------> App_B                  # App_A starts App_B
              App_B <={0}== database # App_B retrieves the information
              App_B =={1}=> database # App_B stores more informaion
App_A <={2}== App_B                  # App_B returns 'ID' to App_A
App_A ={2,3}>               database # App_A stores 'ID' and additional data

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


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

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


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

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

हमारी टीम की एक महिला, हमारे वास्तविक समय प्रणाली के लिए स्थायी वर्क टेबलों का उपयोग करते हुए ऐसा कुछ डिजाइन कर रही है।


आपके पास तीन विकल्प हैं:

  1. आवेदन को फिर से डिज़ाइन करें ताकि आपके पास दो अलग-अलग प्रक्रियाएं न हों (दोनों डेटाबेस कनेक्शंस के साथ) और डेटाबेस को एक एकल ऐप में रोल करें।

  2. एप्लिकेशन सी बनाएँ जो ए और बी के लिए सभी डेटाबेस लेनदेन को संभालता है।

  3. अपनी खुद की दो चरण प्रतिबद्ध रोल। आवेदन सी ​​समन्वयक के रूप में कार्य करता है सी संकेत ए और बी यह पूछने के लिए कि क्या वे प्रतिबद्ध हैं। ए और बी उनके प्रसंस्करण करते हैं, और "तैयार" या "असफल" उत्तर के साथ सी का जवाब देते हैं (ध्यान दें कि यदि कोई प्रक्रिया लटका या मर जाती है तो अनंत इंतजार से बचने के लिए सी पर समयबाह्य होना चाहिए)। यदि दोनों उत्तर तैयार हैं तो सी उन्हें प्रतिबद्ध करने के लिए कहता है। अन्यथा यह एक रोलबैक सिग्नल भेजता है

ध्यान दें कि आप विकल्प 3 के साथ समस्याओं में भाग ले सकते हैं यदि ऐप बी विदेशी बी पर निर्भर है जो ऐप बी (जो आपने नहीं बताया है, इसलिए यह कोई समस्या नहीं है)। ओरेकल की पढ़ाई की स्थिरता संभवतः इसे अनुमति देने से रोक सकती है, चूंकि ऐप ए की लेनदेन ऐप बी से पहले शुरू हो जाएगी। बस एक चेतावनी





oracle