2011-09-18 9 views
5

ओरेकल के database change notification feature पंक्ति प्रविष्टियों, अपडेट और हटाए गए पर पंक्तियों (भौतिक पंक्ति पते) भेजता है। जैसा कि ऑरैक के दस्तावेज़ीकरण में दर्शाया गया है, इस सुविधा का उपयोग मध्य स्तरीय कैश बनाने के लिए किया जा सकता है। लेकिन ऐसा लगता है कि जब हमारे पास पंक्ति आईडी काम करता है, तो विस्तृत विवरण प्राप्त होता है।ओरेकल डेटाबेस बदलें अधिसूचना और ROWID के

ROWID (भौतिक पंक्ति पते) बदल सकते हैं जब विभिन्न डेटाबेस संचालन this stackoverflow thread द्वारा संकेत के अनुसार किया जाता है। इसके अलावा, इस thread क्लस्टर टेबल में टॉम का उल्लेख समान पंक्तियां हो सकता है।

उपर्युक्त शोध के आधार पर, यह डेटाबेस परिवर्तन अधिसूचना के दौरान भेजे गए पंक्ति को उपयोग करने के लिए सुरक्षित नहीं लगता है क्योंकि अनुप्रयोग कैश में कुंजी सही है? यह भी एक सवाल उठाता है - क्या डेटाबेस परिवर्तन अधिसूचना सुविधा का उपयोग अनुप्रयोग सर्वर कैश बनाने के लिए किया जाना चाहिए? या कैश किए गए ऑब्जेक्ट्स की टेबलों को किसी भी ऑपरेशन से गुजरने के दौरान सभी अनुप्रयोग सर्वर क्लस्टर (फिर से लोड/रीफ्रेश करने के लिए) को पुनरारंभ करने के लिए एक अनुशंसा की जाती है जिसके परिणामस्वरूप पंक्ति में परिवर्तन होता है? क्या यह उत्पादन वातावरण के लिए एक अच्छी धारणा बन जाएगी?

+0

आप व्यवसाय संस्थाओं/डोमेन विशेषताओं पर भरोसा क्यों नहीं करते? – zerkms

+0

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

+0

हां, और आप अपने डेटा एक्सेस लेयर पर कैशिंग लेयर क्यों नहीं बनाते हैं, जो व्यापार डेटा पर भरोसा करते हैं, भंडारण से संबंधित नहीं। क्या आपको लगता है कि आप ऑरैकल से बेहतर डेटा कैश कर सकते हैं? – zerkms

उत्तर

5

ऐसा लगता है कि ऐसा कोई भी ऑपरेशन नहीं है जो संभावित रूप से ROWID को बदल सकता है एक ऐसा ऑपरेशन है जो एप्लिकेशन चल रहा है, जबकि उत्पादक वातावरण में किया जाएगा। इसके अलावा, मैंने बहुत सारे उत्पादक सॉफ़्टवेयर को देखा है जो ROWID पार लेनदेन का उपयोग करता है (आमतौर पर केवल कुछ सेकंड या मिनट के लिए)। यदि ROWID बदल गया तो वह सॉफ़्टवेयर शायद आपके कैश से पहले विफल हो जाएगा। इसलिए परिवर्तन अधिसूचना के आधार पर डेटाबेस कैश बनाना मेरे लिए उचित लगता है। ROWID के संबंध में बस एक छोटा अस्वीकरण प्रदान करें।

केवल कुछ हद तक समस्याग्रस्त ऑपरेशन एक अद्यतन है जो किसी अन्य विभाजन के लिए एक आंदोलन पैदा करता है। लेकिन ऐसा कुछ ऐसा होता है जो शायद ही कभी होता है क्योंकि यह विभाजन के उद्देश्य को हरा देता है, कम से कम अगर यह नियमित रूप से हुआ होता है। किसी विशेष डेटाबेस स्कीमा के डिज़ाइनर आपको यह बताने में सक्षम होंगे कि ऐसा ऑपरेशन हो सकता है और कैशिंग के लिए प्रासंगिक है या नहीं। यदि किसी भी तालिका में ENABLE ROW MOVEMENT सेट नहीं है, तो आपको डिज़ाइनर से पूछने की भी आवश्यकता नहीं है।

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

+0

सही लगता है। इस विषय पर अधिक शोध करते समय मैं इंडेक्स संगठित टेबल (आईओटी) के माध्यम से आया था। उनके पास तार्किक पंक्तियां हैं जो पंक्तियों को क्रमबद्ध तरीके से संग्रहीत करने के बाद बदल सकती हैं। तो डीसीएन का उपयोग करते समय हमें हमेशा यह सुनिश्चित करना होगा कि डेटाबेस तालिका इंडेक्स संगठित तालिका नहीं है, है ना? –

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